首页 > 代码库 > 【原创】MySQL性能优化-I/O相关配置参数

【原创】MySQL性能优化-I/O相关配置参数

  本文介绍InnoDB和MyISAM两种存储引擎的I/O相关参数配置。

  1.InnoDB  I/O相关配置

  Innodb是一种事务型的存储引擎,为了减少提交事务时产生的io开销,innodb采用了写日志的方式,也就是在事务提交的时候会先写入事务日志中 ,而不是每次都把修改或者数据刷新到数据文件中,这样做是为了提高io的性能,因为事务的修改,使数据和索引文件通常都会映射到表空间随机的位置,所以刷新数据变更到数据文件会产生大量随机io,而记录日志是顺序io,一旦事务日志安全的写到磁盘中,数据就算是持久化了,即使变更还没有写入到数据文件,如果这时候服务器宕机了,这样的情况我们还是可以使用事务日志来恢复已经提交的事务。以下是一些InnoDB存储引擎相关的配置参数:

  Innodb_log_file_size  : 控制单个事务日志文件的大小(如果业务繁忙可以设置大一些,一般可以记录业务一个小时产生事务的日志);

  Innodb_log_files_in_group  : 控制事务日志文件的个数 ;

  事务日志并不是每次提交都直接写入日志文件中的,而是先写入到事务日志的缓冲区,然后再刷新到磁盘中。Innodb_log_buffer_size控制事务日志缓冲区的大小,通常不需要把日志缓冲区设置得非常大,因为一般情况下至少一秒钟,就会进行一次事务日志缓存的刷新,所以这个缓冲区只要可以保存至少一秒钟的事务就足够了,当然稍微大一些也没有什么坏处,通常来说32M~128M这样的配置就可以了。

  所以 , 事务日志的总大小 = Innodb_log_files_in_group * Innodb_log_file_size 。

  Innodb_flush_log_at_trx_commit 将log刷新到磁盘的配置,有三种选项 :

    (1)0:每秒钟进行一次log写入操作系统cache,并flush log到磁盘(在事务提交时候并不会做任何事情,这个设置在mysql崩溃时会至少丢失一秒钟的事务);

    (2)1[默认]:在每次事务提交执行log写入cache,并fulsh log到磁盘(这是最安全的设置,不会丢失任何事务,但是性能并不理想) ;

    (3)2[建议]:每次事务提交,执行log数据写入到cache,每秒钟执行一次flush log到磁盘。(完成事务持久化分为两步 :首先从mysql日志缓冲区刷新到操作系统的cache,然后从操作系统的cache刷新到磁盘);

  2.MyISAM I/O相关配置

  MyISAM也是常用的存储引擎,MySQL的相关系统表就是使用MyISAM存储引擎,MyISAM的I/O相关参数配置如下:

    delay_key_write  : OFF 每次写操作后刷新键缓冲中的脏块到磁盘;

              ON 只对在键表时指定了delay_key_write选项的表使用延迟刷新;

                ALL 对所有的MyISAM表都使用延迟键写入;

【原创】MySQL性能优化-I/O相关配置参数