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
2
3
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M