14.6.3.1 The InnoDB Buffer PoolInnoDB 保持一个存储区域被称为buffer pool 用于cache数据和索引在内存里,知道InnoDB buffer pool 如何工作,利用它来保持频繁访问的数据在内存里,是MYSQL 调优的一个重要方面。你可以配置InnoDB buffer pool的各个方面来改善性能:理想情况下,你设置buffer pool的大小为实际最大值,留下足够的内存用于其他进程在服务器上运行而没有产生分页。buffer pool越大, InnoDB 表位越像是内存数据库,从磁盘读取一次然后从内存访问数据在随后的读操作。Buffer pool size  是使用 innodb_buffer_pool_size 配置选项2.  随着64位系统使用大的内存,你可以把buffer 分成多个部分,以尽量减少内存结果的冲突在并发操作期间。3.你可以保持频繁访问的数据在内存里 尽管突然的高峰活动对于备份或者报告操作4.你可以控制何时如何InnoDB 执行鱼肚请求来预获取Pages异步到buffer pool,预计 pages 马上被需要5. 你可以控制当background刷新旧的pages发生,是否InnoDB 动态调整 基于负载的刷新频率。6.你可以配置InnoDB 来保持当前的buffer pool 状态来避免一个漫长的准备期在一个server 重启后。你也可以保留当前的buffer pool 状态 当server 在运行时InnoDB Buffer Pool LRU AlgorithmInnoDB 管理buffer pool 作为一个列表,使用一个变化的LRU算法。当room 是被需要增加一个新的page 到pool,InnoDB 驱逐最少使用的pages增加新的pages到列表的中间。这个 中间插入的策略 对待列表作为两个清单1.在头部,  新的(或者年轻的)的一个子列表 被频繁访问2.在尾部, 一个老的pages 的一个子列表很少被访问这个算法保持pages  大量使用通过查询在新的子列表老的子列表包含更少使用的页, 这些是候选为被驱逐LRU 算法操作默认如下:1.buffer pool的3/8 是分给old sublist2. 列表的中间是边界新的sublist的尾部和 old sublist的开头3.当InnoDB 读取一个Page到buffer pool,他初始插入在中间(old sublist的头部).一个page 可以读进来 因为它是被需要用于一个用户指定的操作比如SQL查询,或者 作为预读的一部分被InnoDB自动执行4.访问一个page 在old sublist 让这个Page变的年轻,移动到 buffer pool的head(new sublist的头部)如果page 因为需要被读取, 第一次访问立即发生 page变的yong.如果page 被读进来由于预读, 第一访问不立即发生5.在进行数据库操作时, pages在buffer pool不被访问 变老移动到列表的尾部。Pages 在new和old 子列表 老化其他pages变成新的。6.默认的, pages被查询读取立即移动到new sublist,意味着他们会在buffer pool中停留很长时间。一个表扫描(比如执行一个mysqldump操作),或者一个SELECT 语句没有带WHERE条件)可以带来大量的数据到buffer pool ,驱逐等量的older数据,即使新的数据不会被再次使用。类似的,pages是通过后台线程加载的 只访问一次 移动到new list的head.这些情况回把平凡使用的pages移动到old sublist.InnoDB Buffer Pool Configuration Options  InnoDB Buffer Pool 配置选项几个配置选项影响InnoDB buffer pool的不同方面:1.innodb_buffer_pool_size指定buffer pool的大小, 如果buffer pool是太小了你有足够的内存,让buffer pool变大能改善性能通过降低磁盘I/O的总量zabbix:/root/Esx# cat /etc/my.cnf  | grep innodb_buffer_pool_size
innodb_buffer_pool_size=4G2.innodb_buffer_pool_instances把buffer pool 分成一个用户指定的单独的区域, 每个有它自己的LRU list和相关的数据结构,降低竞争在并发内存读取和写操作。这个选项只有当innodb_buffer_pool_size 值大于1GB才生效。总的buffer pool的代销是被分成多个buffer pool.为了最好的性能, 指定innodb_buffer_pool_instances and innodb_buffer_pool_size的组合这样每个buffer pool 实例有至少1GBmysql> show variables like '%innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_dump_at_shutdown | OFF            |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_instances        | 8              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | OFF            |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 4294967296     |
+-------------------------------------+----------------+
8 rows in set (0.01 sec)innodb_old_blocks_pct;指定 buffer pool近似的比例 InnoDB 使用old block sublist.范围是从5到95,默认是37(3/8的pool大小)mysql> show variables like '%innodb_old_blocks_pct%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_old_blocks_pct | 37    |
+-----------------------+-------+
1 row in set (0.00 sec)innodb_old_blocks_time:指定多久单位毫秒一个page 插入到old sublist 必须留在那个在他第一次访问后在他可以被移动到new sublist如果值是0, 一个page 插入到old sublist 立即移动到新的sublist  当它第一次被访问后。如果值大于0, pages 停留在old sublist 知道一个访问发生至少多少毫秒后第一次被访问。比如,值为1000 导致pages停留在old sublist 1秒钟 在首次访问后 在它们变的合格移动到new sublistmysql> show variables like '%innodb_old_blocks_time%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_old_blocks_time | 1000  |
+------------------------+-------+
1 row in set (0.00 sec)设置 innodb_old_blocks_time 大于0防止一次表扫描充满new sublist 记录在一个Page读进来后一个扫描可以访问很多次,但是page是不能使用在那以后。如果 innodb_old_blocks_time 是设置一个值大于处理page的时间,page停留在old sublist,老化到列表的尾部 被快速淘汰。这种方式, pages只使用一次扫描不影响大量使用的pages在new sublistinnodb_old_blocks_time  可以设置在运行时间,这样你可以临时改变 当操作需要表扫描或者dumpsinnodb_read_ahead_threshold控制  预读的灵敏度,InnoDB 使用预取pages到buffer poolinnodb_random_read_ahead让随机的预读技术用于预取pages到buffer pool.mysql> show variables like '%innodb_random_read_ahead%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_random_read_ahead | OFF   |
+--------------------------+-------+
1 row in set (0.00 sec)innodb_adaptive_flushing

转载于:https://www.cnblogs.com/zhaoyangjian724/p/6199027.html

14.6.3.1 The InnoDB Buffer Pool相关推荐

  1. 14.4.3.5 Configuring InnoDB Buffer Pool Flushing 配置InnoDB Buffer Pool 刷新:

    14.4.3.5 Configuring InnoDB Buffer Pool Flushing 配置InnoDB Buffer Pool 刷新:InnoDB执行某些任务在后台, 包括flush 脏数 ...

  2. [转]MySQL innodb buffer pool

    最近在对公司的 MySQL 服务器做性能优化, 一直对 innodb 的内存使用方式不是很清楚, 乘这机会做点总结. 在配置 MySQL 的时候, 一般都会需要设置 innodb_buffer_poo ...

  3. Innodb Buffer Pool的三种Page和链表

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 王航威 来源 | 公众号「yangyidba」 ...

  4. MySQL · 性能优化· InnoDB buffer pool flush策略漫谈

    MySQL · 性能优化· InnoDB buffer pool flush策略漫谈 背景 我们知道InnoDB使用buffer pool来缓存从磁盘读取到内存的数据页.buffer pool通常由数 ...

  5. MySQL 引擎特性 · InnoDB Buffer Pool

    前言 用户对数据库的最基本要求就是能高效的读取和存储数据,但是读写数据都涉及到与低速的设备交互,为了弥补两者之间的速度差异,所有数据库都有缓存池,用来管理相应的数据页,提高数据库的效率,当然也因为引入 ...

  6. 重学MySQL(InnoDB Buffer Pool是什么?)

    文章目录 InnoDB Buffer Pool是什么? 我们的数据是如何放在InnoDB Buffer Pool中的? InnoDB怎么知道数据页是否在Buffer Pool中? InnoDB Buf ...

  7. Mysql InnoDB存储引擎【二】InnoDB Buffer Pool 缓存池

    一.Innodb 架构图 1.整体架构图-内存结构 & 磁盘结构 二.Buffer Pool 缓存池 1. 缓存池实现 采用页面链表表(划分可能容纳多行的页) + 中点插入策略(新增加的页插入 ...

  8. innodb buffer pool管理--free list

    buf_block_t* buf_LRU_get_free_block( buf_pool_t* buf_pool/*!< in/out: buffer pool instance */ ) 功 ...

  9. innodb buffer pool管理--数据页的访问

最新文章

  1. 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况
  2. 从陈坤微信号说起:微信公众平台开发者的江湖
  3. 简颢集团“风口”下的投资机会 新能源共享领域的机遇与挑战
  4. javascript动态创建可拖动、最大化、最小化的层
  5. matlab用socket线程发送数据,使用Python Twisted和Autobahn从Matlab通过WebSocket发送JSON数据...
  6. vs2005 vc++ 生成非托管的 不需要.net运行环境的exe程序方法
  7. 20155313 预备作业二
  8. 实验吧Web-易-简单的sql注入之3(报错的sql盲注之exp)
  9. 下列不是python元组的定义方式_python 笔试题
  10. 最新获取展示B站UP主实时信息PHP源码分享
  11. 安装vbb的一些经验(包括mysql,apache)
  12. 14. AsciiArt礼节/15. cterm的拷贝TCP包功能
  13. 威纶通触摸屏制作自定义欢迎界面的几种方法介绍
  14. 培根密码(Bacon)——python解密
  15. fsadfsaddfsadfsafsda
  16. Unity入门 简单的3D场景制作
  17. 迅雷离线下载免费申请体验(3天)
  18. .NET调用百度天气api经验
  19. 【计算机科学与技术】信息论笔记:合集
  20. 大话微服务:Spring Cloud gateway+OAuth2 实现单点登录和权限控制(二) OAuth2.0 四种模式的通俗理解

热门文章

  1. final关键字与static对比
  2. 蜗杆参数法设计_齿轮几何尺寸设计,很实用的Excel表格(附自动计算表格)
  3. 关系数据库理论:数据库的六大范式知识笔记
  4. MYSQL处理数据重复值
  5. Linux文本截取命令cut​笔记
  6. c语言深度剖析第三版pdf_入门到入坟,蕴含全网最强知识点3283页笔记、pdf教程,活到老,学到老...
  7. linux shell 求绝对值
  8. Maven 强制导入jar包
  9. 微信公众号无需二次登录_您无需两次解决问题-您需要一个设计系统
  10. 小姐姐笔记:我是如何学习简单源码拓展视野的