在线配置InnoDB缓冲池大小
mysql> SET GLOBAL innodb_buffer_pool_size=402653184;
监控在线缓冲池大小调整进度
该 Innodb_buffer_pool_resize_status 变量报告一个字符串值,指示缓冲池大小调整进度;例如:
mysql> SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';
+----------------------------------+----------------------------------+
| Variable_name | Value |
+----------------------------------+----------------------------------+
| Innodb_buffer_pool_resize_status | Resizing also other hash tables. |
+----------------------------------+----------------------------------+
以下查询返回一个指示缓冲池大小调整进度的字符串值、指示操作当前阶段的代码以及该阶段的当前进度(以百分比值表示):
SELECT variable_name, variable_value
FROM performance_schema.global_status
WHERE LOWER(variable_name) LIKE "innodb_buffer_pool_resize%";
在线缓冲池调整内部大小
调整大小操作由后台线程执行。当增加缓冲池的大小时,调整大小操作:
-
添加页面chunks(块大小由 定义 innodb_buffer_pool_chunk_size)
-
转换哈希表、列表和指针以使用内存中的新地址
-
将新页面添加到空闲列表
当这些操作正在进行时,其他线程将被阻止访问缓冲池。
当减小缓冲池的大小时,调整大小操作:
-
对缓冲池进行碎片整理并撤回(释放)页面
-
删除中的页面chunks(块大小由 定义 innodb_buffer_pool_chunk_size)
-
转换哈希表、列表和指针以使用内存中的新地址
其中,只有对缓冲池进行碎片整理和撤回页面才允许其他线程并发访问缓冲池。