最新消息:本站所有跳转向bbs.ykit.cn的附件将全面停止,附件已转移到https://www.qingsj.com

mysql innodb写入速度提升

Mysql 有客 619浏览
#Mysql默认innodb_flush_log_at_trx_commit=1
#原本插入1000条记录,花费138秒

#Counts 1000 times,expend 138 sec
#my.cnf中增加下面参数后重启mysql
innodb_flush_log_at_trx_commit=2

#现在插入1000条记录,花费了9秒钟
#Counts 1000 times,expend 9 sec
#得出结论,插入速度得到大幅度提升。

下面内容是对innodb_flush_log_at_trx_commit的参数的详解。

参数意义

innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数。本文从参数含义,性能,安全角度阐述两个参数为不同的值时对db 性能,数据的影响.

innodb_flush_log_at_trx_commit

如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
注意:
	由于进程调度策略问题,这个“每秒执行一次 flush(刷到磁盘)操作”并不是保证100%的“每秒”。

sync_binlog

sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
注意:
	如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。

转载请注明:有客帮 » mysql innodb写入速度提升