如何询问性能相关的问题?
性能是RocksDB的一个优势。如果您看到RocksDB出奇地慢,或者想知道是否还有显著的改进空间,欢迎您提出问题。让你问性能相关的问题时,提供更多的信息会增加您更快得到答案的机会。在很多情况下,人们不能从一个简单的症状描述中看出很多。以下问题的答案通常很有帮助:1.是Get()、迭代器还是写的问题?2.要么1的答案是读,要么是写,哪个度量是您意想不到的?以及未知度归的值。 i.吞吐量。对于这个问题,您使用了多少线程? ii.平均延迟。 iii.延迟异常值。3.您的存储介质是什么? i. SSD固态盘 ii. 单个硬盘 iii.硬盘阵列 iv. ramfs / tmpfs 随机存取文件/临时存储文件 v. HDFS或其他远程存储? 更多关于您的配置和DB状态的信息将会很有帮助: * 设置:您是在单个服务中使用多个RocksDB实例,还是在单个服务中使用一个实例? 您期望的DB大小是多少?每个DB实例使用多少个列族? * 您正在使用的RocksDB发行版。 * 构建的旗帜。如果您正在使用make,提供信息的最佳和最简单的方法是共享make_config。运行make后mk。如果你不能提供完整的资料,以下是一些与工作表现有关的资料: * 什么平台? Linux、Windows、OS X等。 * 您正在使用哪个内存分配器? jemalloc, tcmalloc, glibc malloc,还是其他?如果是jemalloc,则make_config.mk应该显示JEMALLOC=1。如果是tcmalloc,可以在PLATFORM_LDFLAGS中找到 "-ltcmalloc" * 是否支持并开启使用SSE指令计算CRC? 此信息将打印在信息日志文件的头部,如"支持Fast CRC32: 1" * 是否支持并打开fallocate? * 正在使用的RocksDB选项。您可以提供您的选项文件。您的选项文件位于DB目录下,命名为OPTIONS-xxxxxx。或者,您还可以复制信息日志文件的头部分,该文件可以在DB目录下找到,通常名为log或log.old.xxxxx。 选项文件通常在头部打印出RocksDB选项。如果您不能回答这两个问题,告诉我们您的一些关键选项也会有帮助(如果您从来没有设置过,您可以告诉我们默认) * write buffer size * level0_file_num_compaction_trigger * target_file_size_base * compression * compaction style * If leveled compaction (如果是级别压缩): * max_bytes_for_level_base * max_bytes_for_level_multiplier * level_compaction_dynamic_level_bytes * If universal compaction (如果是通用压缩): * size_ratio * max_size_amplification_percent * block cache size * Bloom filter setting * Any uncommon options you set 您设置的任何不寻常选项 * LSM-Tree结构。您可以使用属性"rocksdb.stats"调用DB::GetProperty()来生成LSM-Tree汇总报告。 另一种查找LSM-Tree结构的方法是在清单文件上使用"ldb --mainfest_dump",清单文件是DB目录下的manifest -xxxxx文件。 * 当问题发生时,磁盘I/O统计信息。您可以使用您喜欢的命令,我通常使用的命令是 "iostat -kxt 1" * 您的工作负载特征: * 键值大小 * 读写是否有尖刺 * 是否以及如何删除数据? * 如果可能,共享您的信息日志文件。默认情况下,它们位于您的DB目录下,名为LOG 和 LOD.old.xxxxxx * 硬件设置。我们知道,在某些情况下,具体的硬件设置是不能共享的,但即使您能告诉我们内存和内核的数量在哪个范围或数量级,这也是有帮助的。 * 如果有一种方法可以很容易地再现性能问题,那么再现指令将很有帮助。