MySQL 进程 CPU 占用高

MySQL 进程 CPU 占用高

我们在专用服务器(Xeon E5-1620、64Gb RAM、SSD)上有一个 Magento 网站,我们的流量不大,这是一个相当小的网站,每月页面浏览量约为 30000 次,平均每天 100 个订单。我们的商店已经运营多年,从未遇到过任何问题。几周前,我开始收到仓库订单准备部门的投诉,抱怨 Magento 运行速度太慢,我注意到 mysqld 的 CPU 负载很高。

我检查了 MySQL 配置,似乎它仍然或多或少是默认配置。我不是 DBA,也不是 MySQL 配置/优化方面的专家,所以我尝试从各处获取信息并进行了一些调整,首先设置innodb_buffer_pool_sizekey_buffer_size输入my.cnf,然后进行一些其他设置,如下所示:

[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address=127.0.0.1

# What I added below
key_buffer_size=512M
#sort_buffer_size=4M <-- I commented this, it seems better now
#read_buffer_size=4M <-- I commented this, it seems better now
innodb_thread_concurrency=0
innodb_buffer_pool_size=9G
tmp_table_size=128M
max_heap_table_size=128M
skip-name-resolve
query_cache_size=64M

周五的时候看起来还好,但今天早上上班时,负载超过了 8(8 个核心),Magento 几乎没有响应。我评论道,sort_buffer_size=4M如上read_buffer_size=4M所示,我随机获取了这些数字,现在重启 30 分钟后,情况好多了,负载(1、5 和 15 分钟)低于 2.5。

关于 的值innodb_buffer_pool_size,我通过计算建议的 InnoDB 缓冲池大小来设置它(如这里解释)使用此查询:

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
    (SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
    FROM information_schema.tables WHERE engine='InnoDB') A;
+-------+
| RIBPS |
+-------+
|     9 |
+-------+

这已经有帮助了。

有人能建议我如何更好地优化 my.cnf 吗?哪些设置最重要?谢谢你的帮助。我知道这种问题已经被问过很多次了,但经过几天的尝试解决这个问题后,我感到有点绝望

更新-已解决:问题已经解决,几乎与 MySQL 优化无关(无论如何,我最后还是对其进行了优化,因为它仍处于默认配置)。对于那些感兴趣的人,我们正在使用 Solrbridge 模块作为搜索引擎,上一个版本中有一个错误,它会不断填充表格。我注意到上周出现了一个新表,数据库中最大的表为 4.9Gb,然后在星期一它增长到了 7.9Gb。我向 Solrbridge 开发人员询问了这个问题,他告诉我我可以截断这个表并关闭 Solrbridge 中的某个设置。从那时起,一切都恢复正常,CPU 平均负载:此时为 0.09 0.12 0.13。

答案1

在更改 MySQL 服务器设置之前,特别是由于您不是 DBA,我建议确认服务器没有出现故障的驱动器或降级的 RAID。如果您的存储是虚拟化的,则不适用,但请验证输出中dmesg没有可疑消息,并且smartmontools不会报告 HDD 问题。

如果没有磁盘问题,让 MySQL 在最后一次重启后至少运行几个小时,然后使用类似MySQLTuner-perl进行快速分析和量身定制的建议。我可以向您推荐其他工具,但如果没有实际经验,我建议不要一次更改多个参数。

答案2

我个人更喜欢佩科纳

该网站提供免费服务,根据您的服务器配置,它会为您提供最佳配置参数,并且我已经体验到了非常好的改进。试试看吧

相关内容