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