【问题标题】:How to find out which MySQL query consumes most of CPU time?如何找出哪个 MySQL 查询消耗了最多的 CPU 时间?
【发布时间】:2019-06-15 00:43:52
【问题描述】:

我搜索了很多主题,但找不到任何有关如何查找哪个查询消耗更多 CPU 时间的信息。

我正在使用 MySQL 8.0 和 MySQL Workbench。 我可以找到查询的平均和总执行时间,但我不确定它是否是 CPU 使用率的指标。由于内存不足和额外的磁盘读取,查询可能需要更长的时间来执行。

【问题讨论】:

  • 您应该使用SHOW PROFILE,但它已被弃用,并将在未来的 MySQL 版本中删除。或者使用 Query Profiling Using Performance Schema .. 如果 SHOW PROFILE 仍在您的数据库中工作,请使用它,因为它更多易于使用..两者都应该为您提供磁盘 I/O 指示..
  • 谢谢大家的帮助! SHOW PROFILE 在我的数据库中不起作用。
  • Raymond,我听从了您的建议,并使用 EXPLAIN 仔细检查了最耗时的查询。它们都经过很好的优化,使用索引并且不使用临时表。但我注意到我仍然可以做一些小的优化。用 PHP 计算的日期替换了查询中的 NOW() 函数。
  • 我的硬件是 2 x E56XX 2.4GHz CPU、2Gb RAM、50Gb SSD、Windows 2008 R2。显示全球状态:pastebin.com/pfs1DPzU 感谢“显示全球状态”不知道这样的命令会研究它。全局变量:pastebin.com/ESp8ZP6u
  • 进程列表:prntscr.com/maxp8mmy.ini:pastebin.com/9P5mGtSY这是windowws机器所以我没有MySQLTuner

标签: mysql mysql-workbench


【解决方案1】:

为您的 my.ini [mysqld] 部分考虑以提高您的实例性能的建议,

thread_cache_size=100  # from 10 to reduce threads_created count of 34,663 
innodb_flushing_avg_loops=5  # from 30 to reduce loop delay and reduce innodb_buffer_pool_pages_dirty 1,660 in this STATUS report
max_connections=100  # from 151 to reduce RAM footprint, max_used_connections was 31
innodb_io_capacity=5000  # from 200   stop/start required
if you have innodb_io_capacity_max in your my.ini, REMOVE it for new max of 10000
innodb_open_file=-1  # from 300 for auto calc value = table_open_cache current value of 2000

有关其他建议,请查看我的个人资料、网络个人资料以获取联系信息并通过电子邮件或 Skype 与我们联系。

祝贺您通过正确使用 com_dealloc_sql 和 com_stmt_close 编码技术释放资源。

【讨论】:

  • 非常感谢威尔逊!将检查您建议的所有内容!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多