在mysql服务器中识别没有慢查询日志的慢查询

Ast*_*tha 13 mysql performance slow-log

我想知道有没有其他方法可以在不记录慢查询的情况下检查我们的慢查询。假设,我有一个非常繁忙的服务器无法记录太多以节省内存和 I/O。那么,有没有其他方法可以检查我的查询速度是否慢?我知道,我们可以对查询进行分析,但仍然不确定究竟要做什么来确定哪个查询占用了大部分时间和内存。

刚开始 mysql 管理,不知道如何处理。任何指导将不胜感激。

Rol*_*DBA 7

如果你根本不想启用慢查询日志,我有一个建议

您可以在一段时间内使用pt-query-digest

我在 DBA StackExchange 中建议了几次

如果您查看我的Nov 24, 2011链接,我提供了一个 shell 脚本,您可以使用 crontab 来启动pt-query-digest

试一试 !!!


Jeh*_*aki 6

例如,您可以在脚本中循环运行以下语句,该脚本每 10 秒触发一次语句。

mysql -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time>10 and command<>"Sleep"'

您可以自定义它以根据您发出的查询为您提供更多或更少的信息。

mysql> desc INFORMATION_SCHEMA.PROCESSLIST;
+---------------+---------------------+------+-----+---------+-------+
| Field         | Type                | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| ID            | bigint(21) unsigned | NO   |     | 0       |       |
| USER          | varchar(16)         | NO   |     |         |       |
| HOST          | varchar(64)         | NO   |     |         |       |
| DB            | varchar(64)         | YES  |     | NULL    |       |
| COMMAND       | varchar(16)         | NO   |     |         |       |
| TIME          | int(7)              | NO   |     | 0       |       |
| STATE         | varchar(64)         | YES  |     | NULL    |       |
| INFO          | longtext            | YES  |     | NULL    |       |
| TIME_MS       | bigint(21)          | NO   |     | 0       |       |
| ROWS_SENT     | bigint(21) unsigned | NO   |     | 0       |       |
| ROWS_EXAMINED | bigint(21) unsigned | NO   |     | 0       |       |
+---------------+---------------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

为了不多次保存相同的查询,您可以使用查询的哈希作为唯一键。