zoukankan      html  css  js  c++  java
  • mysql 原理 ~ LRU 算法与buffer_pool

    一 简介:针对查询和事务的页在内存中的处理,是如何进行的

    二 LRU算法

        普通 : 实现的是末尾淘汰法,当整个链表已满时,淘汰尾部,将新的数据页加入头部

        mysql_lru改进 : 分为两部分 1分为 yang和old,并不从LRU列表头部进行插入,而是从中间部位.对过期页实行末尾淘汰没有问题,

                                                   2 针对新插入的数据页需要做二次判断 

                                                                         1 如果数据页保持1S以上时间,则推进到yang头部

                                                                         2 如果数据页不能保持1S,则依然保留到old区,等待被淘汰

        改进优点:防止一次性的大查询读取的数据页污染整个LRU列表,影响整体的事务命中率

    三 相关参数

      1 innodb_old_blocks_time 控制着判断数据页保持时间,是加入yang还是保留在old区,默认1s,防止单次大量的全表扫描污染整个LRU

      2 innodb_max_dirty_pages_pct 控制着页插入的位置,默认为50%, yang和old区的百分比

    四 计算公式
      innodb buffer pool命中率

            1  Innodb_buffer_pool_read_requests表示read请求的次数
            2  Innodb_buffer_pool_reads表示从物理磁盘中读取数据的请求次数
         innodb buffer的read命中率就可以这样得到:(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%。一般来讲这个命中率不会低于99%,如果低于这个值的话就要考虑加大innodb buffer pool。

         通过 innodb_buffer_pool_stats 可以直接查看命中率,并不需要计算

    五 相关补充       

       Free List 数据库刚启动的时候,LRU 列表为空,此时需要用到的时候直接将Free列表中的页删除,在LRU列表中增加相应的页,维持页数守恒。

       Flush List 当LRU列表中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页数据产生了不一致。这时候数据库会通过checkpoint机制将脏页刷新回磁盘,而Flush 列表中的页即为脏页列表。注意脏页也存在于LRU列表中。

       INNODB_BUFFER_POOL 构成  1 数据页 2 索引页 3 字典 4 锁信息 5 AHI 6 插入缓冲

    六 相关监控

        命令  show engine innodb status

        相关参数

         1 BUFFE POOL SIZE    整个innodb_buffer_pool 页的总数大小  计算总量X16K即可

         2 Free  buffers              当前Free列表中页的数量

         3 Datebase pages         LRU列表中数据页的个数

        这里注意 通常 Datebase pages+Free buffers 并不等于 整个buffer_pool页的数量。因为还有其他需要页 (数据字典,锁)等,这部分是不归LRU列表进行维护的

        4 Modified  db pages   脏页的大小

               

  • 相关阅读:
    面向对象编程OOP-1
    Matlab——图形绘制——二维平面图形
    Matlab——矩阵运算 矩阵基本变换操作
    Matlab——表达式 阵列与矩阵的创建
    Java ——接口
    Java ——重写、多态、抽象类
    Java ——继承
    Java ——异常处理
    Java ——流(Stream)、文件(File)和IO
    Java ——正则表达式
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10329488.html
Copyright © 2011-2022 走看看