我正在寻找帮助调整我们的my.cnf文件以处理许多当前用户(大约20个订单/分钟)的帮助。这个特定的网站是在WordPress和运行Woocommerce。
经过大量在线阅读后,我想出了下面的设置。服务器是Debian 8,有12个CPU和48GB RAM。
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M
key_buffer = 2G
max_allowed_packet = 512M
thread_cache_size = 256K
tmp_table_size = 4G
max_heap_table_size = 4G
table_cache = 1024
table_definition_cache = 1024
myisam_recover = FORCE,BACKUP
max_connections = 300
wait_timeout = 120
connect_timeout = 120
interactive_timeout = 120
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_buffer_pool_size = 2G
innodb_io_capacity = 1000
innodb_read_io_threads = 32
innodb_thread_concurrency = 0
innodb_write_io_threads = 32
现在似乎运行得很好。任何额外的想法?感谢您的投入!
答案 0 :(得分:1)
query_cache_type = 1 query_cache_limit = 256K query_cache_min_res_unit = 2k query_cache_size = 80M
请参阅https://dom.as/tech/query-cache-tuner/
key_buffer = 2G
密钥缓冲区仅适用于MyISAM。你不应该使用MyISAM。
对于tmp表和堆表大小,4G可能太高了。请记住,多个线程可以同时创建临时表。max_allowed_packet = 512M thread_cache_size = 256K tmp_table_size = 4G max_heap_table_size = 4G
table_cache = 1024 table_definition_cache = 1024
可能有点矫枉过正。
myisam_recover = FORCE,BACKUP
也仅用于MyISAM。
max_connections = 300
show global status like 'max_used_connections'
说什么?它接近max_connections吗?
wait_timeout = 120 connect_timeout = 120 interactive_timeout = 120 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 2 innodb_file_per_table = 1 innodb_buffer_pool_size = 2G
很好但是有了48G的RAM,你可以增加缓冲池的大小。
运行show engine innodb status
并查找以下行:
Buffer pool size 131072
Free buffers 0
Database pages 128000
您的缓冲池是否始终挂满?如果是这样,请增加其大小。
数据库的总大小是多少?您不需要缓冲池更大而不是数据+索引的总大小,但是大到足以容纳频繁访问的页面将是好的。
select round(sum(data_length+index_length)/1024/1024, 2) as mb
from information_schema.tables where engine='InnoDB'
innodb_io_capacity = 1000 innodb_read_io_threads = 32 innodb_thread_concurrency = 0 innodb_write_io_threads = 32
io容量可能大于磁盘跟上的能力。您没有描述您的磁盘系统是什么。
对于带有您描述的流量的Wordpress网站来说,io线程有点过分。运行show engine innodb status
并查找以下行:
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
如果你总是在该行看到0,那么你不需要超过默认的4& 4个线程。