mariadb RocksDB压缩需要过多的可用空间

cgvd09ve  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(105)

我们有一个写密集型应用程序,每小时将数千个日志写入RocksDB表中的MariaDB数据库。我们希望管理磁盘空间几乎填满的情况。
目前,当可用空间达到预定义的限制时,我们开始删除1%的最旧日志,查询如下:

DELETE FROM log_table LIMIT 1000000;

当然,将行数分解为一些较小的计数,并延迟查询以不使磁盘过载。
问题是删除行不会释放磁盘空间,而只会创建墓碑,因此我们无法检查是否有可用空间,也无法再次运行此查询。
因此,我们在所有查询完成后使用手动压缩来真正释放磁盘空间,查询如下所示:

SET GLOBAL `rocksdb_compact_cf` = 'log_family';

这造成了另一个问题,这是我们目前的问题。这个手动压缩过程需要大约2倍于当前数据库大小的可用空间,为了进行这样的压缩,我们需要保留一半的磁盘容量,这是一个很大的浪费。
我非常感谢对我们问题的任何帮助/建议。
非常感谢
平台信息:

OS:   OpenSUSE 15.5
DBMS: MariaDB 10.6.14

MariaDB配置:

[mysqld]
plugin-load-add=ha_rocksdb

rocksdb_compaction_sequential_deletes = 10000
rocksdb_compaction_sequential_deletes_count_sd = true

rocksdb_max_total_wal_size = 128MB
rocksdb_keep_log_file_num = 1

rocksdb_delete_obsolete_files_period_micros = 30000000

rocksdb_max_background_jobs = 2
rocksdb_max_subcompactions = 2

rocksdb-override-cf-options='default={compression=kZlibCompression; bottommost_compression=kZlibCompression; max_write_buffer_number=6; write_buffer_size=16m; min_write_buffer_number_to_merge=2; level0_file_num_compaction_trigger=4; max_bytes_for_level_base=128m; max_bytes_for_level_multiplier=10; target_file_size_base=12800k; target_file_size_multiplier=10; level0_slowdown_writes_trigger=16; level0_stop_writes_trigger=20;}'

我们阅读了许多RocksDB github wiki页面,并尝试了不同设置的组合,但没有成功

mitkmikd

mitkmikd1#

在搜索和阅读了很多天的文档之后,我最终使用了具有最大大小的FIFO-Style compaction,该大小由应用程序动态更新。

相关问题