在线调整InnoDB Buffer Pool Size

InnoDB Buffer Pool主要是用来缓存数据表和索引数据的内存区域,它的默认值为134217728字节(128MB)。最大值取决于CPU架构;32位系统上的最大值为4294967295(232-1),64位系统上的最大值为18446744073709551615(264-1)。在32位系统上,CPU体系结构和操作系统的实际最大大小可能低于标准的最大大小。当缓冲池的大小大于1GB时,将innodb_buffer_pool_instances设置为大于1的值可以提高繁忙服务器上的可伸缩性。
InnoDB缓冲池更大的场景下,多次访问相同的数据表数据所需要的磁盘I/O就更少。在专用数据库服务器上,可以将缓冲池大小设置为机器物理内存大小的80%。在配置缓冲池大小时要注意以下潜在问题,并准备在必要时缩减缓冲池的大小。
◾对物理内存的竞争会导致操作系统分页。
◾InnoDB储备增加内存缓冲区和控制结构,以便总分配空间约10%大于指定的缓冲池大小。
◾地址空间的缓冲池必须是连续的,可以是一个问题在Windows系统负载在特定地址的dll。
◾缓冲池初始化时间大约是与它的大小成正比。对于具有大型缓冲池的实例,初始化时间可能很重要。要缩短初始化周期,可以在服务器关闭时保存缓冲池状态,并在服务器启动时恢复它。
当您增加或减少缓冲池大小时,操作将以块的形式执行。块大小由innodb_buffer_pool_chunk_size配置选项定义,默认值为128mb。
缓冲池大小必须始终等于或多个innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances。如果将缓冲池大小更改为不等于或多个innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的值,缓冲池大小将自动调整为等于或多个innodb_buffer_pool_size * innodb_buffer_pool_instances的值。
innodb_buffer_pool_size可以动态设置,这允许您在不重启服务器的情况下调整缓冲池的大小。Innodb_buffer_pool_resize_status变量报告在线缓冲池调整大小操作的状态。
◾通过InnoDB api执行的活动事务和操作应该在调整缓冲池大小之前完成。
◾当启动调整大小操作时,该操作直到所有活动事务完成后才开始。调整大小操作进行后,需要访问缓冲池的新事务和操作必须等待调整大小操作完成。该规则的一个例外是,当缓冲池被碎片化并在缓冲池大小减小时回收页面时,允许对缓冲池进行并发访问。允许并发访问的一个缺点是,在提取页面时,可能会导致可用页面暂时短缺。
◾请注意如果在缓冲池调整大小操作开始后启动嵌套事务,则可能会失败。
◾在线调整Innodb缓冲池大小请在业务低峰期进行。
接下来,我们来在线调整InnoDB Buffer Pool
查看当前系统MySQL的InnoDB Buffer Pool Size为128M
mysql> show global variables like '%innodb_buffer%';
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | |
| innodb_buffer_pool_dump_at_shutdown | ON |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_instances | |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | |
+-------------------------------------+----------------+
rows in set (0.00 sec)
通过设定全局系统变量innodb_buffer_pool_size来在线调整InnoDB Buffer Pool为1GB
mysql> set global innodb_buffer_pool_size=;
Query OK, rows affected (0.04 sec) mysql> show global variables like '%innodb_buffer%';
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | |
| innodb_buffer_pool_dump_at_shutdown | ON |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_dump_pct | |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_instances | |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | |
+-------------------------------------+----------------+
rows in set (0.00 sec) mysql> select ///
-> ;
+---------------------------+
| /// |
+---------------------------+
| 1.000000000000 |
+---------------------------+
row in set (0.00 sec)
当我们在线调整InnoDB Buffer Pool Size的时候,我们可以通过状态变量Innodb_buffer_pool_resize_status来监控Resize的进度
mysql> show global status like '%Innodb_buffer_pool_resize_status%';
+----------------------------------+----------------------------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------------------------+
| Innodb_buffer_pool_resize_status | Completed resizing buffer pool at ::. |
+----------------------------------+----------------------------------------------------+
row in set (0.00 sec)
当然我们也可以通过查看MySQL标准错误输出文件error.log观察Resize的相关输出信息
#increasing the size of the buffer pool ouput
--20T03::.852669Z [Note] InnoDB: Resizing buffer pool from to (unit=).
--20T03::.861219Z [Note] InnoDB: Requested to resize buffer pool. (new size: bytes)
--20T03::.872100Z [Note] InnoDB: Disabling adaptive hash index.
--20T03::.873145Z [Note] InnoDB: disabled adaptive hash index.
--20T03::.873209Z [Note] InnoDB: Withdrawing blocks to be shrunken.
--20T03::.873246Z [Note] InnoDB: Latching whole of buffer pool.
--20T03::.873283Z [Note] InnoDB: buffer pool : resizing with chunks to .
--20T03::.007923Z [Note] InnoDB: buffer pool : chunks ( blocks) were added.
--20T03::.008025Z [Note] InnoDB: Resizing hash tables.
--20T03::.016691Z [Note] InnoDB: buffer pool : hash tables were resized.
--20T03::.016973Z [Note] InnoDB: Resizing also other hash tables.
--20T03::.053148Z [Note] InnoDB: Resized hash tables at lock_sys, adaptive hash index, dictionary.
--20T03::.053287Z [Note] InnoDB: Completed to resize buffer pool from to .
--20T03::.053317Z [Note] InnoDB: Re-enabled adaptive hash index.
--20T03::.053362Z [Note] InnoDB: Completed resizing buffer pool at ::.
在线缓冲池调整内部大小
调整大小操作由后台线程执行。当增加缓冲池大小时,调整操作:
•以块的形式添加页面(块大小由innodb_buffer_pool_chunk_size定义)
•覆盖哈希表、列表和指针来使用内存中的新地址
•在空闲列表中添加新页面
当这些操作正在进行时,其他线程将被阻止访问缓冲池。
当减小缓冲池大小时,调整操作:
•对缓冲池进行碎片整理并回收(释放)页面
•以块的形式删除页面(块大小由innodb_buffer_pool_chunk_size定义)
•转换哈希表、列表和指针,以在内存中使用新地址
在这些操作中,只有对缓冲池进行碎片整理和回收页面才能允许其他线程并发地访问缓冲池。
在线调整InnoDB Buffer Pool Size的更多相关文章
- innodb buffer pool小解
INNODB维护了一个缓存数据和索引信息到内存的存储区叫做buffer pool,他会将最近访问的数据缓存到缓冲区.通过配置各个buffer pool的参数,我们可以显著提高MySQL的性能. INN ...
- 14.6.3.1 The InnoDB Buffer Pool
14.6.3.1 The InnoDB Buffer Pool InnoDB 保持一个存储区域被称为buffer pool 用于cache数据和索引在内存里, 知道InnoDB buffer pool ...
- 14.4.3.1 The InnoDB Buffer Pool
14.4.3.1 The InnoDB Buffer Pool 14.4.3.2 Configuring Multiple Buffer Pool Instances 14.4.3.3 Making ...
- 理解innodb buffer pool
今天组里有个同事说可以查看innodb buffer pool每个表和索引占的大小,为此我搜了下,还真有方法,记录下. innodb buffer pool有几个目的: 缓存数据--众所周知,这个占了 ...
- [转]MySQL innodb buffer pool
最近在对公司的 MySQL 服务器做性能优化, 一直对 innodb 的内存使用方式不是很清楚, 乘这机会做点总结. 在配置 MySQL 的时候, 一般都会需要设置 innodb_buffer_poo ...
- innodb buffer pool相关特性
背景 innodb buffer pool作为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能.因此在数据库发生变更,比如重启.主备切换实例迁移等等,innodb buffer po ...
- MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
MySQL · 性能优化· InnoDB buffer pool flush策略漫谈 背景 我们知道InnoDB使用buffer pool来缓存从磁盘读取到内存的数据页.buffer pool通常由数 ...
- 14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取
14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取 一个预读请求是一个I/ ...
- 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 脏 ...
随机推荐
- ERP 实施执行力提高的障碍,看看你中了几招?
据统计,在国内 ERP 实施的成功率非常低,成功实施实现系统集成的只占10%-20%:没有实现系统集成或实现部分集成的只有30%-40%:而失败的却占50%,并且在实施成功的10%-20%中大多为外资 ...
- How to download a CRX file from the Chrome web store
如何从 谷歌浏览器商店 离线下载 谷歌浏览器扩展 Simply copying the Chrome store extension url to the following website: htt ...
- JavaScript写九九乘法表
<script language=javascript> for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ document.write (i+&qu ...
- needPrint 不显示打印按钮
客户问题: 客户用的是needPrint 来显示打印按钮,现在访问不能显示后台提示有错误 打开控制台显示: java.security.AccessControlException: ...
- redis 命令clear、set、get、del、rename、keys *、exists、type、expire、expireat、persist、ttl、move、select
清屏 clear 新增/修改set 查询get 删除del 修改key rename old new 查询所有的key keys *查询一个key是否存在 exists,有返回1,没有返回0查询值的类 ...
- leetCode题解 寻找运动环
1.题目描述 Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this ...
- 1.Spring——七大主要模块
Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Content. 下面分别简单介绍: 1.Spring Core Core模块是Spring的核心类库 ...
- Linux查看磁盘读写
---------- 查看磁盘读写---------iostat -k 1 SQL> ho iostatLinux 2.6.32-279.el6.x86_64 (server-92) 08/1 ...
- iOS7中修改StatusBar的显示颜色
iOS7中修改StatusBar的显示颜色 效果图如下: 在iOS7中想手动修改statusBar的颜色,第一步需要做的就是在plist文件中设置View controller-based statu ...
- 辉光UIView的category
辉光UIView的category 本人视频教程系类 iOS中CALayer的使用 效果如下: 源码: UIView+GlowView.h 与 UIView+GlowView.m // // UI ...