Mysql 参数优化对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有
关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果。
下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区变量。
连接请求的变量
1、max_connections
MySQL 的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,
当然这建立在机器能支撑的情况下,因为如果连接数越多, MySQL会为每个连接提供连接缓冲区,就
会开销越多的内存,所以要适当调整该值,不能盲目提高设值。数值过小会经常出现 ERROR 1040: Too
many connections 错误,可以过mysql> show status like
‘connections’;查看当前状态的连接数量(试图连接到MySQL(不管是否连接成功)的连接数),以定夺该值
的大小。
如果 max_used_connections跟max_connections相同那么就是max_connections 设置过低或者超过
服务器负载上限了,低于10%则设置过大。
如何设置 max_connections?
2、back_log
MySQL 能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,它就会起作
用。如果MySQL的连接数据达到max_connections 时,新来的请求将会被存在堆栈中,以等待某一连
接释放资源,该堆栈的数量即 back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
#最大连接数
mysql> show variables like ‘%max_connections%’;
±-----------------------±------+
| Variable_name | Value |
±-----------------------±------+
| max_connections | 1024 |
| mysqlx_max_connections | 100 |
±-----------------------±------+
2 rows in set (0.00 sec)
#响应的连接数
mysql> show status like ‘%max_used_connections%’;
±--------------------------±--------------------+
| Variable_name | Value |
±--------------------------±--------------------+
| Max_used_connections | 1 |
| Max_used_connections_time | 2019-10-06 16:14:21 |
±--------------------------±--------------------+
2 rows in set (0.00 sec)
如果 max_used_connections跟max_connections相同那么就是max_connections 设置过低或者超过
服务器负载上限了,低于10%则设置过大。
如何设置 max_connections?
[root@www ~]# vim /etc/my.cnf
[mysqld]
max_connections = 1024
2、back_log
MySQL 能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,它就会起作
用。如果MySQL的连接数据达到max_connections 时,新来的请求将会被存在堆栈中,以等待某一连
接释放资源,该堆栈的数量即 back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
back_log 值指出在MySQL暂时停止回答新请求之前的短时间内有多少个请求可以被存在堆栈中。只有
如果期望在一个短时间内有很多连接,你需要增加它。
当观察你主机进程列表(mysql> show full processlist),发现大量
xxxxx | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接
进程时,就要加大back_log的值了或加大 max_connections 的值。
mysql> show variables like ‘%back_log%’;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| back_log | 1024 |
±--------------±------+
1 row in set (0.00 sec)
设置方法:
[root@www ~]# vim /etc/my.cnf
[mysqld]
back_log = 1024
3、wait_timeout和interactive_timeout
wait_timeout – 指的是MySQL在关闭一个非交互的连接之前所要等待的秒数
interactive_time --指的是mysql在关闭一个交互的连接之前所要等待的秒数,比如我们在终端上进入
mysql管理,使用的即使交互的连接,这时候,如果没有操作的时间超过了interactive_time设置的时间
就会自动断开。默认数值是 28800,可调优为 7200。
对性能的影响
wait_timeout
如果设置大小,那么连接关闭的很快,从而使一些持久的连接不起作用
如果设置太大,容易造成连接打开时间过长,在 show processlist 时,能看到太多的 sleep
状态的连接,从而造成 too many connections 错误
一般希望 wait_timeout 尽可能地低
interactive_timeout 的设置将要对你的 web application 没有多大的影响
mysql> show variables like ‘%wait_timeout%’;
±-----