我们有一个在专用服务器上运行的 prestashop 网站,上面有 10K 种产品,我的性能很慢,查看 htop 发现 mysql CPU 达到了 100%。
专用服务器
CPU:英特尔(R)至强(R)CPU E3-1230 V2 @ 3.30GHz
内存:16 GB
mysql:
innodb_file_per_table
max_connections=500
max_user_connections=300
wait_timeout=100
interactive-timeout=100
table_open_cache=1024
thread_cache_size=64
join_buffer=16M
sort_buffer=32M
table_open_cache=5000
key_buffer_size=512M
innodb_buffer_pool_size=2GB
sort_buffer_size=8M
read_buffer_size=8M
read_rnd_buffer_size=8M
myisam_sort_buffer_size=128M
max_allowed_packet=32M
net_retry_count=512
thread_cache=8
thread_concurrency=32
server_id=1
collation_server=utf8_unicode_ci
character_set_server=utf8
tmp_table_size=128M
max_heap_table_size=128M
query_cache_limit=256K
query_cache_size=100MB
query_cache_type=1
concurrent_insert=2
low_priority_updates=1
open_files_limit=50000
default-storage-engine=MyISAM
slow_query_log
[mysqldump]
quick
max_allowed_packet=16M
需要配置/更改哪些内容才能获得更好的性能?谢谢
答案1
请检查当前的 mysql 进程,有时当连接到 mysql 服务器的应用程序出现错误时,mysql 服务将占用大量资源。
答案2
很难说你应该更改哪些设置,以及应该将它们改成什么。看来你正在使用默认配置设置,这可能不适合你的服务器。
开始调查的一个好地方是 MySQLTuner,它是一个流行的脚本,您可以运行它并查看您当前的配置并提出改进建议。
https://github.com/major/MySQLTuner-perl
另一个有用的工具是慢查询日志。您可以看到哪些查询运行时间很长,它们可能写得不好。
如果您的 Web 服务器也在同一台服务器上运行,请不要对 MySQL 缓存设置过于激进,繁重的流量可能会导致服务器内存耗尽并开始分页,这将使您陷入困境。
答案3
以下建议需要您在每天仅实施一项之前进行研究。有些建议可以动态应用。建议的 [mysqld} 部分 cfg/ini 值如下,可以修改、添加或删除。
join_buffer=16M REMOVE, not a valid name
sort_buffer=32M REMOVE, not a valid name
thread_cache=8 REMOVE, not a valid name
sort_buffer_size=8M REMOVE to allow default of 2MB to work for you
read_buffer_size=8M REMOVE to allow default of 128K to work for you
read_rnd_buffer_size=8M REMOVE to allow default of 256K to work for you
最后 3 个将改善用户的响应时间(通过最小化读取开销)并显著减少 MySQL RAM 占用空间。使用 MySQLCalculator.com 将帮助您了解原因/方法。
为了进行详细分析,请在一个或一个完整的工作日后,在您的原始问题中发布以下内容,
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;
有关其他特定配置建议,请每天应用一个,然后进行监控。