mysql性能优化总结
Posted hongzuiliyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql性能优化总结相关的知识,希望对你有一定的参考价值。
一.什么决定双11大促的成败?
场景:原数据库架构为1M15S,M服务器性能很好,64核512G内存,IO采用fashion IO,比一般磁盘的读写能力高很多.
缺点:
1.只有一个主库,没有主从切换中间件,每次如果主库挂了,需要运维人员手动进行切换,然后同步给其他从库,耗时高(超过半小时不可用)
2.双十一凌晨2点半数据库磁盘IO达到峰值,造成恐慌,担心性能为急剧下降.经检查,发现是数据库远程备份定时任务在跑,总结:最好不要在主库上进行数据库备份,大型活动前取消这类计划.
对数据库性能影响比较大的因素:
(1)sql性能
(2)网卡流量
(3)服务器硬件
(4)磁盘IO
(5)大表
(6)大事务
数据库面临的风险:
(1)超高的qps和tps
根据经验,数据库性能80%都是由慢查询导致的.大多数据数据库问题都可以通过sql性能优化来解决.
当前的mysql不支持单sql语句多cpu并发计算,一条sql只能由一个cpu去执行.10ms的sql和100ms的sql性能直接相差10倍.
(2)大量的并发和超高的cpu使用率
大量并发:数据库连接被占满.当并发数大于最大连接数时,用户请求会阻塞等待,超时就会出现500错误,对用户体验造成影响.
PS:并发数和连接数的区别:并发是指同时请求mysql的数量,连接数是指mysql的连接数,通常连接数远大于并发数,因为大部分的连接都是出于sleep状态.类似于http长连接.
数据库最大连接数:max_connections,默认值为100.所以需要把这个参数改的大一些.
超高的cpu使用率:可能导致cpu资源耗尽而宕机
(3)磁盘
1.IO性能突然下降
常发生在热数据量远远大于服务器可用内存的情况下(使用更快的磁盘设备来解决.比如fashion io,SSD,更好的read卡)
2.其他大量损耗磁盘性能的计划任务(调整计划任务,做好磁盘维护)
(4)网卡流量(1000Mb/8≈100MB)
流量高峰期,千兆网卡多次被跑满,其他请求会出现无法连接数据库.
解决办法:
1.减少从数据库的数量
2.进行分级缓存,避免大量的请求突然对数据库形成冲击
3.避免使用SELECT * 进行查询,查询出没有必要的列会浪费网络流量
4.分离业务网络和服务器网络,避免主从同步或者备份等作业影响网络性能.
什么是大表:
1.记录行数巨大,单表达到千万行
根据场景灵活应用,比如日志表,只有insert操作和少量的select操作,几乎没有update操作和delete操作,这样的表就算超过了千万行,也不会对业务产生什么影响.实际工作中有遇到过,日志表的行数已经超过10个亿了,一直很稳定.但是在增加列的时候,会非常痛苦(为什么?)
2.数据文件巨大,表数据文件超过10G
大表的查询的影响:
1.慢查询:大表意味着很难在一定的时间内,过滤出所需要的的数据
以上是关于mysql性能优化总结的主要内容,如果未能解决你的问题,请参考以下文章