来自MySQL进程的高CPU

我们在专用服务器(Xeon E5-1620,64GB内存,SSD)上有一个Magento网站,我们不会产生很高的stream量,这是一个相当小的网站,每月大约30000页面浏览量,平均每天100个订单。 我们的店已经运行好几年了,我们从来没有遇到任何问题。 几个星期前,我开始从仓库里的订单准备部门投诉Magento的速度有多慢,我注意到来自mysqld的高CPU负载。

我检查了MySQL的configuration,似乎它仍然是或多或less的默认configuration。 我不是DBA,也不是MySQLconfiguration/优化方面的专家,所以我试着在这里和那里获取信息,并做了一些调整,首先在my.cnf设置innodb_buffer_pool_sizeinnodb_buffer_pool_size以及其他一些设置,如下所示:

 [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 

星期五看起来或多或less,但今天早上到达工作,负载高于8(8核心),Magento几乎没有回应。 我如上所述评论sort_buffer_size=4Mread_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 | +-------+ 

这已经有所帮助。

有人可以build议我优化my.cnf吗? 什么是最重要的设置? 感谢您的帮助。 我知道这个问题已经有很多次了,但是经过几天的尝试,我觉得有点绝望

更新 – 求解:这个问题已经解决,并且与MySQL优化几乎没有任何关系(无论如何我已经优化了它,因为它仍然是默认的configuration)。 对于那些感兴趣的,我们使用Solrbridge模块的search引擎,并在最后一个版本中有一个不断填写表中的错误。 我注意到,上个星期的新表最大的数据库是4.9Gb,然后在星期一它增长到了7.9Gb。 我向Solrbridge的开发者询问,他告诉我可以截断这个表格,closuresSolrbridge中的某个设置。 此后一切恢复正常,此时CPU负载平均:0.09 0.12 0.13。

在更改MySQL服务器设置之前,特别是因为您不是DBA,所以我build议您确认服务器没有失败的驱动器或降级的RAID。 它不适用于您的存储虚拟化,但validationdmesg输出没有可疑的消息和smartmontools不报告硬盘的问题。

如果没有磁盘问题,让MySQL在最后一次重启之后至less运行几个小时,然后使用像MySQLTuner-perl这样的工具进行快速分析和定制build议。 我可以指向其他工具,但是如果没有经验,我build议一次不要改变一个以上的参数。

我个人比较喜欢Percona

本网站提供免费的服务,根据您的服务器configuration,它给你最佳的configuration参数,我已经经历了很好的改进。 试一试