LSN(日志序列号)
定义说明:
LSN(log sequence number)日志序列号,5.6.3之后占用8字节,LSN主要用于发生crash时对数据进行recovery,LSN是一个一直递增的整型数字,表示事务写入到日志的字节总量。
LSN不仅只存在于重做日志中,在每个数据页头部也会有对应的LSN号,该LSN记录当前页最后一次修改的LSN号,用于在recovery时对比重做日志LSN号决定是否对该页进行恢复数据。前面说的checkpoint也是有LSN号记录的,LSN号串联起一个事务开始到恢复的过程。
LSN存储的位置,logbuff存储最新的LSN标识,还会写到系统表当中,logbuff刷新的磁盘上还会记录最新的LSN号码。
数据页buffpoll当中的头部都会存储LSN记录, 在buffpoll当中修改的数据落盘之后会更新修改过的LSN号码。
查看lsn
show engine innodb status\G;
Log sequence number 102016908 ##最新logbuff系统当中最新的lsn号码
Last checkpoint at 102016908 ## 最后一次更新的LSN号码
Log flushed up to 102016908 ## 最后一次redo的LSN号码 也叫磁盘数据页的
2.1checkpoint是什么?
内存数据刷新到磁盘的一个机制(批量的进行刷新)。
2.1.1checkpoint分为两三种刷新机制sharp checkpoint,fuzzy checkpoint master thread chackpoint.
sharp checkpoint:是完全检查点,数据库正常干净关闭时,会触发把所有的脏页都写入到磁盘上(这时候logfile的日志就没用了,脏页已经写到磁盘上了)
fuzzy checkpoint:模糊检查点,部分页写入磁盘。
mast thread chackpoint :差不多以每秒或每十秒的速度从缓冲池的脏页列表中刷新一定比列的页回磁盘,这个过程是异步的,不会阻塞用户的查询。
show vriables like ‘%io_cap%’ #查看刷新机制的参数
| Variable_name | Value |
+————————————+———-+
| innodb_io_capacity | 200 |

  1. ## 每次最小可以刷新两百个脏页 (如果少于两百个脏页也会进行刷新)<br />| innodb_io_capacity_max | 2000 |
  2. ## 最大一次刷新2000个脏页<br />+------------------------+-------+<br />根据实际情况进行参数的修改,如果是pci-e固态盘,2000-3000 4000-6000<br />flash 5000-8000 10000-16000<br />mysql> show variables like '%innodb_lru_scan_depth%';

mysql innodb刷新脏页策略LRU,最少使用的数据页,或者内存数据页进行清理,清理落盘到磁盘的数据。
+———————————-+———-+


| Variable_name | Value |
+———————————-+———-+
| innodb_lru_scan_depth | 1024 |

 ## 控制lru列表中可用页少与1024也会进行刷新,默认是1024不推荐修改  这个参数也是受 master therd checkpoint 这个线程控制的<br />+-----------------------+-------+


3.1 async/sync flush checkpoint async是异步刷新策略/sync是同步刷新策略,异步75%/90%