Wussten Sie, dass es eine langsame Protokolltabelle gibt? Es heißt 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>
Es gibt zwei Variablen, die Sie aktivieren müssen, um langsame Abfragen in mysql.slow_log aufzuzeichnen:
Hier ist die Situation
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 ist bereits voreingestelltTABLE
. Sie müssen slow_query_log aktivieren . Folgendes müssen Sie tun:
Wenn Ihre RDS-Instanz keine DB-Parametergruppe hat ...
- Starten Sie eine AmazonRDS MySQL-Instanz, die eine DB-Parametergruppe verwendet.
- Bearbeiten Sie die DB-Parametergruppe, indem Sie das slow_query_log auf 1 setzen
- Starten Sie die DB-Instanz neu
Wenn Ihre RDS-Instanz eine DB-Parametergruppe hat ...
- Bearbeiten Sie die DB-Parametergruppe, indem Sie das slow_query_log auf 1 setzen
- Starten Sie die DB-Instanz neu
Melden Sie sich nach dem Neustart der Instanz bei mysql an und führen Sie diese Abfrage aus
mysql> SELECT SLEEP(15);
Da der Standardwert für long_query_time 10 Sekunden ist, sollte die Abfrage SELECT SLEEP(15);
in angezeigt werdenmysql.slow_log
. Lesen Sie die RDS-Dokumentation, um festzustellen, ob die Tabelle Einschränkungen enthält.
VORBEHALT
Hier ist eine faire Warnung. Hinweis mysql.slow_log
ist eine CSV-Datei. Die Tabelle hat keinen Schlüssel. Während Sie die Tabelle abfragen können, werden vollständige Tabellenscans durchgeführt. Es wäre großartig, wenn Sie Folgendes tun könnten:
ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
Dann können Sie sehr schnell nach Datums- und Zeitbereichen fragen. Ich habe versucht, dies auszuführen, und ich verstehe Folgendes:
mysql> ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ERROR 1044 (42000): Access denied for user 'lwdba'@'%' to database 'mysql'
mysql>
Überprüfen Sie in der RDS-Dokumentation, ob Amazon dies für Sie tun kann.
Versuche es !!!
Sie können die Tabelle auch in eine neue in einer anderen Datenbank kopieren und die neue MyISAM erstellen:
(dann
select from my_slow_logs...
)Amazon RDS erlaubt dies, solange Sie dies außerhalb der MySQL-Datenbank tun.
quelle