
关于译者,姚远:
Oracle ACE(Oracle和MySQL数据库方向)
华为云MVP
《MySQL 8.0运维与优化》的作者
中国唯一一位Oracle高可用大师
拥有包括 Oracle 10g和12c OCM在内的20+数据库相关认证。
曾任IBM公司数据库部门经理
现在一家第三方公司任首席数据库专家,服务2万+客户。
01
—
系统变量innodb_redo_log_capacity
[Warning] [MY-013865] [InnoDB] Redo log writer is waiting for a new redo log file. Consider increasing innodb_redo_log_capacity.
set global innodb_redo_log_capacity=200*1024*1024;
root@ubuntu:/var/lib/mysql/#innodb_redo# ls'#ib_redo50634' '#ib_redo50638' '#ib_redo50642_tmp' '#ib_redo50646_tmp' '#ib_redo50650_tmp' '#ib_redo50654_tmp' '#ib_redo50658_tmp' '#ib_redo50662_tmp''#ib_redo50635' '#ib_redo50639' '#ib_redo50643_tmp' '#ib_redo50647_tmp' '#ib_redo50651_tmp' '#ib_redo50655_tmp' '#ib_redo50659_tmp' '#ib_redo50663_tmp''#ib_redo50636' '#ib_redo50640_tmp' '#ib_redo50644_tmp' '#ib_redo50648_tmp' '#ib_redo50652_tmp' '#ib_redo50656_tmp' '#ib_redo50660_tmp' '#ib_redo50664_tmp''#ib_redo50637' '#ib_redo50641_tmp' '#ib_redo50645_tmp' '#ib_redo50649_tmp' '#ib_redo50653_tmp' '#ib_redo50657_tmp' '#ib_redo50661_tmp' '#ib_redo50665_tmp'
#ib_redoXXX(其中XXX是一个序列号):这些是活跃的重做日志文件,这里一共有6个。
#ib_redoXXX_tmp:那些是备用重做日志文件,这里一共26个。
InnoDB试图总共维护32个重做日志文件,每个文件的大小相等,并且是innodb_redo_log_capacity的1/32。
02
—
新的重做日志架构

checkpoint_lsn(状态变量Innodb_redo_log_checkpoint_lsn):LSN的检查点,在这个点之前的所有更改都已写入到数据文件中,这个点之后的重做日志在进行崩溃恢复时有用。
flushed_to_disk_lsn(状态变量Innodb_redo_log_flushed_to_disk_lsn):重做日志中已刷新到磁盘的最后一个位置,但并不一定刷新到数据文件中。
current_lsn(状态变量Innodb_redo_log_current_lsn):重做日志中已刷新到操作系统缓存中的最后一个位置,但并不一定刷新到磁盘中。


SELECT file_id, start_lsn, end_lsn,if(is_full=1,'100%',concat(round((((select VARIABLE_VALUEfrom performance_schema.global_statuswhere VARIABLE_NAME='Innodb_redo_log_current_lsn')-start_lsn)/(end_lsn-start_lsn)*100),2),'%')) full,concat(format_bytes(size_in_bytes)," " ,format_bytes(@@innodb_redo_log_capacity) ) file_size,(select VARIABLE_VALUE from performance_schema.global_statuswhere VARIABLE_NAME='Innodb_redo_log_checkpoint_lsn') checkpoint_lsn,(select VARIABLE_VALUE from performance_schema.global_statuswhere VARIABLE_NAME='Innodb_redo_log_current_lsn') current_lsn,(select VARIABLE_VALUE from performance_schema.global_statuswhere VARIABLE_NAME='Innodb_redo_log_flushed_to_disk_lsn') flushed_to_disk_lsn,(select count from information_schema.INNODB_METRICSwhere name like 'log_lsn_checkpoint_age') checkpoint_ageFROM performance_schema.innodb_redo_log_files;

03
—
蛇的比喻




04
—
计算最佳InnoDB重做日志容量
select VARIABLE_VALUE from performance_schema.global_statuswhere VARIABLE_NAME='Innodb_redo_log_current_lsn' into @a;select sleep(60) into @garb ;select VARIABLE_VALUE from performance_schema.global_statuswhere VARIABLE_NAME='Innodb_redo_log_current_lsn' into @b;selectformat_bytes(abs(@a - @b)) per_min, format_bytes(abs(@a - @b)*60) per_hour;

欢迎加我的微信👇

近期热文
一次学会MySQL、Oracle、SQL Server和PostgreSQL等四种数据库的SQL语言
想快速学好英语吗?来看看一个IT人是如何达到英语专业八级的水平的。
实际上学好Oracle数据库只需要看一本书,让Oracle ACE来告诉你如何学好Oracle数据库?
刚刚上市10天就卖了一千本,京东和当当都卖断了货!
B站上最火的MySQL性能优化课程。
Linux系统管理录像22讲
零基础Linux课程
点击“在看”可以阅读我翻译的其他文章👇




