死磕数据库系列(七):MySQL 性能优化(硬件,系统配置,表结构,SQL语句)
接上一篇:死磕数据库系列(六):MySQL 索引详解
MySQL优化方案
想必大家都知道,面试期间一提到数据库,就会聊到数据库优化相关问题。网上关于数据库优化的文章也是眼花缭乱,层出不穷。今天将会通过这篇文章细分几点给大家汇总整理出一套关于MySQL数据库的优化方案,让大家通过学习这篇文章不再被面试官吊打!
成本:硬件优化 > 系统配置优化 > 表结构优化 > SQL语句优化 > 索引优化。
效果:索引优化 > SQL语句优化 > 表结构优化 > 系统配置优化 > 硬件优化。
硬件优化
硬件优化无非就是对MySQL所在的服务器CPU,内存,磁盘进行优化。大内存,高IO,是现代基于web的数据库的必备 (百度的服务器内存 :96G —128个,2个实例 ,CPU8到16颗)。不同版本的MySQL对多核CPU的支持也不一样。
服务器硬件对MySQL性能的影响及优化方案
1.CPU对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:可以使用两颗Intel Xeon 3.6GHz的CPU,现在我较推荐用4U的服务器来专门做数据库服务器,不仅仅是针对于mysql。
2.物理内存对于一台使用MySQL的Database Server来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了16G。
3.磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的大因素之一,对于日均访问量在100万PV以上的系统,由于磁盘I/O的制约,MySQL的性能会非常低下!解决这一制约因素可以考虑以下几种解决方案:使用RAID-0+1磁盘阵列,注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快。
注意:以上这些规划应该在初始设计系统时就应该考虑好。
系统配置优化
基本配置
当然还有其他的设置可以起作用,取决于你的负载或硬件:在慢内存和快磁盘、高并发和写密集型负载情况下,你将需要特殊的调整。然而这里的目标是使得你可以快速地获得一个稳健的MySQL配置,而不用花费太多时间在调整一些无关紧要的MySQL设置或读文档找出哪些设置对你来说很重要上。
Linux系统中MySQl配置文件一般位于/etc/my.cnf
innodb_buffer_pool_size