db_options.cc 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #include "options/db_options.h"
  6. #include <cinttypes>
  7. #include "db/version_edit.h"
  8. #include "logging/logging.h"
  9. #include "port/port.h"
  10. #include "rocksdb/cache.h"
  11. #include "rocksdb/env.h"
  12. #include "rocksdb/file_system.h"
  13. #include "rocksdb/sst_file_manager.h"
  14. #include "rocksdb/wal_filter.h"
  15. namespace ROCKSDB_NAMESPACE {
  16. ImmutableDBOptions::ImmutableDBOptions() : ImmutableDBOptions(Options()) {}
  17. ImmutableDBOptions::ImmutableDBOptions(const DBOptions& options)
  18. : create_if_missing(options.create_if_missing),
  19. create_missing_column_families(options.create_missing_column_families),
  20. error_if_exists(options.error_if_exists),
  21. paranoid_checks(options.paranoid_checks),
  22. env(options.env),
  23. fs(options.file_system),
  24. rate_limiter(options.rate_limiter),
  25. sst_file_manager(options.sst_file_manager),
  26. info_log(options.info_log),
  27. info_log_level(options.info_log_level),
  28. max_file_opening_threads(options.max_file_opening_threads),
  29. statistics(options.statistics),
  30. use_fsync(options.use_fsync),
  31. db_paths(options.db_paths),
  32. db_log_dir(options.db_log_dir),
  33. wal_dir(options.wal_dir),
  34. max_subcompactions(options.max_subcompactions),
  35. max_background_flushes(options.max_background_flushes),
  36. max_log_file_size(options.max_log_file_size),
  37. log_file_time_to_roll(options.log_file_time_to_roll),
  38. keep_log_file_num(options.keep_log_file_num),
  39. recycle_log_file_num(options.recycle_log_file_num),
  40. max_manifest_file_size(options.max_manifest_file_size),
  41. table_cache_numshardbits(options.table_cache_numshardbits),
  42. wal_ttl_seconds(options.WAL_ttl_seconds),
  43. wal_size_limit_mb(options.WAL_size_limit_MB),
  44. max_write_batch_group_size_bytes(
  45. options.max_write_batch_group_size_bytes),
  46. manifest_preallocation_size(options.manifest_preallocation_size),
  47. allow_mmap_reads(options.allow_mmap_reads),
  48. allow_mmap_writes(options.allow_mmap_writes),
  49. use_direct_reads(options.use_direct_reads),
  50. use_direct_io_for_flush_and_compaction(
  51. options.use_direct_io_for_flush_and_compaction),
  52. allow_fallocate(options.allow_fallocate),
  53. is_fd_close_on_exec(options.is_fd_close_on_exec),
  54. advise_random_on_open(options.advise_random_on_open),
  55. db_write_buffer_size(options.db_write_buffer_size),
  56. write_buffer_manager(options.write_buffer_manager),
  57. access_hint_on_compaction_start(options.access_hint_on_compaction_start),
  58. new_table_reader_for_compaction_inputs(
  59. options.new_table_reader_for_compaction_inputs),
  60. random_access_max_buffer_size(options.random_access_max_buffer_size),
  61. use_adaptive_mutex(options.use_adaptive_mutex),
  62. listeners(options.listeners),
  63. enable_thread_tracking(options.enable_thread_tracking),
  64. enable_pipelined_write(options.enable_pipelined_write),
  65. unordered_write(options.unordered_write),
  66. allow_concurrent_memtable_write(options.allow_concurrent_memtable_write),
  67. enable_write_thread_adaptive_yield(
  68. options.enable_write_thread_adaptive_yield),
  69. write_thread_max_yield_usec(options.write_thread_max_yield_usec),
  70. write_thread_slow_yield_usec(options.write_thread_slow_yield_usec),
  71. skip_stats_update_on_db_open(options.skip_stats_update_on_db_open),
  72. skip_checking_sst_file_sizes_on_db_open(
  73. options.skip_checking_sst_file_sizes_on_db_open),
  74. wal_recovery_mode(options.wal_recovery_mode),
  75. allow_2pc(options.allow_2pc),
  76. row_cache(options.row_cache),
  77. #ifndef ROCKSDB_LITE
  78. wal_filter(options.wal_filter),
  79. #endif // ROCKSDB_LITE
  80. fail_if_options_file_error(options.fail_if_options_file_error),
  81. dump_malloc_stats(options.dump_malloc_stats),
  82. avoid_flush_during_recovery(options.avoid_flush_during_recovery),
  83. allow_ingest_behind(options.allow_ingest_behind),
  84. preserve_deletes(options.preserve_deletes),
  85. two_write_queues(options.two_write_queues),
  86. manual_wal_flush(options.manual_wal_flush),
  87. atomic_flush(options.atomic_flush),
  88. avoid_unnecessary_blocking_io(options.avoid_unnecessary_blocking_io),
  89. persist_stats_to_disk(options.persist_stats_to_disk),
  90. write_dbid_to_manifest(options.write_dbid_to_manifest),
  91. log_readahead_size(options.log_readahead_size),
  92. sst_file_checksum_func(options.sst_file_checksum_func) {
  93. }
  94. void ImmutableDBOptions::Dump(Logger* log) const {
  95. ROCKS_LOG_HEADER(log, " Options.error_if_exists: %d",
  96. error_if_exists);
  97. ROCKS_LOG_HEADER(log, " Options.create_if_missing: %d",
  98. create_if_missing);
  99. ROCKS_LOG_HEADER(log, " Options.paranoid_checks: %d",
  100. paranoid_checks);
  101. ROCKS_LOG_HEADER(log, " Options.env: %p",
  102. env);
  103. ROCKS_LOG_HEADER(log, " Options.fs: %s",
  104. fs->Name());
  105. ROCKS_LOG_HEADER(log, " Options.info_log: %p",
  106. info_log.get());
  107. ROCKS_LOG_HEADER(log, " Options.max_file_opening_threads: %d",
  108. max_file_opening_threads);
  109. ROCKS_LOG_HEADER(log, " Options.statistics: %p",
  110. statistics.get());
  111. ROCKS_LOG_HEADER(log, " Options.use_fsync: %d",
  112. use_fsync);
  113. ROCKS_LOG_HEADER(
  114. log, " Options.max_log_file_size: %" ROCKSDB_PRIszt,
  115. max_log_file_size);
  116. ROCKS_LOG_HEADER(log,
  117. " Options.max_manifest_file_size: %" PRIu64,
  118. max_manifest_file_size);
  119. ROCKS_LOG_HEADER(
  120. log, " Options.log_file_time_to_roll: %" ROCKSDB_PRIszt,
  121. log_file_time_to_roll);
  122. ROCKS_LOG_HEADER(
  123. log, " Options.keep_log_file_num: %" ROCKSDB_PRIszt,
  124. keep_log_file_num);
  125. ROCKS_LOG_HEADER(
  126. log, " Options.recycle_log_file_num: %" ROCKSDB_PRIszt,
  127. recycle_log_file_num);
  128. ROCKS_LOG_HEADER(log, " Options.allow_fallocate: %d",
  129. allow_fallocate);
  130. ROCKS_LOG_HEADER(log, " Options.allow_mmap_reads: %d",
  131. allow_mmap_reads);
  132. ROCKS_LOG_HEADER(log, " Options.allow_mmap_writes: %d",
  133. allow_mmap_writes);
  134. ROCKS_LOG_HEADER(log, " Options.use_direct_reads: %d",
  135. use_direct_reads);
  136. ROCKS_LOG_HEADER(log,
  137. " "
  138. "Options.use_direct_io_for_flush_and_compaction: %d",
  139. use_direct_io_for_flush_and_compaction);
  140. ROCKS_LOG_HEADER(log, " Options.create_missing_column_families: %d",
  141. create_missing_column_families);
  142. ROCKS_LOG_HEADER(log, " Options.db_log_dir: %s",
  143. db_log_dir.c_str());
  144. ROCKS_LOG_HEADER(log, " Options.wal_dir: %s",
  145. wal_dir.c_str());
  146. ROCKS_LOG_HEADER(log, " Options.table_cache_numshardbits: %d",
  147. table_cache_numshardbits);
  148. ROCKS_LOG_HEADER(log,
  149. " Options.max_subcompactions: %" PRIu32,
  150. max_subcompactions);
  151. ROCKS_LOG_HEADER(log, " Options.max_background_flushes: %d",
  152. max_background_flushes);
  153. ROCKS_LOG_HEADER(log,
  154. " Options.WAL_ttl_seconds: %" PRIu64,
  155. wal_ttl_seconds);
  156. ROCKS_LOG_HEADER(log,
  157. " Options.WAL_size_limit_MB: %" PRIu64,
  158. wal_size_limit_mb);
  159. ROCKS_LOG_HEADER(log,
  160. " "
  161. "Options.max_write_batch_group_size_bytes: %" PRIu64,
  162. max_write_batch_group_size_bytes);
  163. ROCKS_LOG_HEADER(
  164. log, " Options.manifest_preallocation_size: %" ROCKSDB_PRIszt,
  165. manifest_preallocation_size);
  166. ROCKS_LOG_HEADER(log, " Options.is_fd_close_on_exec: %d",
  167. is_fd_close_on_exec);
  168. ROCKS_LOG_HEADER(log, " Options.advise_random_on_open: %d",
  169. advise_random_on_open);
  170. ROCKS_LOG_HEADER(
  171. log, " Options.db_write_buffer_size: %" ROCKSDB_PRIszt,
  172. db_write_buffer_size);
  173. ROCKS_LOG_HEADER(log, " Options.write_buffer_manager: %p",
  174. write_buffer_manager.get());
  175. ROCKS_LOG_HEADER(log, " Options.access_hint_on_compaction_start: %d",
  176. static_cast<int>(access_hint_on_compaction_start));
  177. ROCKS_LOG_HEADER(log, " Options.new_table_reader_for_compaction_inputs: %d",
  178. new_table_reader_for_compaction_inputs);
  179. ROCKS_LOG_HEADER(
  180. log, " Options.random_access_max_buffer_size: %" ROCKSDB_PRIszt,
  181. random_access_max_buffer_size);
  182. ROCKS_LOG_HEADER(log, " Options.use_adaptive_mutex: %d",
  183. use_adaptive_mutex);
  184. ROCKS_LOG_HEADER(log, " Options.rate_limiter: %p",
  185. rate_limiter.get());
  186. Header(
  187. log, " Options.sst_file_manager.rate_bytes_per_sec: %" PRIi64,
  188. sst_file_manager ? sst_file_manager->GetDeleteRateBytesPerSecond() : 0);
  189. ROCKS_LOG_HEADER(log, " Options.wal_recovery_mode: %d",
  190. static_cast<int>(wal_recovery_mode));
  191. ROCKS_LOG_HEADER(log, " Options.enable_thread_tracking: %d",
  192. enable_thread_tracking);
  193. ROCKS_LOG_HEADER(log, " Options.enable_pipelined_write: %d",
  194. enable_pipelined_write);
  195. ROCKS_LOG_HEADER(log, " Options.unordered_write: %d",
  196. unordered_write);
  197. ROCKS_LOG_HEADER(log, " Options.allow_concurrent_memtable_write: %d",
  198. allow_concurrent_memtable_write);
  199. ROCKS_LOG_HEADER(log, " Options.enable_write_thread_adaptive_yield: %d",
  200. enable_write_thread_adaptive_yield);
  201. ROCKS_LOG_HEADER(log,
  202. " Options.write_thread_max_yield_usec: %" PRIu64,
  203. write_thread_max_yield_usec);
  204. ROCKS_LOG_HEADER(log,
  205. " Options.write_thread_slow_yield_usec: %" PRIu64,
  206. write_thread_slow_yield_usec);
  207. if (row_cache) {
  208. ROCKS_LOG_HEADER(
  209. log,
  210. " Options.row_cache: %" ROCKSDB_PRIszt,
  211. row_cache->GetCapacity());
  212. } else {
  213. ROCKS_LOG_HEADER(log,
  214. " Options.row_cache: None");
  215. }
  216. #ifndef ROCKSDB_LITE
  217. ROCKS_LOG_HEADER(log, " Options.wal_filter: %s",
  218. wal_filter ? wal_filter->Name() : "None");
  219. #endif // ROCKDB_LITE
  220. ROCKS_LOG_HEADER(log, " Options.avoid_flush_during_recovery: %d",
  221. avoid_flush_during_recovery);
  222. ROCKS_LOG_HEADER(log, " Options.allow_ingest_behind: %d",
  223. allow_ingest_behind);
  224. ROCKS_LOG_HEADER(log, " Options.preserve_deletes: %d",
  225. preserve_deletes);
  226. ROCKS_LOG_HEADER(log, " Options.two_write_queues: %d",
  227. two_write_queues);
  228. ROCKS_LOG_HEADER(log, " Options.manual_wal_flush: %d",
  229. manual_wal_flush);
  230. ROCKS_LOG_HEADER(log, " Options.atomic_flush: %d", atomic_flush);
  231. ROCKS_LOG_HEADER(log,
  232. " Options.avoid_unnecessary_blocking_io: %d",
  233. avoid_unnecessary_blocking_io);
  234. ROCKS_LOG_HEADER(log, " Options.persist_stats_to_disk: %u",
  235. persist_stats_to_disk);
  236. ROCKS_LOG_HEADER(log, " Options.write_dbid_to_manifest: %d",
  237. write_dbid_to_manifest);
  238. ROCKS_LOG_HEADER(
  239. log, " Options.log_readahead_size: %" ROCKSDB_PRIszt,
  240. log_readahead_size);
  241. ROCKS_LOG_HEADER(log, " Options.sst_file_checksum_func: %s",
  242. sst_file_checksum_func
  243. ? sst_file_checksum_func->Name()
  244. : kUnknownFileChecksumFuncName.c_str());
  245. }
  246. MutableDBOptions::MutableDBOptions()
  247. : max_background_jobs(2),
  248. base_background_compactions(-1),
  249. max_background_compactions(-1),
  250. avoid_flush_during_shutdown(false),
  251. writable_file_max_buffer_size(1024 * 1024),
  252. delayed_write_rate(2 * 1024U * 1024U),
  253. max_total_wal_size(0),
  254. delete_obsolete_files_period_micros(6ULL * 60 * 60 * 1000000),
  255. stats_dump_period_sec(600),
  256. stats_persist_period_sec(600),
  257. stats_history_buffer_size(1024 * 1024),
  258. max_open_files(-1),
  259. bytes_per_sync(0),
  260. wal_bytes_per_sync(0),
  261. strict_bytes_per_sync(false),
  262. compaction_readahead_size(0) {}
  263. MutableDBOptions::MutableDBOptions(const DBOptions& options)
  264. : max_background_jobs(options.max_background_jobs),
  265. base_background_compactions(options.base_background_compactions),
  266. max_background_compactions(options.max_background_compactions),
  267. avoid_flush_during_shutdown(options.avoid_flush_during_shutdown),
  268. writable_file_max_buffer_size(options.writable_file_max_buffer_size),
  269. delayed_write_rate(options.delayed_write_rate),
  270. max_total_wal_size(options.max_total_wal_size),
  271. delete_obsolete_files_period_micros(
  272. options.delete_obsolete_files_period_micros),
  273. stats_dump_period_sec(options.stats_dump_period_sec),
  274. stats_persist_period_sec(options.stats_persist_period_sec),
  275. stats_history_buffer_size(options.stats_history_buffer_size),
  276. max_open_files(options.max_open_files),
  277. bytes_per_sync(options.bytes_per_sync),
  278. wal_bytes_per_sync(options.wal_bytes_per_sync),
  279. strict_bytes_per_sync(options.strict_bytes_per_sync),
  280. compaction_readahead_size(options.compaction_readahead_size) {}
  281. void MutableDBOptions::Dump(Logger* log) const {
  282. ROCKS_LOG_HEADER(log, " Options.max_background_jobs: %d",
  283. max_background_jobs);
  284. ROCKS_LOG_HEADER(log, " Options.max_background_compactions: %d",
  285. max_background_compactions);
  286. ROCKS_LOG_HEADER(log, " Options.avoid_flush_during_shutdown: %d",
  287. avoid_flush_during_shutdown);
  288. ROCKS_LOG_HEADER(
  289. log, " Options.writable_file_max_buffer_size: %" ROCKSDB_PRIszt,
  290. writable_file_max_buffer_size);
  291. ROCKS_LOG_HEADER(log, " Options.delayed_write_rate : %" PRIu64,
  292. delayed_write_rate);
  293. ROCKS_LOG_HEADER(log, " Options.max_total_wal_size: %" PRIu64,
  294. max_total_wal_size);
  295. ROCKS_LOG_HEADER(
  296. log, " Options.delete_obsolete_files_period_micros: %" PRIu64,
  297. delete_obsolete_files_period_micros);
  298. ROCKS_LOG_HEADER(log, " Options.stats_dump_period_sec: %u",
  299. stats_dump_period_sec);
  300. ROCKS_LOG_HEADER(log, " Options.stats_persist_period_sec: %d",
  301. stats_persist_period_sec);
  302. ROCKS_LOG_HEADER(
  303. log,
  304. " Options.stats_history_buffer_size: %" ROCKSDB_PRIszt,
  305. stats_history_buffer_size);
  306. ROCKS_LOG_HEADER(log, " Options.max_open_files: %d",
  307. max_open_files);
  308. ROCKS_LOG_HEADER(log,
  309. " Options.bytes_per_sync: %" PRIu64,
  310. bytes_per_sync);
  311. ROCKS_LOG_HEADER(log,
  312. " Options.wal_bytes_per_sync: %" PRIu64,
  313. wal_bytes_per_sync);
  314. ROCKS_LOG_HEADER(log,
  315. " Options.strict_bytes_per_sync: %d",
  316. strict_bytes_per_sync);
  317. ROCKS_LOG_HEADER(log,
  318. " Options.compaction_readahead_size: %" ROCKSDB_PRIszt,
  319. compaction_readahead_size);
  320. }
  321. } // namespace ROCKSDB_NAMESPACE