MySQL 数据库的使用是很是的普遍,稳定性和安全性也很是好,经历了无数大小公司的验证。仅可以安装使用是远远不够的,MySQL 在使用中须要进行不断的调整参数或优化设置,才可以发挥 MySQL 的最大做用。下边的内容是我在工做中经验的总结,也做为本身的工做笔记,若是可以帮助到有须要的同志就更好了。MySQL 的优化能够从个方面来作:mysql
1、架构层面sql
一、作主从复制。
二、实现读写分离。
三、分库分表。数据库
2、系统层面缓存
一、增长内存。
二、硬盘使用固态硬盘 SSD。
三、给磁盘作 raid0 或者 raid5 以增长磁盘的读写速度。
四、能够从新挂载磁盘,并加上 noatime 参数,这样能够减小磁盘的 I/O。安全
3、MySQL自己的优化服务器
一、若是未配置主从同步,能够把 bin-log 功能关闭,减小磁盘 I/O。
二、在 my.cnf 中加上 skip-name-resolve ,这样能够避免因为解析主机名延迟形成 M有SQL 执行慢。
三、调整几个关键的 buffer 和 cache。调整的依据,主要根据数据库的状态来调试。如何调优能够参考五。
四、根据具体的使用场景,选择合适的存储引擎。架构
4、应用层次性能
查看慢查询日志,根据慢查询日志优化程序中的 SQL 语句,好比增长索引优化
5、调整关键的buffer和cachespa
一、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%' 得到)。注意:该参数值设置的过大反而会是服务器总体效率下降!
二、table_open_cache
打开一个表的时候,会临时把表里面的数据放到这部份内存中,通常设置成 1024 就够了,它的大小咱们能够经过这样的方法来衡量: 若是你发现 open_tables 等于 table_cache,而且 opened_tables 在不断增加,那么你就须要增长 table_cache 的值了(上述状态值可使用 SHOW STATUS LIKE 'Open%tables' 得到)。注意,不能盲目地把 table_cache 设置成很大的值。若是设置得过高,可能会形成文件描述符不足,从而形成性能不稳定或者链接失败。
三、sort_buffer_size
查询排序时所能使用的缓冲区大小,该参数对应的分配内存是每链接独占! 若是有 100 个链接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。因此,对于内存在 4GB 左右的服务器推荐设置为:4-8M。
四、read_buffer_size
读查询操做所能使用的缓冲区大小。和 sort_buffer_size 同样,该参数对应的分配内存也是每链接独享!
五、join_buffer_size
联合查询操做所能使用的缓冲区大小,和 sort_buffer_size 同样,该参数对应的分配内存也是每链接独享!
六、myisam_sort_buffer_size
这个缓冲区主要用于修复表过程当中排序索引使用的内存或者是创建索引时排序索引用到的内存大小,通常 4G 内存给 64M 便可。
七、query_cache_size
MySQL查询操做缓冲区的大小,经过如下作法调整:SHOW STATUS LIKE ‘Qcache%’; 若是Qcache_lowmem_prunes该参数记录有多少条查询由于内存不足而被移除出查询缓存。经过这个值,用户能够适当的调整缓存大小。若是该值很是大,则代表常常出现缓冲不够的状况,须要增长缓存大小Qcache_free_memory:查询缓存的内存大小,经过这个参数能够很清晰的知道当前系统的查询内存是否够用,是多了,仍是不够用,咱们能够根据实际状况作出调整。通常状况下 4G 内存设置 64M 足够了。
八、thread_cache_size
表示能够从新利用保存在缓存中线程的数,参考以下值:1G —> 8; 2G —> 16; 3G —> 32; 3G —> 64
除此以外,还有几个比较关键的参数
九、thread_concurrency
这个值设置为 CPU 核数的2倍便可。
十、wait_timeout
表示空闲的链接超时时间,默认是:28800s,这个参数是和 interactive_timeout 一块儿使用的,也就是说要想让 wait_timeout 生效,必须同时设置 interactive_timeout,建议他们两个都设置为10。
十一、max_connect_errors
是一个 MySQL 中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的状况。与性能并没有太大关系。为了不一些错误咱们通常都设置比较大,好比说10000。
十二、max_connections
最大的链接数,根据业务请求量适当调整,设置 500 足够。
1三、max_user_connections
是指同一个帐号可以同时链接到 mysql 服务的最大链接数。设置为 0 表示不限制。一般咱们设置为 100 足够。
----- 待更新 -----