AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 39221
Accepted
Ruchit Rami
Ruchit Rami
Asked: 2013-04-05 02:57:19 +0800 CST2013-04-05 02:57:19 +0800 CST 2013-04-05 02:57:19 +0800 CST

Teste de estresse do MySQL com consultas capturadas com log geral no MySQL

  • 772

Existe alguma ferramenta disponível que possa fazer testes de estresse usando o arquivo de log criado pelo log geral do MySQL? Depois de muita pesquisa no google, encontrei algumas ferramentas de teste de estresse que usam apenas alguns benchmarks para teste de estresse. Uma solução é usar o Apache JMeter, mas ele não cria planos de teste a partir do arquivo de log do MySQL e criar um plano de teste personalizado para todas as consultas que tenho consome muito tempo.
Ou existe uma ferramenta que pode pelo menos criar um arquivo .sql a partir do log do MySQL?

mysql logs
  • 2 2 respostas
  • 6374 Views

2 respostas

  • Voted
  1. RolandoMySQLDBA
    2013-04-05T11:45:40+08:002013-04-05T11:45:40+08:00

    Aqui está uma abordagem mais direta usando o mysql de força bruta: Configure o geral como uma tabela MyISAM. Na instalação, você encontrará a tabela mysql.general_logcomo uma tabela CSV.

    Em vez de reinventar a roda e digitar muito, leia minhas postagens anteriores:

    • Nov 16, 2011: Registre consultas e usuários de alteração do banco de dados MySQL
    • Feb 11, 2012: Registro geral do MySQL
    • Jan 08, 2012: Como ativar o log geral do MySQL?

    Uma vez mysql.general_logconvertido para MyISAM e as consultas gravadas, basta acessar o log como qualquer outra tabela MyISAM.

    Aqui está a estrutura da versão MyISAM demysql.general_log

    mysql> show create table mysql.general_log\G
    *************************** 1. row ***************************
           Table: general_log
    Create Table: CREATE TABLE `general_log` (
      `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `user_host` mediumtext NOT NULL,
      `thread_id` int(11) NOT NULL,
      `server_id` int(10) unsigned NOT NULL,
      `command_type` varchar(64) NOT NULL,
      `argument` mediumtext NOT NULL,
      KEY `event_time` (`event_time`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)
    

    A partir daqui, basta escrever todo o conteúdo começando com uma consulta:

    SQLSTMT="SELECT argument FROM mysql.general_log"
    SQLSTMT="${SQLSTMT} WHERE LEFT(argument,6) IN"
    SQLSTMT="${SQLSTMT} ('INSERT','UPDATE','DELETE','SELECT')"
    mysql -uroot -p -ANe"${SQLSTMT}" > SQLCommands.sql
    

    Ai está.

    De uma chance !!!

    • 5
  2. Best Answer
    Cristian Porta
    2013-04-05T03:39:08+08:002013-04-05T03:39:08+08:00

    Este é apenas um traço e não uma solução completa, "sua" solução é baseada em sua fantasia (e algum trabalho) ;)

    Eu fiz esse tipo de teste capturando e limpando a consulta gerada pelo log de consulta geral e usando o sysbench 0.5 depois de escrever meu próprio luaarquivo, você pode encontrar algumas amostras no código-fonte oficial , em um espelho do meu banco de dados (hw e schema/data -um instantâneo para que eu possa restaurar o status original dos dados imediatamente-).

    Então você pode executar um comando como este:

    ./sysbench --mysql-table-engine=myisam --mysql-db=<yourdb> --mysql-user=<user> --mysql-host=<host> --mysql-password=<pass> --test=tests/db/<yourlua>.lua --num-threads=8 --max-requests=8 run

    Colete e represente graficamente seus resultados, alterando simultaneidade e solicitações, e monitore seu banco de dados e o status de HW.

    Meu luaarquivo contém cerca de 80.000 consultas e é composto por inserir, atualizar e excluir

    ATUALIZAÇÃO #1

    Um bom ponto de partida que você pode tentar é começar (simplesmente) escrevendo seu luaarquivo assim:

    pathtest = string.match(test, "(.*/)") or ""
    
    dofile(pathtest .. "common.lua")
    
    function thread_init(thread_id)
       set_vars()
    
       if (db_driver == "mysql" and mysql_table_engine == "myisam") then
          -- begin_query = "LOCK TABLES ".. table_name .." WRITE"
          -- commit_query = "UNLOCK TABLES"
          begin_query = "SELECT 1>0"
          commit_query = "SELECT 1>0"
       else
          begin_query = "BEGIN"
          commit_query = "COMMIT"
       end
    end
    
    function event(thread_id)
        local table_name
        db_query(begin_query)
        rs = db_query("INSERT INTO .....")
        rs = db_query("INSERT INTO .....")
        rs = db_query("SELECT ... FROM ...")
        rs = db_query("DELETE ...")
        db_query(commit_query)
    end
    

    Colocar sua consulta na db_query("")função, limpar seu log de consulta geral para esse tipo de processo requer um pouco de trabalho

    Aqui uma saída simples de um arquivo "pessoal" lua, como o acima, com 9 consultas, 7 inserts e 2 selects, +2 BEGIN/COMMIT:

    sysbench 0.5:  multi-threaded system evaluation benchmark
    
    Running the test with following options:
    Number of threads: 8
    Random number generator seed is 0 and will be ignored
    
    
    Threads started!
    
    OLTP test statistics:
        queries performed:
            read:                            32
            write:                           56
            other:                           0
            total:                           88
        transactions:                        0      (0.00 per sec.)
        deadlocks:                           0      (0.00 per sec.)
        read/write requests:                 88     (7728.11 per sec.)
        other operations:                    0      (0.00 per sec.)
    
    General statistics:
        total time:                          0.0114s
        total number of events:              8
        total time taken by event execution: 0.0252s
        response time:
             min:                                  2.87ms
             avg:                                  3.15ms
             max:                                  3.65ms
             approx.  95 percentile:               3.65ms
    
    Threads fairness:
        events (avg/stddev):           1.0000/0.00
        execution time (avg/stddev):   0.0032/0.00
    

    Espero que isto ajude

    • 2

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve