MySQL配置参数优化

1,784 阅读2分钟

1. 优化最大连接数

  • max_connections是MySQL最大并发连接数,默认值是151

  • MySQL允许的最大连接数上限是16384

  • 实际连接数是最大连接数的85%较为合适

查询数据库目前设置的最大并发连接数是多少

SHOW VARIABLES LIKE 'max_connections';

查询数据库目前实际连接的并发数是多少

SHOW STATUS LIKE 'max_used_connections';

在MySQL配置文件 /etc/my.cnf 中设置 max_connections=3000,表示修改最大连接数为3000,需要重启MySQL才能生效

MySQL为每个连接创建缓冲区,所以不应该盲目上调最大连接数,如果最大连接数达到了上面设置的3000,会消耗大约800M内存。

2. 优化请求堆栈

  • back_log是存放执行请求的堆栈大小,默认值是50

该值设置为最大并发连接数的20%~30%较为合适

同样是在MySQL配置文件 /etc/my.cnf 中,设置 back_log=600,修改后需要重启MySQL才能生效

3. 修改并发线程数

  • innodb_thread_concurrency代表并发线程数,默认是0,表示没有设置线程数量的上限。 不是分配给MySQL的线程越多越好,线程多反而会损耗cpu性能,导致速度变慢

  • 并发线程数应该设置为cpu核心数的两倍 在在MySQL配置文件 /etc/my.cnf 中,设置 innodb_thread_concurrency=8

查看cpu型号

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看cpu核心数

cat /proc/cpuinfo | grep "cores"|uniq

4. 修改连接超时时间

  • wait-timeout是超时时间,单位是秒
  • 连接默认超时为8小时,连接长期不用又不销毁,浪费资源 设置超时时间为10分钟 wait-timeout=600

5. InnoDB缓存

  • 修改InnoDB缓存大小
    • innodb_buffer_pool_size是InnoDB的缓存容量,默认是128M
    • InnoDB缓存的大小可以设置为主机内存的70%~80% 在MySQL配置文件中,会有一行被注释的配置:# innodb_buffer_pool_size = 128M

上方注释也写明了,建议设置物理内存的70%

# 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

查看内存大小

free -m