为许多用户调整MySql my.cnf

时间:2017-04-17 19:56:19

标签: mysql wordpress

我正在寻找帮助调整我们的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

现在似乎运行得很好。任何额外的想法?感谢您的投入!

1 个答案:

答案 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。

max_allowed_packet  = 512M
thread_cache_size   = 256K
tmp_table_size      = 4G
max_heap_table_size = 4G
对于tmp表和堆表大小,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个线程。