From 1172e6680847803d264fdb61bedb70c8f962929b Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 8 Feb 2022 19:01:47 +0800 Subject: [PATCH] [td-11818] for performance profile. --- 2.0/src/query/inc/qExecutor.h | 2 +- 2.0/src/query/src/qExecutor.c | 14 ++++---- source/common/src/tep.c | 4 ++- source/libs/executor/src/executorimpl.c | 2 +- source/libs/executor/test/executorTests.cpp | 36 ++++++++++++++++----- 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/2.0/src/query/inc/qExecutor.h b/2.0/src/query/inc/qExecutor.h index 13512d2e10..0fdc441289 100644 --- a/2.0/src/query/inc/qExecutor.h +++ b/2.0/src/query/inc/qExecutor.h @@ -622,7 +622,7 @@ void doCompactSDataBlock(SSDataBlock* pBlock, int32_t numOfRows, int8_t* p); SSDataBlock* createOutputBuf(SExprInfo* pExpr, int32_t numOfOutput, int32_t numOfRows); -void* destroySDataBlock(SSDataBlock* pBlock); +void* blockDataDestroy(SSDataBlock* pBlock); void* doDestroyFilterInfo(SSingleColumnFilterInfo* pFilterInfo, int32_t numOfFilterCols); void setInputDataBlock(SOperatorInfo* pOperator, SQLFunctionCtx* pCtx, SSDataBlock* pBlock, int32_t order); diff --git a/2.0/src/query/src/qExecutor.c b/2.0/src/query/src/qExecutor.c index 6a066338d6..20ea91eceb 100644 --- a/2.0/src/query/src/qExecutor.c +++ b/2.0/src/query/src/qExecutor.c @@ -336,7 +336,7 @@ SSDataBlock* createOutputBuf(SExprInfo* pExpr, int32_t numOfOutput, int32_t numO return res; } -void* destroySDataBlock(SSDataBlock* pBlock) { +void* blockDataDestroy(SSDataBlock* pBlock) { if (pBlock == NULL) { return NULL; } @@ -5373,7 +5373,7 @@ static void destroyGlobalAggOperatorInfo(void* param, int32_t numOfOutput) { static void destroySlimitOperatorInfo(void* param, int32_t numOfOutput) { SSLimitOperatorInfo *pInfo = (SSLimitOperatorInfo*) param; taosArrayDestroy(pInfo->orderColumnList); - pInfo->pRes = destroySDataBlock(pInfo->pRes); + pInfo->pRes = blockDataDestroy(pInfo->pRes); tfree(pInfo->prevRow); } @@ -6566,7 +6566,7 @@ static void doDestroyBasicInfo(SOptrBasicInfo* pInfo, int32_t numOfOutput) { tfree(pInfo->rowCellInfoOffset); cleanupResultRowInfo(&pInfo->resultRowInfo); - pInfo->pRes = destroySDataBlock(pInfo->pRes); + pInfo->pRes = blockDataDestroy(pInfo->pRes); } static void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) { @@ -6590,7 +6590,7 @@ static void destroySWindowOperatorInfo(void* param, int32_t numOfOutput) { static void destroySFillOperatorInfo(void* param, int32_t numOfOutput) { SFillOperatorInfo* pInfo = (SFillOperatorInfo*) param; pInfo->pFillInfo = taosDestroyFillInfo(pInfo->pFillInfo); - pInfo->pRes = destroySDataBlock(pInfo->pRes); + pInfo->pRes = blockDataDestroy(pInfo->pRes); tfree(pInfo->p); } @@ -6607,12 +6607,12 @@ static void destroyProjectOperatorInfo(void* param, int32_t numOfOutput) { static void destroyTagScanOperatorInfo(void* param, int32_t numOfOutput) { STagScanInfo* pInfo = (STagScanInfo*) param; - pInfo->pRes = destroySDataBlock(pInfo->pRes); + pInfo->pRes = blockDataDestroy(pInfo->pRes); } static void destroyOrderOperatorInfo(void* param, int32_t numOfOutput) { SOrderOperatorInfo* pInfo = (SOrderOperatorInfo*) param; - pInfo->pDataBlock = destroySDataBlock(pInfo->pDataBlock); + pInfo->pDataBlock = blockDataDestroy(pInfo->pDataBlock); } static void destroyConditionOperatorInfo(void* param, int32_t numOfOutput) { @@ -6625,7 +6625,7 @@ static void destroyDistinctOperatorInfo(void* param, int32_t numOfOutput) { taosHashCleanup(pInfo->pSet); tfree(pInfo->buf); taosArrayDestroy(pInfo->pDistinctDataInfo); - pInfo->pRes = destroySDataBlock(pInfo->pRes); + pInfo->pRes = blockDataDestroy(pInfo->pRes); } SOperatorInfo* createMultiTableAggOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput) { diff --git a/source/common/src/tep.c b/source/common/src/tep.c index cc571411e6..0b6098d577 100644 --- a/source/common/src/tep.c +++ b/source/common/src/tep.c @@ -643,6 +643,8 @@ static int32_t doAssignOneTuple(SColumnInfoData* pDstCols, int32_t numOfRows, co } } } + + return TSDB_CODE_SUCCESS; } static int32_t blockDataAssign(SColumnInfoData* pCols, const SSDataBlock* pDataBlock, int32_t* index) { @@ -777,7 +779,7 @@ int32_t blockDataSort(SSDataBlock* pDataBlock, SArray* pOrderInfo, bool nullFirs copyBackToBlock(pDataBlock, pCols); int64_t p4 = taosGetTimestampUs(); - printf("sort:%ld, create:%ld, assign:%ld, copyback:%ld\n", p1-p0, p2 - p1, p3 - p2, p4-p3); + printf("sort:%ld, create:%ld, assign:%ld, copyback:%ld, rows:%d\n", p1-p0, p2 - p1, p3 - p2, p4-p3, rows); destroyTupleIndex(index); return TSDB_CODE_SUCCESS; diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 86a3ea3b90..7679561513 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -5865,7 +5865,7 @@ SOperatorInfo *createOrderOperatorInfo(SOperatorInfo* downstream, SArray* pExprI return NULL; } - pInfo->sortBufSize = 1024 * 1024; // 1MB + pInfo->sortBufSize = 1024 * 1024 * 5; // 1MB pInfo->capacity = 4096; pInfo->pDataBlock = createOutputBuf_rv(pExprInfo, pInfo->capacity); pInfo->pSources = taosArrayInit(4, POINTER_BYTES); diff --git a/source/libs/executor/test/executorTests.cpp b/source/libs/executor/test/executorTests.cpp index f777f6fe23..69d2603f62 100644 --- a/source/libs/executor/test/executorTests.cpp +++ b/source/libs/executor/test/executorTests.cpp @@ -255,16 +255,36 @@ TEST(testCase, external_sort_Test) { exp1->base.resSchema = createSchema(TSDB_DATA_TYPE_BINARY, 40, 2, "res1"); taosArrayPush(pExprInfo, &exp1); - SOperatorInfo* pOperator = createOrderOperatorInfo(createDummyOperator(100), pExprInfo, pOrderVal); + SOperatorInfo* pOperator = createOrderOperatorInfo(createDummyOperator(500), pExprInfo, pOrderVal); bool newgroup = false; - SSDataBlock* pRes = pOperator->exec(pOperator, &newgroup); + SSDataBlock* pRes = NULL; - SColumnInfoData* pCol1 = static_cast(taosArrayGet(pRes->pDataBlock, 0)); - SColumnInfoData* pCol2 = static_cast(taosArrayGet(pRes->pDataBlock, 1)); - for(int32_t i = 0; i < pRes->info.rows; ++i) { - char* p = colDataGet(pCol2, i); - printf("%d: %d, %s\n", i, ((int32_t*)pCol1->pData)[i], (char*)varDataVal(p)); - } + int32_t total = 1; + +// while(1) { + int64_t s = taosGetTimestampUs(); + pRes = pOperator->exec(pOperator, &newgroup); + + int64_t e = taosGetTimestampUs(); + printf("---------------elapsed:%ld\n", e - s); + + if (pRes == NULL) { +// break; + } + + SColumnInfoData* pCol1 = static_cast(taosArrayGet(pRes->pDataBlock, 0)); + SColumnInfoData* pCol2 = static_cast(taosArrayGet(pRes->pDataBlock, 1)); + for (int32_t i = 0; i < pRes->info.rows; ++i) { + char* p = colDataGet(pCol2, i); +// printf("%d: %d, %s\n", total++, ((int32_t*)pCol1->pData)[i], (char*)varDataVal(p)); + } +// } + + pOperator->cleanupFn(pOperator->info, 2); + tfree(exp); + tfree(exp1); + taosArrayDestroy(pExprInfo); + taosArrayDestroy(pOrderVal); } #pragma GCC diagnostic pop \ No newline at end of file -- GitLab