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 来缓存从磁盘读取到内存的数据页。Buffer pool 通常由数个内存块加上一组控制结构体对象组成。内存块的个数取决于 buffer...
浅析在线调整 innodb_buffer_pool_size 作者:zhou mysql版本:5.7 先介绍一下 buffer pool: 在innodb存储引擎中数据访问以page为单位,page也是innodb管理数据库的最小磁盘单位,每个page的默认大小为16KB(可以通过...
MySQL中的Buffer Pool是InnoDB存储引擎中一个非常核心的内存数据结构,它的主要作用是为了提高数据库的性能。Buffer Pool能够缓存数据页和索引页,减少数据库对于磁盘的访问次数,以此提升读写效率。具体而言,...
InnoDB Buffer Pool主要用于缓存InnoDB表的数据和索引,它极大地减少了对物理磁盘的访问次数。通过调整该参数的大小,可以根据服务器硬件配置和数据库的实际情况来优化性能。 - **查看Buffer Pool使用情况**: ```...
其中,`innodb_buffer_pool_pages_free` 表示空闲的缓存页数量,如果该值为0,则意味着 Buffer Pool 已经满载,此时可能需要考虑增加 `innodb_buffer_pool_size` 参数的大小来扩大缓存空间。 - **参数调整**: - *...
什么是BufferPool? **Buffer Pool基本概念** Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由**缓存数据页(Page)** 和 对缓存数据页进行描述的**...
本文将详细探讨MySQL内存使用中涉及的全局共享部分,如查询缓存(Query Cache)、表缓存(Table Cache)、线程缓存(Thread Cache)、二进制日志缓冲区(Binlog Buffer)以及InnoDB缓冲池(InnoDB Buffer Pool)等。...
Buffer Pool是数据库管理系统中的一个重要组件,特别是在InnoDB存储引擎的MySQL中,它是内存中的一个关键数据结构,用于提高磁盘I/O效率。Buffer Pool的主要作用是缓存数据页和索引页,使得数据库操作能在内存中快速...
innodb_flush_method 参数同时控制 redo log buffer 和 innodb buffer pool 缓冲区刷新策略,其中 log files 是 redo log buffer 在内存中的缓存区,log files 是磁盘上的 Redo Log 文件;data files 是 innodb ...
通过配置innodb_buffer_pool_size和innodb_buffer_pool_instances参数,可以将一个大的缓冲池分配为多个实例,每个实例拥有独立的free、flush、lru等链表。这样的设计允许不同的线程并发地访问不同的缓冲池实例,...
在数据库管理中,Buffer Pool(缓冲池)是一个至关重要的组件,它在提高系统性能方面扮演着核心角色。Buffer Pool主要用于存储数据库的缓存数据页,包括表的数据、索引和其他数据库对象,以减少磁盘I/O操作。在生产...
2. **InnoDB Buffer Pool**:InnoDB存储引擎使用Buffer Pool来缓存数据和索引,减少磁盘I/O。增大Buffer Pool的大小可以显著提升数据库性能,但要注意不能过大以至于占用过多内存,影响其他系统服务。同时,InnoDB的...
这通常涉及到修改数据库的初始化参数,如Oracle的`DB_CACHE_SIZE`或MySQL的`innodb_buffer_pool_size`。然后,可以通过增加或减少Chunk的数量来调整Buffer Pool的大小。增加Chunk意味着分配更多的内存,而减少Chunk...
在 MySQL 启动时,会根据配置参数 `innodb_buffer_pool_size` 申请一定大小的内存,用于创建 buffer pool。这个参数决定了 MySQL 可以缓存多少数据页,通常设置为可用物理内存的70%-80%以平衡数据库性能与操作系统...
在数据库系统中,当我们对数据进行增删改操作时,这些操作首先会在Buffer Pool中执行。Buffer Pool是数据库用来缓存磁盘上数据页的一个内存结构,它能够提高数据库操作的效率。但为了保证数据库的可靠性,确保在发生...
InnoDB Buffer Pool的命中率可通过公式计算:(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%。 2. **innodb_change_buffering**: 从MySQL5.5开始...
- **InnoDB Buffer Pool Status**:提供InnoDB缓冲池的详细状态信息,帮助理解缓存的使用情况。 - **InnoDB Checkpoint Age**:显示InnoDB检查点年龄,即自上次检查点以来的时间。该值有助于了解InnoDB日志刷新策略...