From eec58b8ef0ee974dd41533d4000edb8a8ac32b5b Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 13:53:24 +0800 Subject: [PATCH] opti:use suid+uid->tags index to optimize time cost --- source/common/src/tdatablock.c | 1 + source/dnode/vnode/src/meta/metaOpen.c | 2 +- source/libs/executor/src/executil.c | 13 ++++++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 7692e02a37..196376e675 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1425,6 +1425,7 @@ size_t blockDataGetCapacityInRow(const SSDataBlock* pBlock, size_t pageSize) { } void colDataDestroy(SColumnInfoData* pColData) { + if(!pColData) return; if (IS_VAR_DATA_TYPE(pColData->info.type)) { taosMemoryFreeClear(pColData->varmeta.offset); } else { diff --git a/source/dnode/vnode/src/meta/metaOpen.c b/source/dnode/vnode/src/meta/metaOpen.c index 941d2c6d72..89071d0881 100644 --- a/source/dnode/vnode/src/meta/metaOpen.c +++ b/source/dnode/vnode/src/meta/metaOpen.c @@ -87,7 +87,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) { } // open pCtbIdx - ret = tdbTbOpen("ctb.idx", sizeof(SCtbIdxKey), 0, ctbIdxKeyCmpr, pMeta->pEnv, &pMeta->pCtbIdx); + ret = tdbTbOpen("ctb.idx", sizeof(SCtbIdxKey), -1, ctbIdxKeyCmpr, pMeta->pEnv, &pMeta->pCtbIdx); if (ret < 0) { metaError("vgId:%d, failed to open meta child table index since %s", TD_VID(pVnode), tstrerror(terrno)); goto _err; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index eb6222f15b..81192cf2b7 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -385,7 +385,9 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi } int32_t rows = taosArrayGetSize(uidList); - + if(rows == 0){ + goto end; + } int64_t stt1 = taosGetTimestampUs(); qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); @@ -397,8 +399,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { - uint64_t* uid = taosArrayGet(uidList, i); - void* tag = taosArrayGet(tags, i); + void* tag = taosArrayGetP(tags, i); // int64_t stt = taosGetTimestampUs(); // int64_t stt1 = taosGetTimestampUs(); // qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); @@ -498,16 +499,18 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } int32_t i = 0; - while (i < taosArrayGetSize(pListInfo->pTableList)) { + while (i < taosArrayGetSize(res) && pColInfoData) { void* var = POINTER_SHIFT(pColInfoData->pData, i * pColInfoData->info.bytes); if (*(bool*)var == false) { - taosArrayRemove(pListInfo->pTableList, i); + taosArrayRemove(res, i); continue; } i++; } colDataDestroy(pColInfoData); + }else{ + vnodeGetCtbIdList(pVnode, pScanNode->suid, res); } for (int i = 0; i < taosArrayGetSize(res); i++) {