• MySQL InnoDB Engine--缓冲器数据交换


    通常情况下,缓冲池无法将整个数据库所有数据都进行缓冲,而且不同数据的访问频率不一样,有些数据会被频繁访问,而有些数据可能数月不会被访问一次,因此数据库使用最近最少使用LRU latest Recent Used算法来管理缓冲池,其算法思想为:最近访问的数据被再次访问的概率要高于之前被访问的数据,被多次访问的数据被再次访问的概率要高于访问次数较低的数据。

    Mysql使用LRU列表来记录页的访问情况,将访问频繁的页记录在LRU列表的前端,将最少访问的页记录在LRU列表的尾端,将最新插入缓冲池的数据放入LRU的中部mid(未必一定是最中间),当缓冲池不能存放新的页面时,将首先释放LRU列表尾部的数据页。

    为避免单次的表扫描或索引扫描将大量数据读取到缓冲池,导致缓冲区内热数据被交换出缓冲池,MYSQL对LRU算法进行优化,通过innodb_old_blocks_pct和innodb_old_blocks_time来限制新数据加载

    innodb_old_blocks_pct指定新数据在LRU列表存放位置,默认在LRU列表唱的的5/8处,即37%的位置

    innodb_old_blocks_time指定页读取到mid位置后需要等待多久才会被加入到LRU列表的热端,默认值为1000  

    查看两个参数的值:

    SHOW VARIABLES LIKE 'INNODB_OLD_BLOCKS_%' G
    *************************** 1. row ***************************
    Variable_name: innodb_old_blocks_pct
            Value: 37
    *************************** 2. row ***************************
    Variable_name: innodb_old_blocks_time
            Value: 1000
    2 rows in set (0.01 sec)


    修改操作:

    SET GLOBLE INNODB_OLD_BLOCKS_TIME=1000;
    SET GLOBAL INNODB_OLD_BLOCKS_PCT=37;






  • 相关阅读:
    sql 读取txt 文件内容,并写入sql的方法
    Thread.Mutex 互斥体
    SQL语句创建登录名,数据库用户,数据库角色及分配权限:
    倾国倾城 歌词
    LINUX下c/c++的学习(4)linux file and direction(stat fstat lstat access umask chmod ...)
    飞蛾扑火
    生成验证码点击可刷新
    C#项目调用非托管代码函数的方法
    【学习】数据库事务
    如何判断数据库是否存在
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10492667.html
Copyright © 2020-2023  润新知