人们注意到Cloud (MySQL)在几天内消耗了大量的CPU (~100%)。
首先,我决定我们有许多用户在线或背景工作。但这是正常的工作量,没什么特别的。Query为DB中的所有用户和MySQL实例中的所有DBs显示CPU低于20%。
其次,我决定我们有连接或内存泄漏。也没什么特别的。
最后,我检查的是显示完整PROCESSLIST的输出。我注意到一些过程持续时间太长(~8天)(见时间场),状态是‘统计’。这个工作负载没有显示在Query的CPU图表中,而是属于我的sql用户。事实上,这对我来说很奇怪。
“Info”字段包含“SELECT.”查询。我能杀死这样的过程。CPU达到了正常水平。
看起来,它是两个bug (1)和(2)的组合。当前的按标记搜索查询的实现(取决于所选标记的数量)结合了“IN()”子句,其中大于2个标记和“内部连接”子句,导致了MySQL查询优化器的性能下降。
INNER JOIN
替换为INTERSECT
(MySQL 8.0.31)。IN (<values>)
替换为UNION DISTINCT
。EXPLAIN ANALYSE
)。发布于 2023-02-25 01:26:11
一个花费很长时间的查询是“统计”,例如,可能是一个偶然的CROSS JOIN
(一个没有ON
会社的联接)。或者,它可能是一个被许多其他查询不断阻止的查询,这些查询写到同一个表(S)。
不仅要检查慢速查询,还要检查同时运行的所有其他查询。
如果您没有打开long_query_time
值较低的慢速日志,请这样做。(但是,日志在完成之前不会显示长时间运行的查询。)
还提供SHOW VARIABLES LIKE '%timeout'
https://dba.stackexchange.com/questions/323994
复制相似问题