本文共 696 字,大约阅读时间需要 2 分钟。
layout: post
title: “MySQL 系列 缓冲区管理”
subtitle: ‘MySQL 技术内幕:InnoDB存储引擎’
author: “lichao”
header-img: “img/post-bg-2015.jpg”
catalog: true
tags:MySQL
缓冲池是一个很大的内存区域,其中存放各种类型的页.
数据库中的缓冲池是通过LRU(最近最少使用)算法来进行管理的。即最频繁使用的页在LRU列表的前端,而最少使用的页在LRU列表的尾端。当缓冲池不能存放新读取到的页时,将首先释放LRU列表中尾端的页。在InnoDB 存储引擎中,缓存池中页的大小默认为16KB
优化的RUL算法
缓冲池采用least recently used(LRU)算法的变体,将缓冲池作为列表进行管理。
在InnoDB的存储引擎中,LRU列表中加入了 midpoint位置,将列表分为两个子列表。新读取的页,虽然是最新访问的页,但并不是直接放入到 LRU列表的首部,而是存在 LRU列表的 midpoint位置。读取到mid位置后的页需要等待 innodb_old_blocks_time 时间后加入到LRU列表的热端。sql 操作时,仅需要缓存这次查询操作中需要的页,
相关参数:
innodb_old_blocks_time // 移动时间.
innodb_old_blocks_pct // 旧链表与新链表的长度.
在LRU列表中的页被修改后,称该页为脏页,这时数据库会通过checkpoint机制将脏页刷新回磁盘,而flush列表中的页即为脏页列表
重做日志缓冲
命令
转载地址:http://gpdoo.baihongyu.com/