Eu não posso falar em termos de AmazonRDS, mas aqui está algo genérico para tentar
Você sabia que o log lento é um arquivo CSV ativado?
Se você olhar para o mysql.slow_log, verá isto:
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>
Isso não é bom para você como um arquivo CSV. Você pode convertê-lo para MyISAM e usá-lo .
Veja o que você pode fazer:
- Faça uma cópia do log lento CSV original
- Converta o CSV para MyISAM
- Adicione dois índices
- por start_time
- por db, start_time
- Ativar o log lento
Aqui estão os passos básicos:
CREATE TABLE mysql.slow_log_original LIKE mysql.slow_log;
ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX starttime (start_time);
ALTER TABLE mysql.slow_log ADD INDEX db_starttime (db,start_time);
Em seguida, ative o registro em log para mysql.slow_log
adicionando isso a /etc/my.cnf
[mysqld]
slow-query-log
log-format=TABLE
Se você ainda quiser um arquivo de texto para consultas lentas além de uma tabela, use
[mysqld]
slow-query-log
slow-query-logfile=/var/log/mysql_slow.log
log-format=TABLE
Agora você provavelmente está se perguntando por que estou mostrando a tabela mysql.slow_log
e não mysql.general_log
. Bem, aqui está o mysql.general_log
:
mysql> desc mysql.general_log;
+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| event_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host | mediumtext | NO | | NULL | |
| thread_id | int(11) | NO | | NULL | |
| server_id | int(10) unsigned | NO | | NULL | |
| command_type | varchar(64) | NO | | NULL | |
| argument | mediumtext | NO | | NULL | |
+--------------+------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.01 sec)
mysql>
Não há nada que aponte uma consulta para o banco de dados em mysql.general_log
.
Ah, a propósito, você tem que definir outras coisas para pegar o mysql.slow_log
pegar tudo
[mysqld]
slow-query-log
log-format=TABLE
log-query-time=0
log-queries-not-using-indexes
Dessa forma, toda consulta e sua avó são registradas em mysql.slow_log
.
EPÍLOGO
Tudo o que você precisa fazer é executar consultas em relação a mysql.slow_log
. Por exemplo, para ver todas as consultas do banco de dados mydb
de hoje, você executaria:
SELECT * FROM mysql.slow_log
WHERE db = 'mydb'
AND start_time >= DATE(NOW()) + INTERVAL 0 SECOND;
Como você está usando o Amazon RDS, você terá que verificar a documentação para ver se você pode manipular mysql.slow_log
do seu jeito.
Aqui estão minhas postagens anteriores no StackExchange sobre o uso de mysql.slow_log
:
-
Nov 18, 2011
: Crie uma tabela de log personalizada no MySQL -
Dec 27, 2011
: Como fazer a contabilidade do usuário no MySQL -
Mar 30, 2012
: Configuração de log lento do MySQL -
Nov 06, 2012
: AWS RDS MySQL / Log de consulta lenta