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

Identify slow query without slow query logs in mysql server

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

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

我发现速度慢是导致服务器停滞不前的最好原因。

建议您开始将 long_query_time 的价值中等偏高。这将最小化 I/O 和磁盘 space。如果可以,修复它找到的查询。

用完后,降低该设置以找到更多内容。

使用 pt-query-digest 查找 "worst" 个查询。

请记住,高值只会找到长查询,即使它们很少见。较低的值会找到 运行 频繁的快速查询,而这些可能是真正的反派。

另一种方法是只短暂地或在相对空闲的时间打开慢日志。您发现的内容可能仍然非常有用。

轶事:在一个系统中有一个查询,其中 WHERE 被错误地表述为 运行ning 100% CPU。一行修复将 CPU 降低到 2%。

另一个轶事:一个特定的查询很快,但 运行ning 频繁。一点算术表明查询不应该像看到的那样频繁地发出。查询在循环内,而它本可以在循环外。

回到您选择的方向...您可以可以 手动执行SHOW PROCESSLIST 以查看运行ning 频繁或缓慢的情况。这很乏味,而且命中注定。但它可能 捕获 (1) 缓慢、不频繁的查询,以及 (2) 快速、频繁的查询。

如果您想 post SHOW VARIABLES;SHOW GLOBAL STATUS;,我将检查几百个公式,这些公式可能会导致更深入地了解效率低下。