innodb存储引擎的核心参数:
innodb_flush_log_at_trx_commit=1/0/2
回看上面解释。
双一标准之一:redo_log 刷写参数。
=1时在每次事务提交时立即刷新redo到磁盘,commit成功
=0时每秒刷新日志到os cache,fsync到磁盘,异常宕机时会丢失1秒内事务
=2时每次事务提交都立即刷新redo buffer 到os cache再每秒fsync()刷新到磁盘
异常宕机会丢失1秒内事务。
1.目前默认是1,安全方式。另外redobuffera跟操作系统的缓存机制有关系
2.redo还有group commit的功能。可以理解为每次刷新已提交redo
顺便将未提交的redo一起刷新到磁盘。为了区分不同状态的redo会增加特殊标记
innodb_flush_method=fsync/O_DIRECT/O_DSYNC
作用:控制mysql刷写磁盘时是否使用os_cache
fsync不更改的话会被mysql日志和会话内存刷到os_cache中
默认的是fsync,运行时间久了会出现OOM
innodb_buffer_pool_size(设置很大)=80%*total
fsync建议特性:
buffer_pool 在落盘时都会经过os_cache再落盘
redo_buffer 在落盘时都会经过os_cache再落盘。
O_DSync:
buffer_pool与fsync是一样的。
redo_buffer 在落盘时则会越过不经过os_cache
O_direct(生产建议)
buffer_pool:在落盘时则会越过不经过os_cache
redo_buffer:在落盘时会经过os_cache再落盘
因为直接落盘产生I/O,所以建议O_direct配合ssd盘。
3,必设置:innodb_buffer_pool_size
作用:数据缓冲区总大小,缓冲数据页和索引页,是mysql的最大内存区域
默认:128M
官方建议:80-90% 物理内存
生产建议:75%以下 按需设置
show engine status\G (看引擎相关参数和状态)
使用建议:
最高安全模式
innodb_flush_log_at_trx_commit=1
Innodb_flush_method=O_DIRECT
最高性能:
innodb_flush_log_at_trx_commit=0
Innodb_flush_method=fsync
redo日志有关的参数:
innodb_log_buffer_size=16777216
innodb_log_file_size=50331648
innodb_log_files_in_group = 3
|