MySQL调优

回复 收藏
MySQL调优可以从几个方面来做:
1. 架构层:
做从库,实现读写分离;

2.系统层次:
增加内存;
给磁盘做raid0或者raid5以增加磁盘的读写速度;
可以重新挂载磁盘,并加上noatime参数,这样可以减少磁盘的i/o;

3. MySQL本身调优:
(1) 如果未配置主从同步,可以把bin-log功能关闭,减少磁盘i/o
(2) 在my.cnf中加上skip-name-resolve,这样可以避免由于解析主机名延迟造成mysql执行慢
(3) 调整几个关键的buffer和cache。调整的依据,主要根据数据库的状态来调试。如何调优可以参考5.

4. 应用层次:
查看慢查询日志,根据慢查询日志优化程序中的SQL语句,比如增加索引

5. 调整几个关键的buffer和cache

1) key_buffer_size  首先可以根据系统的内存大小设定它,大概的一个参考值:1G以下内存设定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.这个值可以通过检查状态值Key_read_requests和 Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。注意:该参数值设置的过大反而会是服务器整体效率降低!


2) table_open_cache 打开一个表的时候,会临时把表里面的数据放到这部分内存中,一般设置成1024就够了,它的大小我们可以通过这样的方法来衡量: 如果你发现 open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。


3) sort_buffer_size 查询排序时所能使用的缓冲区大小,该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。所以,对于内存在4GB左右的服务器推荐设置为4-8M。


4) read_buffer_size 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!


5) join_buffer_size 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!


6) myisam_sort_buffer_size 这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般4G内存给64M即可。


7) query_cache_size MySQL查询操作缓冲区的大小,通过以下做法调整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。如果该值非常大,则表明经常出现缓冲不够的情况,需要增加缓存大小;Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,我们可以根据实际情况做出调整。一般情况下4G内存设置64M足够了。


8) thread_cache_size 表示可以重新利用保存在缓存中线程的数,参考如下值:1G  —> 8 2G  —> 16 3G  —> 32  >3G  —> 64
除此之外,还有几个比较关键的参数:


9) thread_concurrency 这个值设置为cpu核数的2倍即可


10) wait_timeout 表示空闲的连接超时时间,默认是28800s,这个参数是和interactive_timeout一起使用的,也就是说要想让wait_timeout 生效,必须同时设置interactive_timeout,建议他们两个都设置为10


11) max_connect_errors 是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。与性能并无太大关系。为了避免一些错误我们一般都设置比较大,比如说10000


12) max_connections 最大的连接数,根据业务请求量适当调整,设置500足够


13) max_user_connections 是指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制。通常我们设置为100足够
2013-10-15 18:15 举报
已邀请:
0

地平线

赞同来自:

0

ocean

赞同来自:

xuexi   {:5_121:}
0

zhongrongzhong

赞同来自:

很好的文章!!谢谢分享{:4_98:}
0

t236xuchunfang

赞同来自:

学习
0

2422606568

赞同来自:

学习
0

ztonglinyx

赞同来自:

暂时不太理解,加油
0

刘野

赞同来自:

看一下
0

李宁

赞同来自:

得背背
0

lyhabc

赞同来自:

先收藏了
0

模范棒棒糖

赞同来自:

mysql的知识更多哇。
0

sinni029

赞同来自:

log_slow_queries = /data/mysql/slow.log   记录慢查询日志
0

foxbuns

赞同来自:

学习学习
0

qin521ne

赞同来自:

学习了
0

Temence

赞同来自:

还得继续努力啊
0

fh_panda

赞同来自:

学习
0

maynard

赞同来自:

学习一下
0

出VU时代

赞同来自:

已经学到这了,先收藏
0

xzzlamp

赞同来自:

感觉看了一下就忘记了啊
0

qqhcyym

赞同来自:

好资料
0

huanglin

赞同来自:

学习中。。。。
0

cb2008116

赞同来自:

学习
0

xufanyunwei

赞同来自:

xuexi
0

王sir

赞同来自:

先收藏一下,估计以后有大用处
0

sunwang33

赞同来自:

学习了。
0

starry

赞同来自:

以前没能看懂 现在回过头来复习 就能接受了
0

zxc123

赞同来自:

好东西,
0

学习求生存 - openstack运维工程师

赞同来自:

学习,又涨知识了
0

san liu

赞同来自:

学习一下
0

soul

赞同来自:

学习了。
0

469327849

赞同来自:

{:7_229:}
0

shoswj001

赞同来自:

mark
0

gsy36559067

赞同来自:

不错
0

zgyizu

赞同来自:

这文章看来今天就能派上大用场了{:4_94:}
0

azure

赞同来自:

留爪,有空看
0

kolons

赞同来自:

铭哥,这个给磁盘做raid0或者raid5以增加磁盘的读写速度一般是怎么实现的啊?
0

150411100

赞同来自:

学习啦
0

阿铭 管理员

赞同来自:

guyulog 发表于 2016-5-2 16:14
铭哥,这个给磁盘做raid0或者raid5以增加磁盘的读写速度一般是怎么实现的啊?

把数据写到多块盘上,肯定会变快。 这相当于是本来一匹马拉的一辆马车用2匹或者更多匹拉,速度更快了。
0

tytywu

赞同来自:

0

zxc123

赞同来自:

学习了,现在要用到
0

spring_supervip

赞同来自:

拜读了!
0

loading丶

赞同来自:

学习下。
0

旅行

赞同来自:

路过收藏,忽视脚步。
0

gulay1688

赞同来自:

好贴,收藏。
0

那片天空

赞同来自:

谢谢铭哥分享
0

zhuwentao1300

赞同来自:

收藏了!
0

15801184208

赞同来自:

学习
0

liwei0526vip

赞同来自:

学习了。

0

juispan

赞同来自:

学习

0

Jack.

赞同来自:

学习

0

LINUX_A - 不要在最能吃苦的年龄选择安逸!

赞同来自:

很赞,学习了,对着自己的线上服务器稍作了些修改!

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: