1).innodb_buffer_pool_size
为了提升性能,可以把要写的数据先在缓冲区buffer里合并,然后再发送给下一级存储。这样做可以提高I/O读写的效率。
InnoDB Buffer Pool就是InnoDB用来缓存它的数据和索引的内存缓冲区,可由innodb_buffer_pool_size设置其大小。
理论上将这个值设置的越高,访问数据需要的磁盘I/O就越少。常见的做法是让这个值大于热点数据,这样可以获得比较好的性能。建议将其值设置为机器物理内存大小的70%-80%之间。
2).innodb_log_file_size
日志组里每个日志文件的大小,在32位计算机上日志文件的合并大小必须小于4GB,默认大小是5MB,在生产环境下,这个值需要调整,官方文档推荐值为1MB到1/N的缓冲池大小,其中N是日志组里日志文件的数(由innodb_log_files_in_group变量来确定,一般
默认值为2)。值越大,在缓冲池中需要检查点刷新的行为就越少,因此也就越节约磁盘I/O,但更大的日志文件也意味着在崩溃时恢复的更慢。
建议将日志文件的大小设置为256MB或更大,这样可以满足一般情况下的需要。
3).innodb_flush_log_at_trx_commit,建议设置为2
这个选项的默认值是1,当设置为2时,在每个事务提交时,日志缓冲被写到文件中,但不对日志文件做刷新到磁盘的操作。对日志文件的刷新每秒才发生一次。所以,理论上操作系统崩溃或掉电只会丢失最后一秒的事务。
以下是设置为0,1,2三个值的详细解释:
如果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(刷到磁盘)操作。
4).sync_binlog,建议设置为0
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
如果是autocommit模式,那么每执行一个语句就会向binlog里写入一次,否则每个事务写入一次。如果sync_binlog的值为正,那么每当sync_binlog参数设定的语句或事务数被写入binlog后,MySQL
服务器就会将它的二进制日志同步到硬盘上。默认值是0,不与硬盘同步。值为1是最安全的选择,因为崩溃时,
你最多丢失binlog中的一个语句或事务。但是这也是最慢的选择,成本昂贵。
innodb_flush_log_at_trx_commit和sync_binlog参数的区别:
innodb_flush_log_at_trx_commit 这个是控制的是 innodb 存储的表的数据写入方式, 是ib_logfile这个文件的刷新方式
sync_binlog 控制的是 binlog 的写入,是mysql-bin.000的刷新方式