我想知道是否有任何其他方法可以在不记录慢查询的情况下检查我们的慢查询。假设,我有一个繁忙的服务器,不能记录很多东西来保存内存和I / O。然后,是否有任何其他方式可以检查我是否有慢查询?我知道,我们可以执行查询的分析,但仍然不确定要确定哪个查询是什么,其中大部分时间和内存。

刚开始MySQL管理,不确定如何处理此操作。任何指导都会受到高度赞赏。

有帮助吗?

解决方案

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

您可以使用 pt-query-digest < / a>在时间间隔内。

我在dba stackexchange

中建议了几次

如果你看看我的 Nov 24, 2011 link ,我提供了一个shell脚本,您可以crontab推出 pt -query-digest

给它一个尝试!!!

其他提示

您可以在脚本中以每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)
.

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

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top