MySQL5.5.X的优化秘密之一:InnoDB存储引擎
从mysql5.5.x开始,默认的存储引擎更改为InnoDB Plugin引擎,提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB锁定在行级,并且也在SELECT语句提供与Oracle风格一致的非锁定读,这些特性增加了多用户部署和性能。InnoDB存储引擎被完全整合到了mysql服务器中,不过,为了能在主内存中缓存数据和索引,InnoDB存储引擎会维持它自己的缓冲池。InnoDB会在一个表空间中存储它的表和索引。
充分利用CPU多核处理能力
在mysql5.1.X中,innodb_file_io_threads参数默认是4,在linux系统上是不可更改的,在windows系统上可以调整。不支持动态改变,需要写入中。该参数的作用是让InnoDB使用后台线程处理数据页上读写I/O请求的数量。在mysql5.5.x中,用两个新参数代替:innodb_read_io_threads和innodb_write_io_threads。如果CPU是2颗8核,可以将这两个参数设置为8。如果数据库的读操作较多,可以设置innodb_read_io_threads10,innodb_write_io_threads6。
提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力
在5.1.x版本中,由于代码写死,最多只会刷新100个脏页到磁盘、合并20个插入缓冲。即使磁盘有能力处理更多的请求,也只会处理这么多,这样在更新量较大(大批量insert)的时候,脏页刷新可能就会跟不上,导致性能下降。innodb_io_capacity参数可以动态调整刷新脏页的数量,避免了大批量insert时脏页刷新跟不上导致性能下降。该参数默认是200,可以动态调整。例如,如果使用的是单盘SAS/SATA,可以将innodb_io_capacity设置为200;如果使用的是SAS*12RAID10,可以将innodb_io_capacity设置为2000;如果使用的是SSD,可以将innodb_io_capacity设置为5000;如果使用的是FUSION-IO,可以将innodb_io_capacity设置为50000。
让InnoDB_Buffer_Pool缓冲池中的热数据存活更久
InnoDB_Buffer_Pool缓冲区有两个区域,一个是sublist of new blocks区域(经常被访问到的区域,即热数据),一个是sublist of old blocks区域(不经常访问到的区域)。当用户访问数据时,如果缓存区中有相应的数据,则直接返回,否则会从磁盘读入缓存区的sublist of old blocks区域,然后再移动到sublist of new blocks区域,并通过LRU最近最少使用算法来剔除旧数据。然而,有些SQL语句做统计用全表扫描,会进入sublist of new blocks区域,把一些真正的热数据“踢走”,导致缓冲区的数据频繁进出,磁盘I/O频繁。为了解决这个问题,可以控制进入缓冲区sublist of old blocks区域的数量(innodb_old_blocks_pct参数),以
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。