`
kabike
  • 浏览: 609522 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

innodb的buffer pool

阅读更多
innodb是有buffer pool机制的,可以参考
http://dev.mysql.com/doc/refman/5.1/en/innodb-buffer-pool.html

buffer pool可以按page为单位,对记录进行缓存.

CREATE TABLE `20130122handler` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  `content` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `20130122handler_idx_uid` (`uid`)
) ENGINE=InnoDB

这个表里有60w随机数据

先执行下
show status like 'Innodb_buffer_pool_read%';

结果为
Innodb_buffer_pool_read_requests 1204
Innodb_buffer_pool_reads         97


然后执行
select * from 20130122handler where uid=4349023;

用时为0.016s

show status like 'Innodb_buffer_pool_read%';

结果为
Innodb_buffer_pool_read_requests 1221
Innodb_buffer_pool_reads 98

观察下数据,发现Innodb_buffer_pool_reads增加了.
说明这条数据不在buffer pool中,需要从硬盘中读取

再执行一遍
select * from 20130122handler where uid=4349023;

用时为0s
观察下使用情况
Innodb_buffer_pool_read_requests 1237
Innodb_buffer_pool_reads 98
显然这次只需要读取buffer pool的数据就行了,省了一次磁盘IO

按照page来缓存,好处是连续读取同一个page上记录,只有第一个有磁盘IO.
也有人提出用按照row来缓存
http://rdc.taobao.com/team/jm/archives/1107


buffer pool有被污染的情况,即有些非热点数据把热点数据挤出了buffer pool
http://www.orczhou.com/index.php/2010/05/innodb-plugin-make-buffer-cache-scan-resistant/


buffer pool在启动的时候是空的,最好能预先warm up一下
http://www.mysqlperformanceblog.com/2008/05/01/quickly-preloading-innodb-tables-in-the-buffer-pool/


不过mysql 5.6有了新功能,可以关闭的时候dump出buffer pool镜像,然后启动的时候reload.
http://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_warm_up
分享到:
评论

相关推荐

    MySQL性能优化InnoDB buffer pool flush策略

    MySQL 性能优化 InnoDB buffer pool flush 策略 MySQL 中 InnoDB 存储引擎使用 buffer pool 来缓存从磁盘读取到内存的数据页。Buffer pool 通常由数个内存块加上一组控制结构体对象组成。内存块的个数取决于 buffer...

    浅析在线调整 innodb_buffer_pool_size

    浅析在线调整 innodb_buffer_pool_size 作者:zhou mysql版本:5.7 先介绍一下 buffer pool: 在innodb存储引擎中数据访问以page为单位,page也是innodb管理数据库的最小磁盘单位,每个page的默认大小为16KB(可以通过...

    12 Buffer Pool这个内存数据结构到底长个什么样子.pdf

    MySQL中的Buffer Pool是InnoDB存储引擎中一个非常核心的内存数据结构,它的主要作用是为了提高数据库的性能。Buffer Pool能够缓存数据页和索引页,减少数据库对于磁盘的访问次数,以此提升读写效率。具体而言,...

    MySQL内存优化:释放数据库性能的金钥匙

    InnoDB Buffer Pool主要用于缓存InnoDB表的数据和索引,它极大地减少了对物理磁盘的访问次数。通过调整该参数的大小,可以根据服务器硬件配置和数据库的实际情况来优化性能。 - **查看Buffer Pool使用情况**: ```...

    mysql优化笔记参考

    其中,`innodb_buffer_pool_pages_free` 表示空闲的缓存页数量,如果该值为0,则意味着 Buffer Pool 已经满载,此时可能需要考虑增加 `innodb_buffer_pool_size` 参数的大小来扩大缓存空间。 - **参数调整**: - *...

    mysql面试题+BufferPool+InnoDB如何管理Page页+缓冲区+索引页+change buffer更新流程

    什么是BufferPool? **Buffer Pool基本概念** Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由**缓存数据页(Page)** 和 对缓存数据页进行描述的**...

    MySQL内存使用之全局共享.pdf

    本文将详细探讨MySQL内存使用中涉及的全局共享部分,如查询缓存(Query Cache)、表缓存(Table Cache)、线程缓存(Thread Cache)、二进制日志缓冲区(Binlog Buffer)以及InnoDB缓冲池(InnoDB Buffer Pool)等。...

    行业-12 Buffer Pool这个内存数据结构到底长个什么样子.rar

    Buffer Pool是数据库管理系统中的一个重要组件,特别是在InnoDB存储引擎的MySQL中,它是内存中的一个关键数据结构,用于提高磁盘I/O效率。Buffer Pool的主要作用是缓存数据页和索引页,使得数据库操作能在内存中快速...

    MySQL零拷贝技术详解.pdf

    innodb_flush_method 参数同时控制 redo log buffer 和 innodb buffer pool 缓冲区刷新策略,其中 log files 是 redo log buffer 在内存中的缓存区,log files 是磁盘上的 Redo Log 文件;data files 是 innodb ...

    21 生产经验:如何通过多个Buffer Pool来优化数据库的并发性能.pdf

    通过配置innodb_buffer_pool_size和innodb_buffer_pool_instances参数,可以将一个大的缓冲池分配为多个实例,每个实例拥有独立的free、flush、lru等链表。这样的设计允许不同的线程并发地访问不同的缓冲池实例,...

    行业-23 生产经验:在生产环境中,如何基于机器配置来合理设置Buffer Pool.rar

    在数据库管理中,Buffer Pool(缓冲池)是一个至关重要的组件,它在提高系统性能方面扮演着核心角色。Buffer Pool主要用于存储数据库的缓存数据页,包括表的数据、索引和其他数据库对象,以减少磁盘I/O操作。在生产...

    7.优化服务器设置1

    2. **InnoDB Buffer Pool**:InnoDB存储引擎使用Buffer Pool来缓存数据和索引,减少磁盘I/O。增大Buffer Pool的大小可以显著提升数据库性能,但要注意不能过大以至于占用过多内存,影响其他系统服务。同时,InnoDB的...

    行业-22 生产经验:如何通过chunk来支持数据库运行期间的Buffer Pool动态调整.rar

    这通常涉及到修改数据库的初始化参数,如Oracle的`DB_CACHE_SIZE`或MySQL的`innodb_buffer_pool_size`。然后,可以通过增加或减少Chunk的数量来调整Buffer Pool的大小。增加Chunk意味着分配更多的内存,而减少Chunk...

    MySQL中读页缓冲区buffer pool.doc

    在 MySQL 启动时,会根据配置参数 `innodb_buffer_pool_size` 申请一定大小的内存,用于创建 buffer pool。这个参数决定了 MySQL 可以缓存多少数据页,通常设置为可用物理内存的70%-80%以平衡数据库性能与操作系统...

    41 在Buffer Pool执行完增删改之后,写入日志文件的redo log长什么样.pdf

    在数据库系统中,当我们对数据进行增删改操作时,这些操作首先会在Buffer Pool中执行。Buffer Pool是数据库用来缓存磁盘上数据页的一个内存结构,它能够提高数据库操作的效率。但为了保证数据库的可靠性,确保在发生...

    MySQL8.0内存相关参数总结

    InnoDB Buffer Pool的命中率可通过公式计算:(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%。 2. **innodb_change_buffering**: 从MySQL5.5开始...

    cacti-mysql-template指标解释.pdf

    - **InnoDB Buffer Pool Status**:提供InnoDB缓冲池的详细状态信息,帮助理解缓存的使用情况。 - **InnoDB Checkpoint Age**:显示InnoDB检查点年龄,即自上次检查点以来的时间。该值有助于了解InnoDB日志刷新策略...

Global site tag (gtag.js) - Google Analytics