From 09ce8182232a4d032dfcc3bbb5627dd0b3ad7fe3 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Mon, 20 Feb 2023 19:35:06 +0800 Subject: [PATCH] add stats --- include/libs/function/function.h | 5 +++++ source/libs/executor/inc/executorimpl.h | 7 +++++++ source/libs/executor/src/executil.c | 5 +++++ source/libs/executor/src/executorimpl.c | 20 ++++++++++++++++++-- source/libs/function/src/builtinsimpl.c | 5 +++++ 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/include/libs/function/function.h b/include/libs/function/function.h index 32db6773e0..bad8e042a3 100644 --- a/include/libs/function/function.h +++ b/include/libs/function/function.h @@ -153,6 +153,11 @@ typedef struct SqlFunctionCtx { SSerializeDataHandle saveHandle; int32_t exprIdx; char udfName[TSDB_FUNC_NAME_LEN]; + int64_t smaHits; + int64_t smaNoHits; + int64_t smaNoHitsRows; + int64_t sdHits; + int64_t sdHitsRows; } SqlFunctionCtx; typedef struct tExprNode { diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index e63c00af1e..b50a22ed67 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -231,7 +231,14 @@ typedef struct SOperatorInfo { int64_t downstreamTime; int64_t funcInitTime; int64_t funcExecTime; + int64_t funcExecCalled; + int64_t totalNumOfRows; int64_t funcFinTime; + int64_t smaHits; + int64_t smaNoHits; + int64_t smaNoHitsRows; + int64_t sdHits; + int64_t sdHitsRows; } SOperatorInfo; typedef enum { diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 3c4cafb753..b2f48042aa 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1543,6 +1543,11 @@ SqlFunctionCtx* createSqlFunctionCtx(SExprInfo* pExprInfo, int32_t numOfOutput, pCtx->numOfParams = pExpr->base.numOfParams; pCtx->param = pFunct->pParam; pCtx->saveHandle.currentPage = -1; + pCtx->smaHits = 0; + pCtx->smaNoHits = 0; + pCtx->smaNoHitsRows = 0; + pCtx->sdHits = 0; + pCtx->sdHitsRows = 0; } for (int32_t i = 1; i < numOfOutput; ++i) { diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index db8c8c6ac0..2f76a3227b 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -519,7 +519,14 @@ static int32_t doAggregateImpl(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx) { int64_t st = taosGetTimestampUs(); int32_t code = pCtx[k].fpSet.process(&pCtx[k]); + pOperator->funcExecCalled += 1; + pOperator->totalNumOfRows += pCtx->input.numOfRows; pOperator->funcExecTime += taosGetTimestampUs() - st; + pOperator->smaHits = pCtx->smaHits; + pOperator->smaNoHits = pCtx->smaNoHits; + pOperator->smaNoHitsRows = pCtx->smaNoHitsRows; + pOperator->sdHits = pCtx->sdHits; + pOperator->sdHitsRows = pCtx->sdHitsRows; if (code != TSDB_CODE_SUCCESS) { qError("%s aggregate function error happens, code: %s", GET_TASKID(pOperator->pTaskInfo), tstrerror(code)); return code; @@ -1707,8 +1714,10 @@ void destroyOperatorInfo(SOperatorInfo* pOperator) { double init = (double)pOperator->funcInitTime / 1000000; double exec = (double)pOperator->funcExecTime / 1000000; double fin = (double)pOperator->funcFinTime / 1000000; - qError("operator: %s, downstream time:%lf, init time:%lf, exec time:%lf, fin time:%lf", - pOperator->name, downstream, init, exec, fin); + qError("operator: %s, downstream time:%lf, init time:%lf, exec time:%lf, exec called:%ld, fin time:%lf, total rows:%ld", + pOperator->name, downstream, init, exec, pOperator->funcExecCalled, fin, pOperator->totalNumOfRows); + qError("operator: %s, sma hits:%ld, sma nohits:%ld, sma nohits rows:%ld, second stage hits:%ld, second stage hits rows:%ld", + pOperator->name, pOperator->smaHits, pOperator->smaNoHits, pOperator->smaNoHitsRows, pOperator->sdHits, pOperator->sdHitsRows); } if (pOperator->fpSet.closeFn != NULL) { @@ -1930,7 +1939,14 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN pOperator->downstreamTime = 0; pOperator->funcInitTime = 0; pOperator->funcExecTime = 0; + pOperator->funcExecCalled = 0; pOperator->funcFinTime = 0; + pOperator->totalNumOfRows = 0; + pOperator->smaHits = 0; + pOperator->smaNoHits = 0; + pOperator->smaNoHitsRows = 0; + pOperator->sdHits = 0; + pOperator->sdHitsRows= 0; if (downstream->operatorType == QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN) { STableScanInfo* pTableScanInfo = downstream->info; diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index 80e77969ab..59aa2f1a92 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -1614,6 +1614,7 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) { } pInfo->numOfElems += (pInput->numOfRows - pAgg->numOfNull); + pCtx->smaHits += 1; } else { // check the valid data one by one int32_t start = pInput->startRowIndex; @@ -1636,6 +1637,8 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) { pInfo->numOfElems += 1; } + pCtx->smaNoHits += 1; + pCtx->smaNoHitsRows += pInput->numOfRows; } } else { // the second stage, calculate the true percentile value @@ -1655,6 +1658,8 @@ int32_t percentileFunction(SqlFunctionCtx* pCtx) { } SET_VAL(pResInfo, numOfElems, 1); + pCtx->sdHits += 1; + pCtx->sdHitsRows += pInput->numOfRows; } return TSDB_CODE_SUCCESS; -- GitLab