RocksDB 压缩需要太多可用空间

问题描述 投票:0回答:1

我们有一个写入密集型应用程序,每小时将数千条日志写入 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 页面并尝试了不同设置的组合,但没有成功

mysql mariadb storage rocksdb
1个回答
0
投票

在搜索和阅读文档很多天后,我最终使用了 FIFO 式压缩,其最大大小由应用程序动态更新。

© www.soinside.com 2019 - 2024. All rights reserved.