首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(MySQL)在几天内消耗过多的CPU。

(MySQL)在几天内消耗过多的CPU。
EN

Database Administration用户
提问于 2023-02-24 05:37:42
回答 1查看 94关注 0票数 0

人们注意到Cloud (MySQL)在几天内消耗了大量的CPU (~100%)。

首先,我决定我们有许多用户在线或背景工作。但这是正常的工作量,没什么特别的。Query为DB中的所有用户和MySQL实例中的所有DBs显示CPU低于20%。

其次,我决定我们有连接或内存泄漏。也没什么特别的。

最后,我检查的是显示完整PROCESSLIST的输出。我注意到一些过程持续时间太长(~8天)(见时间场),状态是‘统计’。这个工作负载没有显示在Query的CPU图表中,而是属于我的sql用户。事实上,这对我来说很奇怪。

“Info”字段包含“SELECT.”查询。我能杀死这样的过程。CPU达到了正常水平。

更新:

  1. https://bugs.mysql.com/bug.php?id=20932
  2. https://bugs.mysql.com/bug.php?id=26339
  3. https://bugs.mysql.com/bug.php?id=21153
  4. https://www.linuxtopia.org/online_书籍/数据库_指南/mysql_5.1_数据库_参考文献_指南/控制-优化

描述

看起来,它是两个bug (1)和(2)的组合。当前的按标记搜索查询的实现(取决于所选标记的数量)结合了“IN()”子句,其中大于2个标记和“内部连接”子句,导致了MySQL查询优化器的性能下降。

解决方案(正在进行中)

  1. INNER JOIN替换为INTERSECT (MySQL 8.0.31)。
  2. IN (<values>)替换为UNION DISTINCT
  3. 添加适当的索引(借助EXPLAIN ANALYSE)。
EN

回答 1

Database Administration用户

发布于 2023-02-25 01:26:11

一个花费很长时间的查询是“统计”,例如,可能是一个偶然的CROSS JOIN (一个没有ON会社的联接)。或者,它可能是一个被许多其他查询不断阻止的查询,这些查询写到同一个表(S)。

不仅要检查慢速查询,还要检查同时运行的所有其他查询。

如果您没有打开long_query_time值较低的慢速日志,请这样做。(但是,日志在完成之前不会显示长时间运行的查询。)

还提供SHOW VARIABLES LIKE '%timeout'

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/323994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档