https://www.bookstack.cn/read/TiDB-4.0/storage-engine-titan-configuration.md

开启 Titan

Titan 对 RocksDB 兼容,也就是说,使用 RocksDB 存储引擎的现有 TiKV 实例可以直接开启 Titan。

  • 方法一:如果使用 TiUP 部署的集群,开启的方法是执行 tiup cluster edit-config ${cluster-name} 命令,再编辑 TiKV 的配置文件。编辑 TiKV 配置文件示例如下:

    1. tikv:
    2. rocksdb.titan.enabled: true

    重新加载配置,同时也会在线滚动重启 TiKV:

    1. tiup cluster reload ${cluster-name} -R tikv

    具体命令,可参考通过 TiUP 修改配置参数

  • 方法二:直接编辑 TiKV 配置文件开启 Titan(生产环境不推荐)。

    1. [rocksdb.titan]
    2. enabled = true

开启 Titan 以后,原有的数据并不会马上移入 Titan 引擎,而是随着前台写入和 RocksDB compaction 的进行,逐步进行 key-value 分离并写入 Titan。可以通过观察 TiKV Details - Titan kv - blob file size 监控面版确认数据保存在 Titan 中部分的大小。

如果需要加速数据移入 Titan,可以通过 tikv-ctl 执行一次全量 compaction,具体参考手动 compact

警告:

在不开启 Titan 功能的情况下,RocksDB 无法读取已经迁移到 Titan 的数据。如果在打开过 Titan 的 TiKV 实例上错误地关闭了 Titan(误设置 rocksdb.titan.enabled = false),启动 TiKV 会失败,TiKV log 中出现 You have disabled titan when its data directory is not empty 错误。如需要关闭 Titan,参考关闭 Titan 一节。

相关参数介绍

使用 TiUP 调整参数,请参考修改配置参数

  • Titan GC 线程数。

    当从 TiKV Details - Thread CPU - RocksDB CPU 监控中观察到 Titan GC 线程长期处于满负荷状态时,应该考虑增加 Titan GC 线程池大小。

    1. [rocksdb.titan]
    2. max-background-gc = 1
  • value 的大小阈值。

    当写入的 value 小于这个值时,value 会保存在 RocksDB 中,反之则保存在 Titan 的 blob file 中。根据 value 大小的分布,增大这个值可以使更多 value 保存在 RocksDB,读取这些小 value 的性能会稍好一些;减少这个值可以使更多 value 保存在 Titan 中,进一步减少 RocksDB compaction。

    1. [rocksdb.defaultcf.titan]
    2. min-blob-size = "1KB"
  • Titan 中 value 所使用的压缩算法。Titan 中压缩是以 value 为单元的。

    1. [rocksdb.defaultcf.titan]
    2. blob-file-compression = "lz4"
  • Titan 中 value 的缓存大小。

    更大的缓存能提高 Titan 读性能,但过大的缓存会造成 OOM。建议在数据库稳定运行后,根据监控把 RocksDB block cache (storage.block-cache.capacity) 设置为 store size 减去 blob file size 的大小,blob-cache-size 设置为 内存大小 * 50% 再减去 block cache 的大小。这是为了保证 block cache 足够缓存整个 RocksDB 的前提下,blob cache 尽量大。

    1. [rocksdb.defaultcf.titan]
    2. blob-cache-size = 0
  • 当一个 blob file 中无用数据(相应的 key 已经被更新或删除)比例超过以下阈值时,将会触发 Titan GC 。

    1. discardable-ratio = 0.5

    将此文件有用的数据重写到另一个文件。这个值可以估算 Titan 的写放大和空间放大的上界(假设关闭压缩)。公式是:

    写放大上界 = 1 / discardable_ratio

    空间放大上界 = 1 / (1 - discardable_ratio)

    可以看到,减少这个阈值可以减少空间放大,但是会造成 Titan 更频繁 GC;增加这个值可以减少 Titan GC,减少相应的 I/O 带宽和 CPU 消耗,但是会增加磁盘空间占用。

  • 以下选项限制 RocksDB compaction 的 I/O 速率,以达到在流量高峰时,限制 RocksDB compaction 减少其 I/O 带宽和 CPU 消耗对前台读写性能的影响。

    当开启 Titan 时,该选项限制 RocksDB compaction 和 Titan GC 的 I/O 速率总和。当发现在流量高峰时 RocksDB compaction 和 Titan GC 的 I/O 和/或 CPU 消耗过大,可以根据磁盘 I/O 带宽和实际写入流量适当配置这个选项。

    1. [rocksdb]
    2. rate-bytes-per-sec = 0

关闭 Titan(实验功能)

通过设置 rocksdb.defaultcf.titan.blob-run-mode 参数可以关闭 Titan。blob-run-mode 可以设置为以下几个值之一:

  • 当设置为 normal 时,Titan 处于正常读写的状态。
  • 当设置为 read-only 时,新写入的 value 不论大小均会写入 RocksDB。
  • 当设置为 fallback 时,新写入的 value 不论大小均会写入 RocksDB,并且当 RocksDB 进行 compaction 时,会自动把所碰到的存储在 Titan blob file 中的 value 移回 RocksDB。

当需要关闭 Titan 时,可以设置 blob-run-mode = "fallback",并通过 tikv-ctl 执行全量 compaction。此后通过监控确认 blob file size 降到 0 以后,可以更改 rocksdb.titan.enabled = false 并重启 TiKV。

警告:

关闭 Titan 是实验性功能,非必要不建议使用。

Level Merge(实验功能)

TiKV 4.0 中 Titan 提供新的算法提升范围查询性能并降低 Titan GC 对前台写入性能的影响。这个新的算法称为 Level Merge。Level Merge 可以通过以下选项开启:

  1. [rocksdb.defaultcf.titan]
  2. level-merge = true

开启 Level Merge 的好处如下:

  • 大幅提升 Titan 的范围查询性能。
  • 减少了 Titan GC 对前台写入性能的影响,提升写入性能。
  • 减少 Titan 空间放大,减少磁盘空间占用(默认配置下的比较)。

相应地,Level Merge 的写放大会比 Titan 稍高,但依然低于原生的 RocksDB。

[转帖]Titan 配置的更多相关文章

  1. [转帖]nginx配置ssl加密(单/双向认证、部分https)

    nginx配置ssl加密(单/双向认证.部分https) https://segmentfault.com/a/1190000002866627   nginx下配置ssl本来是很简单的,无论是去认证 ...

  2. [转帖]IIS7配置Gzip压缩

    IIS7配置Gzip压缩 https://www.cnblogs.com/coce/p/6804373.html   II7中自带了gzip功能,理论上应该比ii6配置起来应该简单一点,但是容易出的问 ...

  3. [转帖]nginx配置ssl证书实现https访问

    https://www.cnblogs.com/tianhei/p/7726505.html 今天就是如此处理的 感觉挺不错的. 一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址 ...

  4. 配置jboss4.2.3GA启用SSL

    转帖保存 配置jboss的HTTP请求走SSL(HTTPS协议) l         生成keystore 文件 用keytool生成server.keystore文件: 进入命令行 C:\Docum ...

  5. YIi 权限管理和基于角色的访问控制

    验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...

  6. Yii - 验证和授权(Authentication and Authorization)

    1. 定义身份类 (Defining Identity Class)  为了验证一个用户,我们定义一个有验证逻辑的身份类.这个身份类实现[IUserIdentity] 接口.不同的类可能实现不同的验证 ...

  7. sublime text3前端常用插件

    安装Package Control 在安装插件之前,需要让sublime安装Package Control.打开Sublime Text的控制台,快捷键ctrl + ~,在控制台中输入以下代码. im ...

  8. sublime Text3 前端常用插件

    sublime Text3 前端常用插件 - File Switching (文件切换) --- Sublime Text提供了一个非常快速的方式来打开新的文件.只要按下Ctrl+ P并开始输入你想要 ...

  9. [知识图谱] 环境配置:Java8 + Maven3 + HBase + Titan

    1.Java Java8安装配置 2.Maven Linux下的Maven安装与配置 3.Hbase 官方安装教程:http://s3.thinkaurelius.com/docs/titan/1.0 ...

  10. Apache2.4权限配置(原创帖-转载请注明出处)

    ==================说在前面的话================= 1:这次实验使用的php项目是Discuz,Discuz的安装请参照:http://www.cnblogs.com/ ...

随机推荐

  1. mac 编译php 7.2+扩展编译 的坑史(不是swoole的坑),php的一个坑,这个坑还没填满,问题根源还没有找到 !

    目前网上找到的文章全是php 7.1,但是brew己经没有7.1了,最新是7.2,这让我怀疑是不是我的版本问题,导致swoole编译时总是编译不过去.后来发现任何扩展都编不过去,提示: Configu ...

  2. 初窥门径代码起手,Go lang1.18入门精炼教程,由白丁入鸿儒,首次运行golang程序EP01

    前文再续,书接上回,前一篇:兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00,我们搭建起了Go lang1.18的开发 ...

  3. 容器、Docker、虚拟机,别再傻傻分不清

    摘要:容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源.尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知. 容器技术起源于Linux,是一种内核 ...

  4. 华为亮相KubeCon EU 2023 新云原生开源项目Kuasar推动“云上演进”

    摘要:协力同行.拥抱开源,解放数字生产力,为社会和行业带来更多价值. 在数字时代,如果说企业是一艘巨大的货船,那么云原生则为企业的每一个业务.每一个应用提供了标准化的集装箱,摆脱笨重的底层桎梏,打造新 ...

  5. 关于单元测试的那些事儿,Mockito 都能帮你解决

    摘要:相信每一个程序猿在写Unit Test的时候都会碰到一些令人头疼的问题:如何测试一个rest接口:如何测试一个包含客户端调用服务端的复杂方法:如何测试一个包含从数据库读取数据的复杂方法...这些 ...

  6. presto是如何保证作业内存不会发生冲突和溢出

    摘要:presto计算引擎作为一个纯内存计算引擎,是如何保证计算过程不会发生作业内存溢出的?本篇文章会进行深入的学习和分析. 本文分享自华为云社区<presto是如何保证作业内存不会发生冲突和溢 ...

  7. Solon Aop 特色开发(2)注入或手动获取Bean

    Solon,更小.更快.更自由!本系列专门介绍Solon Aop方面的特色: <Solon Aop 特色开发(1)注入或手动获取配置> <Solon Aop 特色开发(2)注入或手动 ...

  8. Mapper that could not be found

    现象1 mapper 资源扫不到 resources 建的是 目录 ,不是 package 所以如果直接 a.b 的方式创建,会扫描不到 mapper.xml 文件 现象2 缺少配置文件 HisDru ...

  9. 【算法学习笔记】区间DP

    基本的知识点引用自 OI wiki,感谢社区的帮助 什么是区间 DP? 区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系.令 ...

  10. AtCoder Beginner Contest 189 Personal Editorial

    第一次参加 AtCoder 的比赛,感觉还挺简单. 比赛链接:https://atcoder.jp/contests/abc189 A - Slot // Author : RioTian // Ti ...