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 / 85951
Accepted
chris
chris
Asked: 2014-12-12 10:12:32 +0800 CST2014-12-12 10:12:32 +0800 CST 2014-12-12 10:12:32 +0800 CST

Existe uma maneira de executar mysqldumpslow contra consultas lentas registradas em uma tabela?

  • 772

Por padrão, o AWS RDS registra consultas lentas em uma tabela de banco de dados.

Existe uma maneira de executar o mysqldumpslow nessa tabela, sem exportá-lo para um arquivo primeiro? Ou existe uma maneira melhor de obter um relatório de consultas lentas?

mysql mysql-5
  • 1 1 respostas
  • 2179 Views

1 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2014-12-12T10:52:57+08:002014-12-12T10:52:57+08:00

    mysqldumpslow só funciona em arquivos de texto, então você precisa esquecer de usá-lo.

    A tabela mysql.slow_logé uma tabela CSV por padrão.

    mysql> show create table mysql.slow_log\G
    *************************** 1. row ***************************
           Table: slow_log
    Create Table: CREATE TABLE `slow_log` (
      `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `user_host` mediumtext NOT NULL,
      `query_time` time NOT NULL,
      `lock_time` time NOT NULL,
      `rows_sent` int(11) NOT NULL,
      `rows_examined` int(11) NOT NULL,
      `db` varchar(512) NOT NULL,
      `last_insert_id` int(11) NOT NULL,
      `insert_id` int(11) NOT NULL,
      `server_id` int(10) unsigned NOT NULL,
      `sql_text` mediumtext NOT NULL
    ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
    1 row in set (0.00 sec)
    
    mysql>
    

    Você não deseja consultar uma tabela CSV, pois ela fará verificações completas da tabela todas as vezes.

    O que você pode fazer é criar uma cópia da tabela em outro banco de dados e indexarstart_time

    DROP DATABASE IF EXISTS my_slow_log;
    CREATE DATABASE my_slow_log;
    CREATE TABLE my_slow_log.slow_log LIKE mysql.slow_log;
    ALTER TABLE my_slow_log.slow_log ADD INDEX (start_time);
    ALTER TABLE my_slow_log.slow_log DISABLE KEYS;
    INSERT INTO my_slow_log.slow_log
        SELECT * FROM mysql.slow_log
    ;
    ALTER TABLE my_slow_log.slow_log ENABLE KEYS;
    

    Em seguida, você pode consultar my_slow_log.slow_logpor valores de data e hora

    Eu já discuti isso antes

    • Nov 18, 2011: Crie uma tabela de log personalizada no MySQL
    • Mar 30, 2012: Configuração de log lento do MySQL

    De uma chance !!!

    CAVEAT: Você teria que recarregar os dados toda vez que quiser os últimos logs lentos.

    Nesse caso, se você quiser apenas logs lentos da meia-noite de 3 dias atrás, faça o seguinte:

    TRUNCATE TABLE my_slow_log.slow_log;
    ALTER TABLE my_slow_log.slow_log DISABLE KEYS;
    INSERT INTO my_slow_log.slow_log
        SELECT * FROM mysql.slow_log
        WHERE start_time >= DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;
    ;
    ALTER TABLE my_slow_log.slow_log ENABLE KEYS;
    

    ou apenas nas últimas 3 horas

    TRUNCATE TABLE my_slow_log.slow_log;
    ALTER TABLE mysql.slow_log DISABLE KEYS;
    INSERT INTO my_slow_log.slow_log
        SELECT * FROM mysql.slow_log
        WHERE start_time >= (NOW() - INTERVAL 3 HOUR);
    ;
    ALTER TABLE my_slow_log.slow_log; ENABLE KEYS;
    

    ATUALIZAÇÃO 2014-12-11 14:50 EST

    Seu comentário

    Isso torna a consulta dos dados um pouco mais rápida, mas estou interessado em como fornecer um resumo das consultas lentas que posso passar para nossos desenvolvedores

    Você pode apresentar isso aos seus desenvolvedores solicitando entradas de logs lentos da seguinte maneira:

    As 20 consultas com pior desempenho de hoje

    SELECT query_time,sql_text
    FROM my_slow_log.slow_log
    WHERE start_time >= DATE(NOW()) + INTERVAL 0 SECOND
    ORDER BY query_time DESC
    LIMIT 20;
    

    Contagem de consultas lentas por hora nas últimas 2 semanas

    SELECT hr,COUNT(1) SlowQueries FROM
    (
        SELECT (unix_timestamp(start_time) - MOD(unix_timestamp(start_time),3600)) hr
        FROM my_slow_log.slow_log
        WHERE start_time >= DATE(NOW() - INTERVAL 2 WEEK) + INTERVAL 0 SECOND
    ) A GROUP BY hr;
    

    Contagem de consultas lentas por minuto nas últimas 6 horas

    SELECT mn,COUNT(1) SlowQueries FROM
    (
        SELECT (unix_timestamp(start_time) - MOD(unix_timestamp(starttime),60)) mn
        FROM my_slow_log.slow_log
        WHERE start_time >= ( NOW() - INTERVAL 6 HOUR )
    ) A GROUP BY mn;
    

    Consultas como essas podem fornecer estatísticas quando as consultas lentas são executadas e quais foram as consultas reais.

    Você pode enviar essas consultas para um arquivo de texto e enviá-las aos desenvolvedores

    MYSQL_USER=root
    MYSQL_PASS=rootpassword
    MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
    SQL="SELECT query_time,sql_text FROM my_slow_log.slow_log"
    SQL="${SQL} WHERE start_time >= DATE(NOW()) + INTERVAL 0 SECOND"
    SQL="${SQL} ORDER BY query_time DESC LIMIT 20"
    mysql ${MYSQL_CONN} -ANe"${SQL}" > Slow_Queries_Report.txt
    
    • 4

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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