log
2020-07-03 10:16:19 14 举报
AI智能生成
登录查看完整内容
mysql 日志思维导图
作者其他创作
大纲/内容
log
LSN
log sequence number:记录日志的序列号
Log sequence number
当前系统最大的LSN号
log flushed up to
当前已经写入redo日志文件的LSN
pages flushed up to
已经将更改写入脏页的lsn号
Last checkpoint at
系统最后一次刷新buffer pool脏中页数据到磁盘的checkpoint
binlog
server层
记录方式
statement
row
mixed
my.cnf binlog_format
group commit
flush
fsync
commit
BLGC binary log group commit
作用
data recovery
replication
审计,判断是否有sql注入
保存
binlog buffer
binlog file
索引文件:.index
记录哪些日志文件正在使用
日志文件:.00000*
记录数据库所有的DDL和DML的语句事件
sync_binlog
=1 : 每个事务都刷盘
=0 :操作系统控制刷盘,10s刷盘
mu.cnf log-bin
redolog
innodb层
物理页的操作
redo_log_type
insert/delete/update
space
表空间的id
page_no
页偏移量
redo_log_body
数据
log_buffer支持并发
link_buf推进
消费者生产者模式
分配sn保证无空洞
slot保证原子操作
crash saft
崩溃后恢复数据
事务
二阶段提交
WAL
write ahead log 日志先行
顺序写速度快于随机写
每次重启(不管是否崩溃)都会检查redolog的LSN和checkPoint 看是否需要恢复
redo log buffer
环状
默认8M
redo log file
512byte = 1扇区,按照最小单位写入,保证写入成功
固定大小,环状
刷盘
innodb_flush_log_at_trx_commit
=1:每次事务都刷盘
=0:master线程每s操作一次
=2:事务提交到os cache,系统控制fsync
8.0 的 log buffer 的优化
recent_write
利用link_buf来控制lsn的连续性,检查连续的日志进行write
recent_closed
利用link_buf来控制L内的flush list有序性
flushlist
log_write
消费者,取logbuffer中的日志刷盘
log_checkpoint
监控flush list中已经刷盘的lsn
link_buf
拥有带有原子性的slot
undolog
innodb 层
逻辑日志
insert
不需要purge操作
update:delete/update
需要purge操作
update操作
主键索引
新insert一行
二级索引
直接修改
回滚
事务在执行过程中,系统崩溃
非锁定读取
MVCC multi version control
undolog 产生 redolog
回滚id
rowId:trxId:rollbackId:value
tablespace
leaf node segment
non-leaf segment
rollback segment
1024 extents(64*16 = 1024k)
64 pages(16k)
rows
undo page
最大128个segment
purge操作
undolog 链表
delete操作
记录delete flag = 1
innodb_purge_batch_size
innodb_max_purge_lag
saveponit
rowlog
收藏
收藏
0 条评论
回复 删除
下一页