Skip to content

Commit 7c3d5cf

Browse files
HPCC-33466 Log key mergers with excessive KeyCursors
Changes following review. Signed-off-by: Richard Chapman <[email protected]>
1 parent 3244f1b commit 7c3d5cf

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

system/jhtree/jhtree.cpp

+27-4
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ std::atomic<unsigned __int64> leafSearchCycles{0};
8282
static cycle_t traceCacheLockingFrequency{0};
8383
static cycle_t traceNodeLoadFrequency{0};
8484
static cycle_t traceNodeLoadThreshold{0};
85-
static unsigned traceKeyMergeThreshold{1000}; // Report merges of > 1000 cursor positions
85+
static unsigned traceKeyMergeThreshold{1000}; // Report merges of > 1000 cursor positions
86+
static RelaxedAtomic<unsigned> mergeThresholdExceededSuppressed {0};
87+
static RelaxedAtomic<unsigned> maxActiveKeys {0};
88+
static unsigned lastMergeThresholdReport = 0;
8689

8790
MODULE_INIT(INIT_PRIORITY_JHTREE_JHTREE)
8891
{
@@ -3384,10 +3387,30 @@ class CKeyMerger : public CKeyLevelManager
33843387
if (activekeys>0)
33853388
{
33863389
if (ctx)
3387-
{
33883390
ctx->noteStatistic(StNumIndexMerges, activekeys);
3389-
if (traceKeyMergeThreshold && activekeys > traceKeyMergeThreshold)
3390-
ctx->CTXLOG("Key merger with %u active keys detected", activekeys);
3391+
if (traceKeyMergeThreshold && activekeys > traceKeyMergeThreshold)
3392+
{
3393+
unsigned now = msTick();
3394+
if (now - lastMergeThresholdReport > 60000)
3395+
{
3396+
if (mergeThresholdExceededSuppressed)
3397+
{
3398+
// Report skipped
3399+
DBGLOG("%u large key mergers detected with up to %u active keys", mergeThresholdExceededSuppressed.load(), maxActiveKeys.load());
3400+
lastMergeThresholdReport = now;
3401+
mergeThresholdExceededSuppressed = 0;
3402+
maxActiveKeys = 0;
3403+
}
3404+
// Report this
3405+
DBGLOG("Large key merger detected with %u active keys", activekeys);
3406+
}
3407+
else
3408+
{
3409+
// Record skipped
3410+
mergeThresholdExceededSuppressed++;
3411+
if (activekeys > maxActiveKeys)
3412+
maxActiveKeys = activekeys;
3413+
}
33913414
}
33923415
cursors = cursorArray.getArray();
33933416
mergeheap = mergeHeapArray.getArray();

0 commit comments

Comments
 (0)