MySQL优化经验总结
MySQL可以说是目前使用最广泛的数据库了,在数据量和访问量不大的情况下,性能问题不会很明显,中小企业甚至没有优化的必要。
对于大部分中小企业,最初的数据库都是单库。也没有应用服务器、数据库服务器、文件服务器等的划分,所有内容都在单台服务器上。现在就以次为基础,考虑当mysql遇到性能瓶颈的时候,如何来处理(个人经验,如有更好见解可以和我交流):
1.提升硬件性能。
如更换配置更高的服务器(cpu数量更多、内存更大、换ssd等),同时调大MySQL配置中buffer和cache的值。硬件和服务器配置的优化,个人认为是成本最低、效果最显著的措施,应优先采取。
2.优化sql和索引
有的朋友看到数据量大,第一反应就是切分,个人认为切分有些过早,起码要先把优化做完看看效果。开启慢查询,看看哪些语句是瓶颈,是否很多跨表查询,是否没有用上索引等等。如果有合适的索引,基于主键查找,上亿的数据也并不慢。关于sql优化,就有很多细节了,索引也是,这个以后专门写文章详细介绍。
3.充分利用缓存
如memcached,redis等,先查询缓存,如果缓存没有再查库并存入缓存。有了缓存层,可以极大缓解数据库高并发的压力。有一些数据(比如计数字段),可以考虑是否真的有必要放入mysql,如果直接存入缓存就能解决对数据库的频繁读写。
4.多台独立数据库服务器
如果前面的几步都做了还是慢,那这就必须要重视了。首先建议把数据库迁移到独立的数据库服务器上,然后可以部署多台数据库做主主复制或者主从复制,进行读写分离,使读的压力分散到多台从服务器上。对于写操作,如果真的非常高频让数据库撑不住,那就需要加队列了。
5.分库分表
比如即使上了数据库集群,单台服务器上数据量太大,也会让它的性能严重下降,这时,就有必要根据业务逻辑实施分库、分表。这个不同公司业务不同,没有统一的方法,以后可以写文章举例说明一下。
目前个人接触过的就是如上一些方法,由于并非dba,可能见解偏颇,若有相关建议,欢迎和我交流。