diff options
author | Mihai Andrei <mihai.andrei@10gen.com> | 2022-01-31 18:06:17 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-01-31 18:37:17 +0000 |
commit | f5dbab9f268eae5471fdbf2c2660fdec240f80ec (patch) | |
tree | 9fb21ca8936008f7b16f9d667d396f46480e6270 /src | |
parent | 539ce23761785a90ac28da2ab40203ea0fdf59b1 (diff) | |
download | mongo-f5dbab9f268eae5471fdbf2c2660fdec240f80ec.tar.gz |
SERVER-62674 Add stats tracking for multiple collections
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/db_raii.cpp | 16 | ||||
-rw-r--r-- | src/mongo/db/db_raii.h | 5 | ||||
-rw-r--r-- | src/mongo/db/stats/top.cpp | 12 | ||||
-rw-r--r-- | src/mongo/db/stats/top.h | 11 |
4 files changed, 38 insertions, 6 deletions
diff --git a/src/mongo/db/db_raii.cpp b/src/mongo/db/db_raii.cpp index 86099c1b145..aaab7666d87 100644 --- a/src/mongo/db/db_raii.cpp +++ b/src/mongo/db/db_raii.cpp @@ -238,14 +238,21 @@ AutoStatsTracker::AutoStatsTracker(OperationContext* opCtx, Top::LockType lockType, LogMode logMode, int dbProfilingLevel, - Date_t deadline) - : _opCtx(opCtx), _lockType(lockType), _nss(nss), _logMode(logMode) { + Date_t deadline, + const std::vector<NamespaceString>& secondaryNssVector) + : _opCtx(opCtx), _lockType(lockType), _logMode(logMode) { + // Deduplicate all namespaces for Top reporting on destruct. + _nssSet.insert(nss); + for (auto&& secondaryNss : secondaryNssVector) { + _nssSet.insert(secondaryNss); + } + if (_logMode == LogMode::kUpdateTop) { return; } stdx::lock_guard<Client> clientLock(*_opCtx->getClient()); - CurOp::get(_opCtx)->enter_inlock(_nss.ns().c_str(), dbProfilingLevel); + CurOp::get(_opCtx)->enter_inlock(nss.ns().c_str(), dbProfilingLevel); } AutoStatsTracker::~AutoStatsTracker() { @@ -253,10 +260,11 @@ AutoStatsTracker::~AutoStatsTracker() { return; } + // Update stats for each namespace. auto curOp = CurOp::get(_opCtx); Top::get(_opCtx->getServiceContext()) .record(_opCtx, - _nss.ns(), + _nssSet, curOp->getLogicalOp(), _lockType, durationCount<Microseconds>(curOp->elapsedTimeExcludingPauses()), diff --git a/src/mongo/db/db_raii.h b/src/mongo/db/db_raii.h index 47717a3d236..dca7dc62f8c 100644 --- a/src/mongo/db/db_raii.h +++ b/src/mongo/db/db_raii.h @@ -69,7 +69,8 @@ public: Top::LockType lockType, LogMode logMode, int dbProfilingLevel, - Date_t deadline = Date_t::max()); + Date_t deadline = Date_t::max(), + const std::vector<NamespaceString>& secondaryNssVector = {}); /** * Records stats about the current operation via Top, if 'logMode' is 'kUpdateTop' or @@ -80,8 +81,8 @@ public: private: OperationContext* _opCtx; Top::LockType _lockType; - const NamespaceString _nss; const LogMode _logMode; + std::set<NamespaceString> _nssSet; }; /** diff --git a/src/mongo/db/stats/top.cpp b/src/mongo/db/stats/top.cpp index 1674fe394d6..513b7fae754 100644 --- a/src/mongo/db/stats/top.cpp +++ b/src/mongo/db/stats/top.cpp @@ -88,6 +88,18 @@ void Top::record(OperationContext* opCtx, _record(opCtx, coll, logicalOp, lockType, micros, readWriteType); } +void Top::record(OperationContext* opCtx, + const std::set<NamespaceString>& nssSet, + LogicalOp logicalOp, + LockType lockType, + long long micros, + bool command, + Command::ReadWriteType readWriteType) { + for (const auto& nss : nssSet) { + record(opCtx, nss.ns(), logicalOp, lockType, micros, command, readWriteType); + } +} + void Top::_record(OperationContext* opCtx, CollectionData& c, LogicalOp logicalOp, diff --git a/src/mongo/db/stats/top.h b/src/mongo/db/stats/top.h index 5aa3034688b..358dc5d7164 100644 --- a/src/mongo/db/stats/top.h +++ b/src/mongo/db/stats/top.h @@ -104,6 +104,17 @@ public: bool command, Command::ReadWriteType readWriteType); + /** + * Same as the above, but for multiple namespaces. + */ + void record(OperationContext* opCtx, + const std::set<NamespaceString>& nssSet, + LogicalOp logicalOp, + LockType lockType, + long long micros, + bool command, + Command::ReadWriteType readWriteType); + void append(BSONObjBuilder& b); void cloneMap(UsageMap& out) const; |