mysq优化三之buffer pool

摘要:
这一切都是关于查询以获取页面并将其放入内存。MySQL中有一个单独的区域用于存储页面。这个空间是在缓冲池中放置另一页的位置。MySQL中还有一个管理脏页的链接列表。新添加的页面位于链接列表的开头。链接列表的最后一个控制块是要删除的页面。缓冲池中的所有页面都可以被替换。前面是热数据区,后面是冷数据区。

sql语句执行流程

mysq优化三之buffer pool第1张

mysq优化三之buffer pool第2张

 mysq优化三之buffer pool第3张

不管是select还是update,都是要查询把页取出来放在内存中,mysql中有一个单独的区域用来存放页,这就是buffer pool

innodb architecture

mysq优化三之buffer pool第4张

 mysql启动的时候,会在内存中开辟一个128M的空间,这个空间就是buffer pool

mysq优化三之buffer pool第5张

 当再取一个页放在buffer pool中的什么位置呢,buffer pool中的页的位置是不连续的,那怎么管理呢。

mysq优化三之buffer pool第6张

 当前buffer pool有多少个空白页,free链表就有多少个控制块。

如果要更新数据的时候,buffer pool中的页被修改了,那么就成了脏页,脏页什么时候持久化到磁盘中呢,怎么知道哪些页是脏页呢,mysql中还有一个链表是对脏页进行管理的。

mysq优化三之buffer pool第7张

当有一个新的页要存放到buffer pool中时,但buffer pool已经存满了,那怎么办。这就要在LRU链表中根据LRU算法进行优化。新加入的页放到这个链表的头部,这个链表的最后一个控制块就是要淘汰掉的页。 

有一些问题。

场景1:全表扫描的时候,buffer pool中的页可能会被全部替换掉。这就会导致热点数据的访问性能会降低。

所以mysql中是这样解决的,lru链表分为了两个区域,一个占八分之5,一个占八分之3,前面的是热数据区域,后面的是冷数据区域,新来的页放到冷数据区域的头部,冷数据区域的最后一个控制页释放掉

mysq优化三之buffer pool第8张

那什么时候将冷数据区域中的页移动到热数据区域中来呢?冷数据区域中控制块对应的页第二次被访问到的时间大于1s时,这个页就会插入到热数据区域的头部。

而全表扫描时,第二次访问与第一次访问的间隔时间肯定是小于1s的,所以页是不会移动到热数据区域的。

更新的页什么时候到磁盘中呢,这就会跟事务有关系。

mysq优化三之buffer pool第9张

 mysq优化三之buffer pool第10张

免责声明:文章转载自《mysq优化三之buffer pool》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS(数据库的应用)Java之Poi导出Excel文档下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Elasticsearch logstsh同步mysql数据到ES中

1、准备: 1) 启动前面搭建的ES集群, 192.168.127.130,192.168.127.128,192.168.127.129 2) 准备要同步的数据库和数据 数据库所在的服务器IP为192.168.1.104 数据库端口为3306 数据库名shop,表名items items的表结构如下 items表的数据如下 这里有两条数据,实际环境会...

MySQL 存储过程 定时任务

drop procedure if existsmove_track_data; delimiter // create proceduremove_track_data() begin declare i int default 0; start transaction; set i = 1; case w...

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

由于MySQL编码原因会导致数据库出现乱码。 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。 具体操作: 1、进入MySQL控制台 >mysql -uroot -p #输入密码进入 >status; #查看当前MySQL运行状态,如下图所示:  ...

MYSQL优化(2)

Innodb引擎 1.innodb_buffer_pool_size  这个参数主要作用是缓存innodb表的索引,表数据,插入数据时的缓冲,可用内存70~80%比较合理.   show status like  'Innodb_buffer_pool_%'; 2.nnodb_purge_batch_size  表示一次清除多少个undolog page...

mysql 重置当前的自动增量值

mysql的语法与sql server的语法不同 1. sql server sql server的语法dbcc checkident('tablename',reseed,5) 2. mysql mysql的语法是ALTER TABLE tablename AUTO_INCREMENT = 5; 其中tablename是表名,5是重置之后的自动增量值大小...

mysql权限管理

1.使用密码登录mysql mysql -u root -p 2.查看所有的数据库 show databases; 3.创建数据库 create database <数据库名>; 4.创建数据库同时设置字符集  create database <数据库名> default character set utf8 collate utf...