Mysql 配置参数优化
优化最大连接数
max_connections
是 MySQL 最大并发连接数,默认值是 151
MySQL 允许的最大连接数上限是 16384
实际连接数是最大连接数的 85% 较为合适
查询数据库目前设置的最大并发连接数是多少?
1 | SHOW VARIABLES LIKE 'max_connections'; |
查询数据库目前实际连接的并发数是多少
1 | SHOW STATUS LIKE 'max_used_connections'; |
在 MySQL 配置文件 /etc/my.cnf
中设置 max_connections=3000
,表示修改最大连接数为 3000,需要重启 MySQL 才能生效
MySQL 为每个连接创建缓冲区,所以不应该盲目上调最大连接数,如果最大连接数达到了上面设置的 3000,会消耗大约 800M 内存。
优化请求堆栈
back_log 是存放执行请求的堆栈大小,默认值是 50
该值设置为最大并发连接数的 20%~ 30% 较为合适
同样是在 MySQL 配置文件 /etc/my.cnf
中,设置 back_log=600
,修改后需要重启 MySQL 才能生效
修改并发线程数
innodb_thread_concurrency
代表并发线程数,默认是 0,表示没有设置线程数量的上限。
不是分配给 MySQL 的线程越多越好,线程多反而会损耗 cpu 性能,导致速度变慢
并发线程数应该设置为 cpu 核心数的两倍
在 MySQL 配置文件 /etc/my.cnf
中,设置 innodb_thread_concurrency=8
查看 cpu 型号
1 | cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c |
查看 cpu 核心数
1 | cat /proc/cpuinfo | grep "cores"|uniq |
修改连接超时时间
wait-timeout
是超时时间,单位是秒
连接默认超时为 8 小时,连接长期不用又不销毁,浪费资源
设置超时时间为 10 分钟 wait-timeout=600
InnoDB 缓存
修改 InnoDB 缓存大小
innodb_buffer_pool_size
是 InnoDB 的缓存容量,默认是 128M
InnoDB 缓存的大小可以设置为主机内存的 70%~ 80%
在 MySQL 配置文件中,会有一行被注释的配置:# innodb_buffer_pool_size = 128M
上方注释也写明了,建议设置物理内存的 70%
1 | # Remove leading # and set to the amount of RAM for the most important data |