1、Innodb_flush_log_at_trx_commit:
控制redo 往os buffer、磁盘 刷写的策略
(0) 每秒将redo buffer往os buffer(操作系统文件缓冲区) 刷写,每秒将os buffer同步到磁盘,如果宕机,会丢失一秒内的所有事务
(1) 事务每次commit,立即将redo buffer刷写到os buffer,并立即刷写到磁盘,直到真正将数据同步到磁盘,事务才结束(默认)
(2)事务每次提交立即刷写到os buffer, 而os buffer每秒将数据同步到磁盘,如果数据库宕了没事,整体宕机还是和0是一样的
2、innodb_file_per_table
1是独立表空间,0是共享表空间,详情查看表空间文章
3、innodb_flush_method
控制redo buffer、buffer pool刷写到磁盘的策略
redo buffer 不管选择哪种模式,都是先刷写到os buffer,然后再同步到磁盘
(1) FSYNC: buffer pool和redo buffer 先刷写到os buffer 、然后从os buffer 同步到磁盘,
(2) O_DIRECT:buffer pool 略过os buffer ,直接同步到磁盘,redo buffer 还是从os buffer经过 (建议)
(3) O_DSYNC: buffer pool刷写到os buffer 然后同步到磁盘,redo buffer 略过 os buffer 直接写到磁盘
最高安全模式:
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
最高性能:
innodb_flush_log_at_trx_commit=0
innodb_flush_method=fsync
redo日志设置:
1、innodb_log_buffer_size=16777216
redo缓冲区大小
2、innodb_log_file_size=50331648
ib_logfile0、ib_logfile1的文件大小
3、innodb_log_file_in_group=2
设置几个ibdata文件,默认2
4、innodb_max_dirty_pages_pct=75
脏页达到内存75%就会自动刷写到磁盘
CSR机制和redo文件满了也会自动刷写磁盘