Skip to content

Commit a9eeec8

Browse files
committed
Add num-running-compaction-iterators stat
1 parent 602e19f commit a9eeec8

File tree

5 files changed

+44
-0
lines changed

5 files changed

+44
-0
lines changed

db/db_impl/db_impl.h

+5
Original file line numberDiff line numberDiff line change
@@ -2430,6 +2430,8 @@ class DBImpl : public DB {
24302430
const std::vector<CompactionInputFiles>& inputs,
24312431
bool* sfm_bookkeeping, LogBuffer* log_buffer);
24322432

2433+
int GetNumberCompactionIterators(Compaction* c);
2434+
24332435
// Request compaction tasks token from compaction thread limiter.
24342436
// It always succeeds if force = true or limiter is disable.
24352437
bool RequestCompactionToken(ColumnFamilyData* cfd, bool force,
@@ -2963,6 +2965,9 @@ class DBImpl : public DB {
29632965
// stores the number of compactions are currently running
29642966
int num_running_compactions_;
29652967

2968+
// stores the number of iterators required for currently running compactions
2969+
int num_running_compaction_iterators_;
2970+
29662971
// number of background memtable flush jobs, submitted to the HIGH pool
29672972
int bg_flush_scheduled_;
29682973

db/db_impl/db_impl_compaction_flush.cc

+19
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,20 @@ bool DBImpl::EnoughRoomForCompaction(
6161
return enough_room;
6262
}
6363

64+
int DBImpl::GetNumberCompactionIterators(Compaction* c) {
65+
assert(c);
66+
int num_l0_files = 0;
67+
int num_non_l0_levels = 0;
68+
for (auto& each_level : *c->inputs()) {
69+
if (each_level.level == 0) {
70+
num_l0_files += each_level.files.size();
71+
} else {
72+
num_non_l0_levels++;
73+
}
74+
}
75+
return num_l0_files + num_non_l0_levels;
76+
}
77+
6478
bool DBImpl::RequestCompactionToken(ColumnFamilyData* cfd, bool force,
6579
std::unique_ptr<TaskLimiterToken>* token,
6680
LogBuffer* log_buffer) {
@@ -3410,6 +3424,9 @@ void DBImpl::BackgroundCallCompaction(PrepickedCompaction* prepicked_compaction,
34103424
InstrumentedMutexLock l(&mutex_);
34113425

34123426
num_running_compactions_++;
3427+
int num_compaction_iterators =
3428+
GetNumberCompactionIterators(prepicked_compaction->compaction);
3429+
num_running_compaction_iterators_ += num_compaction_iterators;
34133430

34143431
std::unique_ptr<std::list<uint64_t>::iterator>
34153432
pending_outputs_inserted_elem(new std::list<uint64_t>::iterator(
@@ -3484,6 +3501,8 @@ void DBImpl::BackgroundCallCompaction(PrepickedCompaction* prepicked_compaction,
34843501

34853502
assert(num_running_compactions_ > 0);
34863503
num_running_compactions_--;
3504+
assert(num_running_compaction_iterators_ >= num_compaction_iterators);
3505+
num_running_compaction_iterators_ -= num_compaction_iterators;
34873506

34883507
if (bg_thread_pri == Env::Priority::LOW) {
34893508
bg_compaction_scheduled_--;

db/internal_stats.cc

+14
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,8 @@ static const std::string aggregated_table_properties =
301301
static const std::string aggregated_table_properties_at_level =
302302
aggregated_table_properties + "-at-level";
303303
static const std::string num_running_compactions = "num-running-compactions";
304+
static const std::string num_running_compaction_iterators =
305+
"num-running-compaction-iterators";
304306
static const std::string num_running_flushes = "num-running-flushes";
305307
static const std::string actual_delayed_write_rate =
306308
"actual-delayed-write-rate";
@@ -351,6 +353,8 @@ const std::string DB::Properties::kCompactionPending =
351353
rocksdb_prefix + compaction_pending;
352354
const std::string DB::Properties::kNumRunningCompactions =
353355
rocksdb_prefix + num_running_compactions;
356+
const std::string DB::Properties::kNumRunningCompactionIterators =
357+
rocksdb_prefix + num_running_compaction_iterators;
354358
const std::string DB::Properties::kNumRunningFlushes =
355359
rocksdb_prefix + num_running_flushes;
356360
const std::string DB::Properties::kBackgroundErrors =
@@ -580,6 +584,9 @@ const UnorderedMap<std::string, DBPropertyInfo>
580584
{DB::Properties::kNumRunningCompactions,
581585
{false, nullptr, &InternalStats::HandleNumRunningCompactions, nullptr,
582586
nullptr}},
587+
{DB::Properties::kNumRunningCompactionIterators,
588+
{false, nullptr, &InternalStats::HandleNumRunningCompactionIterators,
589+
nullptr, nullptr}},
583590
{DB::Properties::kActualDelayedWriteRate,
584591
{false, nullptr, &InternalStats::HandleActualDelayedWriteRate, nullptr,
585592
nullptr}},
@@ -1265,6 +1272,13 @@ bool InternalStats::HandleNumRunningCompactions(uint64_t* value, DBImpl* db,
12651272
return true;
12661273
}
12671274

1275+
bool InternalStats::HandleNumRunningCompactionIterators(uint64_t* value,
1276+
DBImpl* db,
1277+
Version* /*version*/) {
1278+
*value = db->num_running_compaction_iterators_;
1279+
return true;
1280+
}
1281+
12681282
bool InternalStats::HandleBackgroundErrors(uint64_t* value, DBImpl* /*db*/,
12691283
Version* /*version*/) {
12701284
// Accumulated number of errors in background flushes or compactions.

db/internal_stats.h

+2
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,8 @@ class InternalStats {
847847
bool HandleCompactionPending(uint64_t* value, DBImpl* db, Version* version);
848848
bool HandleNumRunningCompactions(uint64_t* value, DBImpl* db,
849849
Version* version);
850+
bool HandleNumRunningCompactionIterators(uint64_t* value, DBImpl* db,
851+
Version* version);
850852
bool HandleBackgroundErrors(uint64_t* value, DBImpl* db, Version* version);
851853
bool HandleCurSizeActiveMemTable(uint64_t* value, DBImpl* db,
852854
Version* version);

include/rocksdb/db.h

+4
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,10 @@ class DB {
12101210
// running compactions.
12111211
static const std::string kNumRunningCompactions;
12121212

1213+
// "rocksdb.num-running-compaction-iterators" - returns the number of
1214+
// iterators required for currently running compactions.
1215+
static const std::string kNumRunningCompactionIterators;
1216+
12131217
// "rocksdb.background-errors" - returns accumulated number of background
12141218
// errors.
12151219
static const std::string kBackgroundErrors;

0 commit comments

Comments
 (0)