innodb doublewrite

#努力第6天#innodb_lru_scan_depth每个缓冲池最大脏页刷新页数checkpoint
innodb fuzzy checkpoint
master thread checkpoint
从flush_list中进行刷新
flush_lru_list check point
lru需有差不多100个空闲页
async/sync flush checkpoint 
重做日志重用
dirty page too much checkpoint 
innodb_max_dirty_pages_pct
sharp checkpoint 
将所有的脏页都刷新回磁盘
刷新时系统hang住
innod关闭时使用
innodb_fast_shutdown={1|0

doublewrite
目的:数据写入的可靠性,防止页部分写
partial write
16k的页只写入了4k 6k 8k 12k的情况
不可以通过redo log进行恢复

存在一个段对象doublewrite

2M大小(both file and memory)
刷脏页的时候先把数据写入doublewrite 再写入到磁盘上
写入doublewrite的时候 一次性写2m的数据
性能开销
doublewrite写入是顺序的
性能开销取决于写入量
通常5%到25%
slave服务器考虑是否关闭
innodb_doublewrite
什么时候可以关闭doublewrite
磁盘
Fusion-io
文件系统
ZFS
btrfs
--skip-doublewrite

log sequence number 6531937903
log flushed up to 6531937903
pages flushed up to 6531937903
last checkpoint at 653193789
内存里的lsn
日志写到磁盘上的lsn
页刷新的最新的lsn值 new_modification
页的old _modification
last是flush list刷新的

insert buffer(在共享表空间中 持久化的)
提高辅助索引的插入性能
none unique secondary index
空间换时间 批量插入
先把二级索引缓存在insert buffer里 读到的时候再批量写到索引里
insert buffer潜在问题
最大可以使用二分之一缓冲池内存
innodb_change_buffer_max-size
shutdown不进行insert buffer记录的合并
insert buffer开始进行合并时插入性能开始下降

为的是减少页的随机io,如果页已经在内存里 不用缓存 直接插入
5.5改为change buffer
flush neighbor page
试图刷新页所在区中的所有脏页
传统机械磁盘有效
ssd关闭此功能
mysql 5.6 innodb_flush_neighbors=0

原文地址:https://www.cnblogs.com/lvjinping/p/9197614.html