MySQL调优能够从几个方面来作:mysql
2.系统层次:
增长内存;
给磁盘作raid0或者raid5以增长磁盘的读写速度;
能够从新挂载磁盘,并加上noatime参数,这样能够减小磁盘的i/o;sql
MySQL自己调优:
(1) 若是未配置主从同步,能够把bin-log功能关闭,减小磁盘i/o
(2) 在my.cnf中加上skip-name-resolve,这样能够避免因为解析主机名延迟形成mysql执行慢
(3) 调整几个关键的buffer和cache。调整的依据,主要根据数据库的状态来调试。如何调优能够参考5.数据库
应用层次:
查看慢查询日志,根据慢查询日志优化程序中的SQL语句,好比增长索引缓存
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同样,该参数对应的分配内存也是每链接独享!ide
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足够