rocksdb 无法 alter 的解决方案
-- 第 1 步:记录下 RocksDB 的 Block Cache Size 当前值 = XXXXX
show variables like 'rocksdb_block_cache_size';
-- -------------------------------------------------------
-- 第 2 步:需要重新配置参数
-- (2.1) RocksDB 的 Block Cache 改为较小的值 1GB
SET GLOBAL rocksdb_block_cache_size=1024*1024*1024;
-- (2.2) InnoDB Buffer Pool 需要配置为规格内存的一半,以 4C8G 为例,设为 4G
SET GLOBAL innodb_buffer_pool_size=4*1024*1024*1024;
-- (2.3) 检查/调大 Merge Sort 相关参数
-- RocksDB 的 rocksdb_merge_buf_size 设置为 8MB
SET GLOBAL rocksdb_merge_buf_size=8*1024*1024;
-- RocksDB 的 rocksdb_merge_combine_read_size 设置为 1GB
SET GLOBAL rocksdb_merge_combine_read_size=1024*1024*1024;
-- -------------------------------------------------------
-- 第 3 步:bulk load 模式下进行 alter engine
SET SESSION sql_log_bin=0;
SET SESSION rocksdb_bulk_load=1;
ALTER TABLE xxxxx_t1 ENGINE=ROCKSDB;
-- ... 可以多条 alter engine
-- ... 可以多条 alter engine
-- ... 可以多条 alter engine
ALTER TABLE xxxxx_t100 ENGINE=ROCKSDB;
SET SESSION rocksdb_bulk_load=0;
-- -------------------------------------------------------
-- 第 4 步,改回参数
-- InnoDB Buffer Pool 改回 128M
SET GLOBAL innodb_buffer_pool_size=128*1024*1024;
-- RocksDB 的 Block Cache 改为原值
SET GLOBAL rocksdb_block_cache_size = XXXXX; -- 第一步里记录的原值
评论