【MySQL】SHOW ENGINE INNODB STATUS \G之Pages flushed up to的理解

1)前言以及问题:
我们现在先看截图


Log sequence number --内存中日志产生的序列号
Log flushed up to --刷入redo日志的值,字节数
Pages flushed up to --这里正是我要讲的问题,后面详述
Last checkpoint at --最后一次检查点的位置

这里Pages flushed up to到底是什么?而且数据库没有写数据的情况下,总是Pages flushed up to 不等于 Last checkpoint at,这又是为何,并且Pages flushed up to - Last checkpoint at=9(这里你们可以仔细去观察)?
查过网上资料,也问过一些大佬,答案真的是五花八门
他们中有两种最主要的答案,一种是顾名思义,脏页刷新到的LSN;另外一种是:new_modification LSN


2)分析:
对于第一种,说脏页刷新到磁盘的lsn的,明显就不成立。其实检查点的意思就是LSN之前的数据已经落盘,这里检查点的数据落盘就包含了脏页的落盘;实际测试过程中Pages flushed up to 明显大于检查点的LSN,而且检查点之后,就不能保证所有数据是落盘的,那么如果说Pages flushed up to 是脏页刷新到磁盘的lsn,那么就会出现一种情况,lsn1=3000脏页刷盘了(pages flushed up to是3000),lsn=2800的脏页没刷盘,那么你认为这个值有意义吗?


对于第二种:说是flush list做检查点的页的new modification lsn(即一个内存page包含两个lsn,flush list是按照页的第一次修改的lsn排序的,只要一个页修改就加入flush list,而new modification lsn是写了多少字节数据,new modification lsn 就加多少);为什么数据库最后没做修改了,Pages flushed up to 不等于 Last checkpoint at?他们给出的答复是一个页被多次修改。

为了更清楚,我把这些数据结构贴出来:

每个buffer pool都包含flush list
struct buf_pool_t{
    ...
    UT_LIST_BASE_NODE_T(buf_page_t) flush_list;
    UT_LIST_BASE_NODE_T(buf_page_t) free;
    ...
}

class buf_page_t {
public:
        ...
        //这个值是只要做了修改,lsn就会增加,如果一个页在内存中没有修改,就一直是0,也不会加入flush list
        lsn_t           newest_modification;
                                        /*!< log sequence number of
                                        the youngest modification to
                                        this block, zero if not
                                        modified. Protected by block
                                        mutex */
        //这个值,只要当前页被刷入了磁盘,他的值就会置为0,第一次对页的修改,就会加入flush list,第二次对该页修改,此值不会增加,因为flush list 是推进检查点的。
        lsn_t           oldest_modification;
                                        /*!< log sequence number of
                                        the START of the log entry
                                        written of the oldest
                                        modification to this block
                                        which has not yet been flushed
                                        on disk; zero if all
                                        modifications are on disk.
                                        Writes to this
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值