需求:MySQL的参数优化对于不同的网站,极其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次万次,需要在工作当中不断的监控观察和调试,才能得到最佳的效果。性能优化影响最大的变量分为连接请求变量和缓冲区变量。
理论总结:
修改vim/my.cnf
max_connections = 1024 设置最大连接数为1024
back_log = 100 暂存的连接数量
wait_timeout = 100
interactive_timeout = 100 修改interactive的值
key_bugger_size =268435456和key_buffer_size=256M 调整
query_cache_size = 256M 缓存大小
query_cache_type = 1 缓冲类型
max_connect_errors = 20 开启安全有关的计数器,host连接请求多余20禁止连接请求
sort_buffer_size = 2M 为进行排序的线程分配该大小的一个缓冲区
连接请求变量:
max_connections。如果服务器的并发连接请求量大,此值应相应调高。增加并行连接量是建立服务器能支撑的情况下,连接数越多,则mysql为内个连接提供连接缓冲区开销的内存越大,所以应适当调整该值。数值过小会经常出现错误ERROR 1040:Too many connections错误。
show status like 'connections';通配符查看当前连接数量,无论是否成功都会记录。
show variables like '%max_connections%' 最大连接数
show status like '%max_used_connections' 响应连接数
show variables like ’%wait_timeout%’ 查看wait_timeout
show variables like '%interactive_timeout%' 查看interactive
show status like 'qcache%'; 可以指定query_cache_size设置是否合理
show variables like 'query_cache%'; 验证query_cache配置是否开启
max_used_connections跟max_connections相同那么就是max_connections设置过低或超过服务器负载上限,地狱10%则设置过大。
暂存的连接数据:back_log。主要mysql线程在一个短时间内得到很多请求就会起作用。连接数值达到max_connections时,新来的请求将被存在堆栈中,等待某一连接释放资源。等待连接数量超过back_log则不被授予连接资源。back_log暂时停止回答新请求之前的短时间内有多少个请求可以被存在堆栈中。如果希望在短时间很多连接,需要增加back_log值。
查看主机进程表:show variables processlist
查看back_log的值:show variables like 'back_log'
如果主机进程表中大量的待连接进程时,要加大max_connections的值。
mysql关闭一个非交互的连接之前索要等待的秒数wait_timeout和interactive_timeout
wait_timeout指mysql在关闭一个非交互的连接之前所要等待的秒数
interactive_timeout指的是mysql在关闭一个交互的连接之前索要等待的秒数,就比如我们在终端上进入mysql管理,使用的即是交互式连接,如果操作时间超过了interactive_timeout设置的值,就会自动断开。
对性能的影响
如果设置大小,连接关闭很快,使一些持久的连接不起作用
如果设置太大,造成连接打开时间过长,如果执行show processlist能看到太多的sleep状态的连接,造成too many connections错误
一般希望wait_timeout的值尽可能的低。interactive的设置对web application没有多大的影响
缓冲区变量
全局缓冲
指定索引缓冲区的大小,决定索引处理的速度,尤其是索引读的速度。
状态值:key_read_requests和key_reads
create_tmp_disk_tables
key_reads/k