有时,您可能希望更改现有MyRocks数据库中的数据格式。数据格式更改包括更改压缩设置(例如Zlib到ZSTD) 块大小(例如:16KB到4KB),布隆过滤器设置(例如:禁用最底层的布隆过滤器),索引格式(例如:非分区索引到分区索引),等等。 通过更新my.cnf并重新启动mysqld实例,新创建的SST文件正在使用新的数据格式。但是,现有的SST文件继续使用旧格式。 完全替换使用新数据格式需要一段时间。
手动压缩是强制重写任何列族的整个SST文件的便捷方式之一。 在MyRocks中,您可以像这样触发手动压缩:
mysql> set session rocksdb_manual_compaction_threads=16;
Query OK, 0 rows affected (0.00 sec)
mysql> set global rocksdb_compact_cf='cf_node_pk';
Query OK, 0 rows affected (25 min 13.80 sec)
“set global rocksdb_compact_cf =’columnn_family_name’“是一个触发指定列族的手动压缩的命令。 在手动压缩结束之前,该命令将被阻止。这可能需要很长时间,具体取决于列族和压缩吞吐量。
rocksdb_manual_compaction_threads是一个会话变量名,用于指定用于从会话启动的手动压缩的RocksDB线程数。 默认情况下,与rocksdb_max_subcompactions(默认值为1)相同,使用线程。
“set global rocksdb_compact_cf =’columnn_family_name’“一次只能指定一个列族。要压缩多个列族,您需要指定多个”set global rocksdb_compact_df…“命令 在后台,MyRocks序列化所有手动压缩请求,并按FIFO顺序逐个执行。换句话说,MyRocks一次只执行一次手动压缩。 您不能请求超过max-manual-compactions挂起+运行压缩请求。
rocksdb_manual_compaction_running是一个状态变量,用于判断当前是否处理了手动压缩。
rocksdb_manual_compaction_processed是一个状态变量,用于说明总共处理了多少个手动压缩请求。 如果终止正在执行”set global rocksdb_compact_cf =’columnn_family_name’“的会话, 则会取消挂起的手动压缩请求。已经运行的手动压缩不会被取消。
如果在运行手动压缩时发出正常的MySQL关闭请求,则会立即取消所有挂起的请求和正在运行的手动压缩。