Você sabia que há uma tabela de log lenta? É chamado mysql.slow_log
:
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.01 sec)
mysql>
Existem duas variáveis que você deve ativar para iniciar a gravação de consultas lentas no mysql.slow_log:
Aqui está a situação
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | TABLE |
+---------------+-------+
1 row in set (0.01 sec)
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.01 sec)
mysql>
log_output é já padrão para TABLE
. Você precisará ativar o slow_query_log . Aqui está o que você deve fazer:
Se sua instância do RDS não tiver um grupo de parâmetros de banco de dados ...
- Acione uma instância do MySQL do AmazonRDS que usa um grupo de parâmetros de banco de dados.
- Edite o grupo de parâmetros de banco de dados configurando o slow_query_log como 1
- Reinicie a instância de banco de dados
Se sua instância do RDS tiver um grupo de parâmetros de banco de dados ...
- Edite o grupo de parâmetros de banco de dados configurando o slow_query_log como 1
- Reinicie a instância de banco de dados
Uma vez que a Instância foi reiniciada, faça o login no mysql e execute esta consulta
mysql> SELECT SLEEP(15);
Como o padrão para long_query_time é de 10 segundos, a consulta SELECT SLEEP(15);
deve aparecer em mysql.slow_log
. Leia a documentação do RDS para ver se há algum limite na tabela.
CAVEAT
Aqui está um aviso justo. Observe que mysql.slow_log
é um arquivo CSV. A mesa não tem chave. Enquanto você pode consultar a tabela, ela fará varreduras de tabela completas. Seria ótimo se você pudesse fazer o seguinte:
ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
Em seguida, você pode consultar muito rapidamente para intervalos de data e hora. Eu tentei rodar isso e eu entendi isso:
mysql> ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ERROR 1044 (42000): Access denied for user 'lwdba'@'%' to database 'mysql'
mysql>
Verifique a documentação do RDS para ver se a Amazon pode fazer isso por você.
Experimente!