如何询问性能相关的问题?

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