最新消息:

快速预热Innodb Buffer Pool的方法

Innodb admin 2746浏览 0评论

当innodb_buffer_pool_size大到几十GB或是百GB的时候,因为某些日常升级更新或是意外宕机,而必须要重新启动mysqld服务的之后,就面临一个问题,如何将之前频繁访问的数据重新加载回buffer中,也就是说,如何对innodb buffer pool进行预热,以便于快速恢复到之前的性能状态。如果是光靠Innodb本身去预热buffer,将会是一个不短的时间周期,业务高峰时,数据库将面临相当大的考验,I/O的瓶颈会带来糟糕的性能。那么,该怎么办呢?于是大家便想出一些办法,最后Percona把这个需求,在XtraDB中最为一个新特性实现这个功能。
早期,Peter在实际的工作中总结了一些预热buffer pool的SQL语句,也就是通过人为模拟一些请求,尽可能地将我们所需的数据块和索引加载到内存中。
1. 加载主键索引
select count(*) from tbl where no_index_col=0;
2. 加载非主键索引
select count(*) from tbl where index_col like “%0%”;
3. 加载BLOB/TEXT列
select count(*) from tbl where blob_col like “%0%”;
4. 分段加载大表数据
select count(*) from tbl where id between 1 and 10000000 and no_index_col=0;
还有人使用blackhole引擎来进行预热操作,通过替换不同的索引字段进行排序查询,将所需数据加载。
create table temp_blackhole like tbl;
alter table temp_blackhole engine=blackhole;
select * from tbl order by id into temp_blackhole;
现在,Percona已经完全在XtraDB中实现这个功能,最初采用Share Memory Buffer […]

转载请注明:爱开源 » 快速预热Innodb Buffer Pool的方法

您必须 登录 才能发表评论!