From 6f252d8d7a3300b8cf1d7350e143ffd81ae9cc8a Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 6 Sep 2022 16:36:56 +0800 Subject: [PATCH] fix(query): opt perf on last block query. --- source/dnode/vnode/src/inc/tsdb.h | 1 - source/dnode/vnode/src/tsdb/tsdbMergeTree.c | 22 +++++---------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 8c7f9be062..8bca22fea1 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -644,7 +644,6 @@ typedef struct { } SRowInfo; typedef struct SSttBlockLoadInfo { - int32_t sttFileIndex; SBlockData blockData[2]; SArray *aSttBlk; int32_t blockIndex[2]; // to denote the loaded block in the corresponding position. diff --git a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c index beb0004e24..4347550c2d 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c +++ b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c @@ -90,22 +90,23 @@ static SBlockData* loadBlockIfMissing(SLDataIter *pIter) { int32_t code = 0; SSttBlockLoadInfo* pInfo = pIter->pBlockLoadInfo; - if (pInfo->blockIndex[0] == pIter->iStt) { + if (pInfo->blockIndex[0] == pIter->iSttBlk) { return &pInfo->blockData[0]; } - if (pInfo->blockIndex[1] == pIter->iStt) { + if (pInfo->blockIndex[1] == pIter->iSttBlk) { return &pInfo->blockData[1]; } pInfo->currentLoadBlockIndex ^= 1; if (pIter->pSttBlk != NULL) { // current block not loaded yet code = tsdbReadSttBlock(pIter->pReader, pIter->iStt, pIter->pSttBlk, &pInfo->blockData[pInfo->currentLoadBlockIndex]); + tsdbDebug("read last block, index:%d, last file index:%d", pIter->iSttBlk, pIter->iStt); if (code != TSDB_CODE_SUCCESS) { goto _exit; } - pInfo->blockIndex[pInfo->currentLoadBlockIndex] = pIter->iStt; + pInfo->blockIndex[pInfo->currentLoadBlockIndex] = pIter->iSttBlk; pIter->iRow = (pIter->backward) ? pInfo->blockData[pInfo->currentLoadBlockIndex].nRow : -1; } @@ -136,26 +137,13 @@ int32_t tLDataIterOpen(struct SLDataIter **pIter, SDataFReader *pReader, int32_t (*pIter)->timeWindow = *pTimeWindow; (*pIter)->pBlockLoadInfo = pBlockLoadInfo; - - if (pBlockLoadInfo->aSttBlk == NULL) { - // loaded into the common shared objects - pBlockLoadInfo->aSttBlk = taosArrayInit(0, sizeof(SSttBlk)); - if (pBlockLoadInfo->aSttBlk == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _exit; - } - + if (taosArrayGetSize(pBlockLoadInfo->aSttBlk) == 0) { code = tsdbReadSttBlk(pReader, iStt, pBlockLoadInfo->aSttBlk); if (code) { goto _exit; } } - code = tsdbReadSttBlk(pReader, iStt, pBlockLoadInfo->aSttBlk); - if (code) { - goto _exit; - } - size_t size = taosArrayGetSize(pBlockLoadInfo->aSttBlk); // find the start block -- GitLab