首页 > 如何对 Rocksdb以及类似存储引擎社区 提出 有效的性能问题?

如何对 Rocksdb以及类似存储引擎社区 提出 有效的性能问题?

性能 是rocksdb的优点,活跃的社区十分欢迎大家对各自使用rocksdb 过程中性能相关的疑惑点进行提问。提问的时候如果能够提供更多,更详细的信息 是可以增加快速得到恢复回复的概率。当然,性能是一个非常广泛且有巨量影响因素的话题,单纯从一个简单的描述是无法进行更进一步的性能问题讨论的。

社区从两方面给出了如下 性能相关issue的建议(当然有经验的同学这一些描述即可不用在意),这一些建议也是我们存储产品对内,对外展示性能的一个模版,个人觉得还是比较受用。

1. 问题描述

  1. 哪一种operation 性能较差?Get(), Put(), or Iterator ?

  2. 如果是其中一种workload,那么这个场景下的哪一项指标(qps , p50,p99,p9999…) 不满足你的预期?你的预期的指标是多少?

    • 吞吐: 如果是吞吐的问题,你使用的压测线程数是多少
    • 平均延时问题
    • 长尾延时问题
  3. 你使用的是哪一种存储介质?

    • SSD
    • HDD
    • RAID-…(0,1,10…)
    • ramfs/tmpfs
    • HDFS 或者 其他的远端存储

2. DB配置 和 DB状态 情况

  1. rocksdb启动情况:rocksdb实例的数量,多个还是单db? 每一个DB的大小?每一个DB实例使用了多少CF?

  2. 使用的rocksdb 版本

  3. 编译选项?如果使用的是make,可以直接将 make之后的 make_config.mk分享出来。如果无法提供全量的make_config.mk信息,则按照如下问题做一个回复:

    a. 哪一个平台 ? Linux, Windows, OS X, etc…/

    b. 使用的是哪一种分配器? jemalloc, tcmalloc, glibc malloc …?如果是 jemalloc, 可以在make_config.mk中看到JEMALLOC=1的选项。如果是tcmalloc,可以在PLATFORM_LDFLAGS 中找到 -ltcmalloc的编译选项。

    在这里插入图片描述

    c. 是否打开了 SSE指令支持的crc校验?如果有的话,这条信息会在rocksdb的LOG中打印,类似Fast CRC32 supported: 1 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L7ul6zlg-1605015582028)(/Users/zhanghuigui/Library/Application Support/typora-user-images/image-20201110183805822.png)]

    d. 是否支持 并打开了linux的 预分配选项fallocate

    可以通过查看PLATFORM_CXXFLAGS或者 PLATFORM_CCFLAGS选项 中是否包含DROCKSDB_FALLOCATE_PRESENT配置

  4. 你使用的rocksdb 配置。如果能够提供rocksdb的options file是最好的,一般这个文件会在你运行rocksdb相关应用的db目录中,以OPTIONS-xxx命名。或者 也能够将rocksdb LOG文件中的头部 拷贝出来。

    如果无法提供全量的配置文件,可以回复以下的关键配置即可(未设置,即是默认的配置):

    a. write_buffer_size – memtable的大小,默认64M

    b. level0_file_num_compaction_trigger – L0触发compaction的sst文件个数,默认4个

    c. target_file_size_base – sst文件大小,默认64M

    d. compression – 压缩算法,默认snappy

    e. compaction_style – compaction策略,默认 leveled

    f. 如果配置了leveled compaction 策略:

    • max_bytes_for_level_base – L1 的最大容量,默认256M
    • max_bytes_for_level_multiplier – 每一层大小的倍数,比如size(Ln) =size(Ln-1) * max_bytes_for_level_multiplier, 默认是10
    • level_compaction_synamic_level_bytes 是否开启动态调整每一层大小的配置

    g. 如果配置了 universal compaction策略:

    • size_ratio
    • max_size_amplification_percent

    h. block_cache_size block_cache 的大小

    i. Bloomfilter 相关的配置

    j. 其他并不 通用的配置,如果你更改了,也请贴上来。

  5. LSM-tree 结构情况

    一般可以通过应用程序中加入代码, DB::GetProperty(“rocksdb.stats”)。

    另一种方式 是可以通过命令ldb --manifest_dump指定db目录下的MANIFEST-xxx文件

  6. 当发生性能问题时 磁盘的IO情况。这里可以根据个人习惯进行io情况的统计, 一般使用iostat -xdt 1

  7. workload情况

    a. key + value size

    b. 读/写 百分比

    c. 如何删除数据

    d. 。。。

  8. 如果方便的话,分享一下对应的LOG文件,LOG文件一般在db目录之下,以LOG或者 LOG.old.xxx

  9. 硬件指标。如果没有办法给出精确的硬件数据,那么给出基本的内存 以及 CPU核数 的使用情况会比较方便,也很有用。

  10. 如果能够提供 复现问题的方法/代码 以及复现步骤,对社区精确解决性能问题会很有帮助。

更多相关:

  • Ctrl+Shift+X 搜索AutoScssStruct4Vue   如上图直接右键-autoScssStruct(你都不需要聚焦到template节点) 直接就给你妥妥的把SCSS代码写好了,如果你还是嫌弃点右键太麻烦了太累了(泥马~这也太懒了吧,要不要AI帮你写代码?)我们还可以设置快捷键Ctrl+Alt+S,自动插入结构...

  • 我们在使用vim打开一个文件的时候,经常会弹出下面的界面 为什么会出现这个界面呢 用vim编辑文件(如这里的test.txt)时,系统会自动产生一个文件叫.test.txt.swp.如果正常退出,此文件会被自动删去.如果上次非正常退出,如果再编辑它,系统会首先查.test.txt.swp 是否存在,如果存在,就会问你如何处理....

  • P80  引用自己创建的模块 如果你使用的是Linux/BSD shell,那么按Ctrl-d退出提示符。如果是在Windows命令行中,则按Ctrl-z再按Enter。   转载于:https://www.cnblogs.com/linzh104/p/4076852.html...

  • Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注...

  • ue4商城资源 Car Configurator Template 汽车配置器模板 ue4商城资源 Car Configurator Template 汽车配置器模板 Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Car Configurator Template 4...

  • 一直在尝试一些写代码方便,阅读代码也很方便的工具,因为使用的是Mac,所以阅读源码上面sourceInsight就没办法用了。 从vscode – sublime – clion 想要可配置性强一点,软件轻一点,也能提供足够的便捷操作,不论是写代码还是快速索引源码,都希望在检索上面节省足够的时间。 vscode 和 sublime...

  • 每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译。出现问题,还得重新回到windows端,这个过程太耗费时间。 vim作为唯一能够和windos 下的source insight一争高低的linux端的源码阅读器,只要将它短时间内合理利用...

  • 使用ubuntu(18.04) 作为软路由器连接互联网 背景: 最近要用ubuntu机器作为中继路由,需要配置一下,但是内网外网网上找了一圈,五花八门的,照着做没有一个靠谱的,遇到的问题也没有任何说明,遂写一篇教程以记录一下 功能说明: 简单来说,就是用其他机器的网络上互联网, 比如可以用其他机器的wifi上网等等场景 示意...

  • Spring-Boot 攻略 day01 spring-boot 一. 基本配置加运行 1. 导入配置文件(pom.xml 文件中) org.springframework.bootspring-boot-starter-parent

  • 文章目录概览1. UDB 架构2. UDB 表格式3. Rocksdb:针对flash存储优化过的第三方库3.1 Rocksdb架构3.2 为什么选择Rocksdb4. MyRocks / Rocksdb 开发历程4.1 设计目标4.2 性能挑战4.2.1 降低CPU的消耗4.2.2 降低range-scan 的延时消耗4.2.3 磁...

  • Compaction过程中 产生大量读I/O 的背景 项目中因大value 需求,引入了PingCap 参考Wisckey 思想实现的key-value分离存储 titan, 使用过程中因为有用到Rocksdb本身的 CompactionFilter功能,所以就直接用TitanDB的option 传入了compaction filt...

  • 简单记录一些 在linux下 统计进程内部函数运行耗时的统计工具,主要是用作性能瓶颈分析。当然以下工具除了pstack功能单一之外,其他的工具都非常强大,这里仅仅整理特定场景的特定用法,用作协同分析。 以下工具需要追踪具体的进程,如果想要打印信息更全,建议编译的时候将符号信息都编译到二进制文件之中,-g选项 strace str...

  • 想要自己随时随地写一写rocksdb的代码,并且快速测试,但是公司的物理机登陆过于麻烦,想要验证功能的话其实在自己的电脑就完全可以了。 安装 brew install rocksdb,默认二进制文件安装在/usr/local/bin在~/.bashrc或者自己正在使用的shell的rc文件中 加入rocksdb的bin文件所在路径...