版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NLOneDay/article/details/84637317
MySQL性能调整有数百个选项(5.6参见information_schema.global_variables,5.7参见performance_schema.global_variables),可以说,一千个DBA就有一千种配置方式,其繁杂程度不亚于今年双十一的购物津贴计算。
大家都知道有一个经典的"二八定律":在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的。
为此,结合多年的MySQL DBA经验,以及《MySQL运维内参》、《MySQL技术内幕-InnoDB存储引擎》、MySQL官方文档、Percona官方文档等,总结出这篇"MySQL 5.6&5.7 性能优化 TOP10",以期用"20%最小配置获取80%最大性能",剩下的80%配置和20%性能就取决于实际业务和研究投入了。
文章仅供本人和大家参考,如有错误,恳请指正。
transaction_isolation
解读:事务隔离级别,Oracle, SQL Server等商业知名数据库默认级别为READ-COMMITTED,而MySQL默认为REPEATABLE-READ,它利用自身独有的Gap Lock解决了"幻读"。但也因为Gap Lock的缘故,相比于READ-COMMITTED级别的Record Lock,REPEATABLE-READ的事务并发插入性能受到很大的限制。
设置:隔离级别的选择取决于实际的业务需求(安全与性能的权衡),如果不是金融、电信等事务级别要求很高的业务,完全可以设置成transaction_isolation=READ-COMMITTED。
innodb_buffer_pool_size
解读:InnoDB缓冲池大小,它决定了MySQL可以在内存中缓存多少数据和索引,而不是每次都从磁盘上读取。我们都知道Redis的读写很快,其最重要的原因是它的所有数据都缓存在内存中。试想一下如果innodb_buffer_pool_size足够大,MySQL所有表数据和索引都能被缓存,那将是一种什么体验?
设置:如果是专用的MySQL服务器,一般设置为操作系统内存的75%左右,但至少保留2G内存用