rocksdb的设置选项和基本调整

2023-05-16

除了在 RocksDB 上使用基本操作编写代码外,您可能还对如何调整 RocksDB 以实现所需的性能感兴趣。在本页中,我们将介绍如何进行初始设置,该设置应该足以满足许多用例的需求。

RocksDB 有许多配置选项,但其中大多数可以被许多用户安全地忽略,因为它们中的大多数都是为了影响非常特定的工作负载的性能。对于一般用途,大多数 RocksDB 选项可以保留为默认值,但是,我们建议在下面使用一些选项,每个用户都可能希望尝试使用常规工作负载。

写入缓冲区大小

这可以按数据库和/或列系列设置。

列系列写入缓冲区大小
这是用于列系列的最大写入缓冲区大小。

它表示在转换为已排序的磁盘文件之前要在内存中累积的数据量(由磁盘上的未排序日志提供支持)。默认值为 64 MB。

您需要预算 2 倍于最坏情况下的内存使用量。如果没有足够的内存,则应减小此值。否则,不建议更改此选项。例如:

cf_options.write_buffer_size = 64 << 20;

数据库写入缓冲区大小
这是数据库中所有列系列中所有写入缓冲区的最大大小。 它表示在写入磁盘之前在所有列族的内存表中要建立的数据量。

默认情况下,此功能处于禁用状态(设置为 )。您不需要更改它。但是,作为参考,如果您确实需要将其更改为 64 GB,例如:0

db_options.db_write_buffer_size = 64 << 30;

块缓存大小

您可以创建所选大小的块缓存,以缓存未压缩的数据。

我们建议这应该是总内存预算的 1/3 左右。剩余的可用内存可以留给 OS(操作系统)页面缓存。为操作系统页面缓存保留大量内存的好处是可以避免内存预算紧张(另请参阅:RocksDB 中的内存使用情况)。

设置块缓存大小要求我们还设置与表相关的选项,例如,如果您希望 LRU 缓存为 :128 MB

auto cache = NewLRUCache(128 << 20);

BlockBasedTableOptions table_options;
table_options.block_cache = cache;

auto table_factory = new BlockBasedTableFactory(table_options);
cf_options.table_factory.reset(table_factory);

压缩

您只能选择主机系统支持的压缩类型。使用压缩是在 CPU、I/O 和存储空间之间进行权衡。

cf_options.compression控制用于第一级的压缩类型。 我们建议使用 LZ4 (),如果不可用,则使用 Snappy ()。n1kLZ4CompressionkSnappyCompression

cf_options.bottommost_compression控制用于关卡的压缩类型。 我们建议使用 ZStandard (),或者如果不可用,则使用 Zlib ()。nthkZSTDkZlibCompression

SST 文件管理器

如果您使用的是闪存,我们建议用户使用丢弃标志挂载文件系统,以提高写入放大。

如果您使用的是闪存和标志,则将采用修剪。如果修整大小非常大,修整可能会暂时导致较长的 I/O 延迟。SST 文件管理器可以限制文件删除速度,以便控制每个修剪的大小。discard

SST文件管理器可以通过设置选项来启用。SST文件管理器的详细信息可以在这里看到:sst_file_manager_impl.h。db_options.sst_file_manager

其他常规选项

下面是一些选项,我们认为设置的值可为常规工作负载实现合理的开箱即用性能。我们没有更改这些选项,因为担心用户将其现有 RocksDB 实例升级到较新版本时会出现不兼容或回归。我们建议用户使用以下设置启动其新的数据库项目:

cf_options.level_compaction_dynamic_level_bytes = true;
opts.max_background_jobs = 6;
options.bytes_per_sync = 1048576;
options.compaction_pri = kMinOverlappingRatio;
table_options.block_size = 16 * 1024;
table_options.cache_index_and_filter_blocks = true;
table_options.pin_l0_filter_and_index_blocks_in_cache = true;
table_options.format_version = <the latest version>;

RocksDB 调优指南

RocksDB是灵活且高度可配置的。另一方面,RocksDB多年来提高了其自适应性。如果您在 SSD 上有正常的应用程序,我们不建议您对 RocksDB 进行微调。我们建议用户使用“设置选项”和“基本优化”,除非您看到明显的性能问题,否则无需对其进行优化。一方面,页面上建议的典型配置,甚至是现成的配置,通常适用于正常工作负载。另一方面,当工作负载或硬件发生变化时,微调的 RocksDB 实例通常容易出现更大的性能回归。用户通常需要不断调整 RocksDB 以保持性能水平。

数据库统计设计

统计信息 – 将其设置为 。您可以随时通过调用 获取人类可读的 RocksDB 统计信息。有关详细信息,请参阅统计信息。rocksdb::CreateDBStatistics()options.statistics.ToString()

压缩和数据库统计信息 – RocksDB 始终保留一些有关压缩和基本数据库运行状态的统计信息。这是查找 LSM 树形状并从那里估计读写性能的最简单方法。有关详细信息,请参阅压实统计信息和数据库状态

性能上下文和 IO 统计信息上下文 性能上下文和 IO 统计信息上下文可以帮助确定一个特定查询中的计数器。

性能瓶颈的可能性。

系统指标

有时,由于系统指标已饱和,性能会受到限制,并且症状有时是意外的。微调 RocksDB 的用户应该能够从操作系统查询系统指标,并确定特定系统指标是否具有高使用率。

磁盘写入带宽。通常,RocksDB 压缩会尝试写入比 SSD 驱动器所能承受的更多内容。症状可能是 RocksDB 的写入停止(请参阅压缩统计信息或统计信息 。或者,由于压缩积压和 LSM 树结构倾斜,它可能会导致读取速度变慢。读取查询的性能上下文有时会显示一次读取读取的 SST 文件过多。如果发生,请从调整压缩开始。StallsSTALL_MICROS
磁盘读取 IOPS。请注意,可以保证合理读取性能的持续读取 IOPS 通常远低于硬件规格。我们鼓励用户通过系统工具(例如 fio)测量他们想要使用的读取 IOPS,并再次检查系统指标。如果 IOPS 已饱和,请从检查压缩开始。还要尝试提高块缓存命中率。有时问题可能是由读取索引,过滤器或大型数据块引起的,并且有不同的处理方法。
中央处理器。CPU 通常是由读取路径引起的,但也可能是由压缩引起的。许多选项都可能产生影响,例如压实、压缩、布隆过滤器、块大小等。
空间。从技术上讲,这不是瓶颈。但是当系统指标不饱和时,性能足够好,我们已经将SSD空间填满了,我们说它受到空间的瓶颈。如果用户希望从主机提供更多数据,压缩和压缩是需要调整的主要领域。有关减少空间使用的指南,请参阅空间调整。

放大因子

我们还用于调整 RocksDB 压缩的术语是放大因子:写入放大、读取放大和空间放大。这些放大因素将用户的逻辑请求的大小与 RocksDB 对底层硬件发出的请求联系起来。有时在调整 RocksDB 时应该优化哪个因素是显而易见的,而有时则不清楚。无论哪种方式,压实都是改变三者之间权衡的关键。

写入放大是写入存储的字节与写入数据库的字节的比率。

例如,如果向数据库写入 10 MB/s,并且观察到磁盘写入速率为 30 MB/s,则写入放大为 3。如果写入放大率较高,则工作负载可能会成为磁盘吞吐量的瓶颈。例如,如果写入放大为 50,最大磁盘吞吐量为 500 MB/s,则数据库可以维持 10 MB/s 的写入速率。在这种情况下,降低写入放大将直接增加最大写入速率。

高写入放大也会缩短闪存寿命。有两种方法可以观察写入放大。首先是通读 的输出。第二种是将磁盘写入带宽(您可以使用)除以数据库写入速率。DB::GetProperty(“rocksdb.stats”, &stats)iostat

读取放大是每个查询的磁盘读取次数。如果您需要阅读 5 页来回答查询,则读取放大为 5。逻辑读取是从缓存(RocksDB 块缓存或操作系统文件系统缓存)获取数据的读取。物理读取由存储设备、闪存或磁盘处理。逻辑读取比物理读取便宜得多,但仍会产生 CPU 成本。您可能能够估计输出中的物理读取速率,但其中包括为查询和压缩完成的读取。iostat

空间放大是磁盘上数据库文件的大小与数据大小的比率。如果将 10MB 放入数据库,而它在磁盘上使用 100MB,则空间放大为 10。您通常需要对空间放大设置硬限制,以免磁盘空间或内存不足。有关减少空间放大的指南,请参阅空间调整。

要了解有关不同数据库算法背景下的三个放大因子的更多信息,

系统指标未饱和时速度缓慢

通常,系统指标不会饱和,但 RocksDB 仍然没有用户想要的那么快。这可能是由于不同的原因。下面是一些常见方案:

压实速度不够快有时SSD远未饱和,但压实仍然赶不上。RocksDB 压缩可能不会尝试最大化资源利用率,并且受配置的压缩并行性的限制。默认值通常较低,通常有改进的余地。请参阅并行度选项。
写入速度不够快虽然写入通常受到写入 I/O 的瓶颈,但在某些情况下,I/O 不够快,RocksDB 无法足够快地写入 WAL 和 memtable。用户可以尝试无序写入、手动 WAL 刷新和/或将相同的数据分片到多个数据库并并行写入它们。
需求更低的读取延迟有时没有什么问题,但用户只是希望读取延迟更低。首先通过性能上下文和 IO 统计信息上下文检查每个查询状态,以确定是 CPU 或 I/O 导致了时间,并相应地尝试选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rocksdb的设置选项和基本调整 的相关文章

  • rocksdb的原子flush

    如果始终启用 WAL xff0c 则无需使用原子刷新选项 启用 WAL 后 xff0c 单个 WAL 文件用于捕获对所有列族的写入 因此 xff0c 恢复的数据库 xff08 通过在崩溃 恢复路径中重播 WAL 日志 xff09 保证在所有
  • rocksdb的设置选项和基本调整

    除了在 RocksDB 上使用基本操作编写代码外 xff0c 您可能还对如何调整 RocksDB 以实现所需的性能感兴趣 在本页中 xff0c 我们将介绍如何进行初始设置 xff0c 该设置应该足以满足许多用例的需求 RocksDB 有许多
  • rocksdb的wal配置

    wal配置 数据库 xff1a xff1a wal dir DBOptions wal dir设置 RocksDB 存储预写日志文件的目录 xff0c 该目录允许将 WAL 存储在与实际数据不同的目录中 数据库 xff1a xff1a WA
  • 【数据库】Redis和RocksDB、levelDB的区别

    区别 Redis 是一个服务 xff0c 独立的进程 xff0c 用户的程序需要与它建立连接才能向它发请求 xff0c 读写数据 RocksDB 和LevelDB 是一个库 xff0c 嵌入在用户的程序中 xff0c 用户程序直接调用接口读
  • std::numeric_limits 出错

    not enough actual parameters for macro max for std numeric limits
  • ubuntu2004/1804安装编译RocksDB

    Linux Ubuntu下载依赖 Upgrade your gcc to version at least 4 8 to get C 11 support Install gflags First try sudo apt get inst
  • RocksDB介绍:一个比LevelDB更彪悍的引擎

    关于LevelDB的资料网上还是比较丰富的 如果你尚未听说过LevelDB 那请稍微预习一下 因为RocksDB实际上是在LevelDB之上做的改进 本文主要侧重在架构上对RocksDB对LevelDB改进的地方做个简单介绍并添加一些个人的
  • Windows下 VS2015编译RocksDB

    VS2015编译RocksDB RocksDB 是一个来自 facebook 的可嵌入式的支持持久化的 key value 存储系统 也可作为 C S 模式下的存储数据库 但主要目的还是嵌入式 RocksDB 基于 LevelDB 构建 1
  • MySQL · 特性分析 · MyRocks简介

    http mysql taobao org monthly 2016 08 03 RocksDB是facebook基于LevelDB实现的 目前为facebook内部大量业务提供服务 经过facebook大量工作 将RocksDB作为MyS
  • CODIS原理 之 数据迁移流程[2.X]

    CODIS原理 之 数据迁移流程 2 X 分类 源码剖析设计思路 1173 0 作者 邹祁峰 邮箱 Qifeng zou job hotmail com 博客 http blog csdn net qifengzou 日期 2016 08
  • Rocksdb 代码学习 写流程1(WriteBatch写,WriterThead调度Writer)

    1 几个需要使用的相关类 1 Slice 主要用来装数据的 就两个成员变量data size 就是用装key和value的值 长度 以及一些处理函数 class Slice public Create an empty slice Slic
  • MariaDB 10.2 和 Openssl 1.1.0e 出现“不完整类型 MD5_CONTEXT”错误

    我无法在 CentOS 7 中构建启用 RocksDB 的 MariaDB 10 2 它有以下编译错误 root mariadb 10 2 mysys ssl my md5 cc In function void md5 result MD
  • Rocksdb.errors.RocksIOError:IO错误:锁定文件时:sample.db/LOCK:资源暂时不可用

    如何删除rocksDB上的锁 我尝试运行以下代码但出现以下错误 Running on http 127 0 0 1 5000 Press CTRL C to quit Restarting with stat Traceback most
  • 将键值数据库与 Spark 集成

    我无法理解 Spark 如何与存储交互 我想创建一个从 RocksDB 数据库 或任何其他键值存储 获取数据的 Spark 集群 然而 此时此刻 我能做的最好的事情就是将整个数据集从数据库获取到每个集群节点的内存中 例如映射到映射中 并从该
  • Apache Flink 检查点卡住

    我们正在运行一个 ListState 介于 300GB 到 400GB 之间的作业 并且有时该列表可能会增加到数千 在我们的用例中 每个项目都必须有自己的 TTL 因此我们使用 S3 上的 RocksDB 后端为此 ListState 的每
  • Kafka Streams - 低级处理器 API - RocksDB TimeToLive(TTL)

    我正在尝试使用低级处理器 API 我正在使用处理器 API 对传入记录进行数据聚合 并将聚合记录写入 RocksDB 但是 我想保留在rocksdb中添加的记录仅在24小时内处于活动状态 24 小时后 记录应被删除 这可以通过更改 ttl
  • RocksDb sst 文件的 GUI 查看器

    我正在与 Kafka 合作 将数据保存到rocksdb 中 现在我想看看 Kafka 创建的数据库键和值 我下载了 FastNoSQL 并尝试但失败了 该文件夹包含 sst 文件 日志文件 当前文件 身份文件 锁定文件 日志文件 清单文件
  • ROCKSDB 由于rocksdb_max_row_locks 无法获取锁

    我尝试将 CSV 加载到 Rocksdb 数据库中 但失败并显示以下错误 Got error 10 Operation aborted Failed to acquire lock due to rocksdb max row locks
  • 我可以将 flink RocksDB 状态后端与本地文件系统一起使用吗?

    我正在探索使用 FlinkrocksDb 状态后端 文档似乎暗示我可以使用常规文件系统 例如 file data flink checkpoints 但代码 javadoc 仅在此处提到 hdfs 或 s3 选项 我想知道是否可以将本地文件
  • Flink - 无法从检查点恢复

    我使用一个作业管理器和两个任务管理器在 kubernetes 上运行集群 我通过在作业运行时杀死一个任务管理器 Pod 来测试检查点机制 我在作业管理器和重新启动的任务管理器上遇到以下异常 工作经理例外 java lang Exceptio

随机推荐

  • CEF(Chromium Embedded Framework)使用说明书

    CEF使用说明书 目录 1 前言 1 1 CEF的作用 1 2 CEF的下载和编译 1 3 CEF结构 1 3 1 CEF进程和窗口之间的结构关系 1 3 2 Renderer进程的实现结构 1 3 3 browser进程的实现结构 1 4
  • Error处理: “非法字符: \65279”的解决办法

    从Eclipse中复制项目到Android源码环境中 xff0c 编译时遇到 非法字符 xff1a 65279 的报错 出错内容是 xff1a java 1 非法字符 xff1a 65279 javac xfeff package com
  • 手把手教你VMware虚拟机详细安装Debian 11 图文教程

    目录 一 准备工作 二 创建安装Debain的虚拟机 三 安装 Debian 11 过程 一 准备工作 1 虚拟机软件 VMware 16 https www vmware com go getworkstation win 2 Debia
  • Python3利用Pandas类库生成多Sheet的Excel

    一 Pandas Pandas 是 Python 语言的一个扩展程序库 xff0c 可以对各种数据进行运算操作 xff0c 比如归并 再成形 选择 xff0c 还有数据清洗和数据加工特征 官方地址 xff1a https pandas py
  • Debian 11 安装并开启SSH服务实现允许root用户使用SecureCRT远程登录

    虚拟机安装完成Debian11系统后 xff0c 系统默认是没有安装SSH服务 xff0c 如需要开启远程登录则需要安装相应的服务 登录系统后切换至Root用户身份并执行下面相关操作 一 更新Debian系统数据软件源 apt get up
  • Java利用poi 3.9对excel进行读写操作的工具类支持多Sheet

    一 什么是POI POI全称PoorObfuscation Implementation xff0c 是Apache组件的一个开源项目 xff0c 可以对微软的Office一系列办公软件进行读写操作 官方下载地址 xff1a https p
  • JAVA利用POI scratchpad 5.2.1 将Word文档doc格式转换成HTML 格式 含文档里面图片

    一 POM文件 lt dependency gt lt groupId gt org apache poi lt groupId gt lt artifactId gt poi scratchpad lt artifactId gt lt
  • Centos7搭建安装freeswitch1.6

    前言 xff1a 请各大网友尊重本人原创知识分享 xff0c 谨记本人博客 xff1a 南国以南i 介绍 xff1a freeswitch可集成ASR 语音识别 和TTS 文本转语音 创建智能电话机器人和用户通话 xff0c 可用于问卷调查
  • 树莓派安装远程桌面(XRDP)服务

    首先试用了一下VNC xff0c 发现质量惨不忍睹 xff0c 明明是在局域网内啊 于是打算安装XRDP服务 xff0c 网上各种文章都有 xff0c 有的说需要先安装tightVNC 参考了 xff1a http shumeipai nx
  • 关于ubuntu20.04中安装ros的一些package时出现“unable to locate”的问题记录

    在运行ros仿真时出现如下错误 xff1a 提示缺少 gmapping的包 xff0c 直接下载包 xff1a sudo apt get install ros noetic gmapping 结果提示 xff1a Unable to lo
  • Linux配置篇 | Ubuntu配置apt镜像源

    以下以 Ubuntu18 04 LTS 为例 xff0c 也适用于 Ubuntu 其他版本 一 修改apt镜像源 xff08 1 xff09 备份apt配置文件 xff1a cp etc apt sources list etc apt s
  • 多种缺陷管理软件简介

    缺陷管理工具 xff1a 1 Bugzilla 2 Bugfree 3 TestDirector xff08 Quality Center xff09 4 ClearQuest 5 JIRA 6 Mantis 7 Bugzero 8 Bug
  • 线程与进程之间的共享资源

    线程和进程之间的共享资源方式 进程之间的共享资源的方式 1 消息队列 2 共享内存 3 管道 xff08 有名管道 无名管道 xff09 4 信号 5 套接字 同一个进程的不同线程之间可以共享的资源 1 堆 xff0c 由于堆是在进程启动的
  • Redis基本知识

    总结 基础知识 基础命令 1 xff09 测试Redis性能 2 xff09 Redis沟通命令 xff0c 查看状态 解释 xff1a 输入ping xff0c redis给我们返回PONG xff0c 表示redis服务运行正常 3 x
  • redis的配置文件

    回顾 redis的配置文件 1 redis安装完成之后 xff0c 在redis的根沐会提供一个配置文件 redis conf xff1b redis服务可以参考配置文件中的参数进行运行 xff1b 只有启动redis服务器指定使用的配置文
  • VSCode 配置 C++ 环境

    1 1 MinGW 编译套件 MinGW 提供了一套简单方便的 Windows 下的基于 GCC 程序开发环境 xff0c 并且 收集了一系列免费的 Windows 使用的头文件和库文件 它整合了 GNU 的工具集 xff0c 特别是 GN
  • C++中string与char*相互转换

    C 43 43 中string与char 相互转换 一 string转换为char 有3中方法 xff1a 1 data string str 61 34 good boy 34 const char p 61 str data 2 c s
  • Python hex()十六进制转换

    Python hex 函数用于将整数转换为以 0x 为前缀的小写十六进制字符串 xff1a print hex 255 decimal十进制 print hex 0b111 binary二进制 print hex 0o77 octal八进制
  • rocksdb的原子flush

    如果始终启用 WAL xff0c 则无需使用原子刷新选项 启用 WAL 后 xff0c 单个 WAL 文件用于捕获对所有列族的写入 因此 xff0c 恢复的数据库 xff08 通过在崩溃 恢复路径中重播 WAL 日志 xff09 保证在所有
  • rocksdb的设置选项和基本调整

    除了在 RocksDB 上使用基本操作编写代码外 xff0c 您可能还对如何调整 RocksDB 以实现所需的性能感兴趣 在本页中 xff0c 我们将介绍如何进行初始设置 xff0c 该设置应该足以满足许多用例的需求 RocksDB 有许多