enh(query): opt last row read performance.
This commit is contained in:
parent
5663550de2
commit
d73306f616
|
@ -741,7 +741,6 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
|
||||||
pReader->type = pCond->type;
|
pReader->type = pCond->type;
|
||||||
pReader->window = updateQueryTimeWindow(pReader->pTsdb, &pCond->twindows);
|
pReader->window = updateQueryTimeWindow(pReader->pTsdb, &pCond->twindows);
|
||||||
pReader->blockInfoBuf.numPerBucket = 1000; // 1000 tables per bucket
|
pReader->blockInfoBuf.numPerBucket = 1000; // 1000 tables per bucket
|
||||||
pReader->status.pLDataIter = taosMemoryCalloc(pVnode->config.sttTrigger, sizeof(SLDataIter));
|
|
||||||
|
|
||||||
if (pReader->pResBlock == NULL) {
|
if (pReader->pResBlock == NULL) {
|
||||||
pReader->freeBlock = true;
|
pReader->freeBlock = true;
|
||||||
|
@ -774,6 +773,12 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
|
||||||
goto _end;
|
goto _end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pReader->status.pLDataIter = taosMemoryCalloc(pVnode->config.sttTrigger, sizeof(SLDataIter));
|
||||||
|
if (pReader->status.pLDataIter == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
goto _end;
|
||||||
|
}
|
||||||
|
|
||||||
setColumnIdSlotList(pSup, pCond->colList, pCond->pSlotList, pCond->numOfCols);
|
setColumnIdSlotList(pSup, pCond->colList, pCond->pSlotList, pCond->numOfCols);
|
||||||
|
|
||||||
tsdbInitReaderLock(pReader);
|
tsdbInitReaderLock(pReader);
|
||||||
|
@ -4368,29 +4373,38 @@ _err:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void clearSharedPtr(STsdbReader* p) {
|
||||||
|
p->status.pLDataIter = NULL;
|
||||||
|
p->status.pTableMap = NULL;
|
||||||
|
p->status.uidList.tableUidList = NULL;
|
||||||
|
p->pReadSnap = NULL;
|
||||||
|
p->pSchema = NULL;
|
||||||
|
p->pSchemaMap = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setSharedPtr(STsdbReader* pDst, const STsdbReader* pSrc) {
|
||||||
|
pDst->status.pTableMap = pSrc->status.pTableMap;
|
||||||
|
pDst->status.pLDataIter = pSrc->status.pLDataIter;
|
||||||
|
pDst->status.uidList = pSrc->status.uidList;
|
||||||
|
pDst->pSchema = pSrc->pSchema;
|
||||||
|
pDst->pSchemaMap = pSrc->pSchemaMap;
|
||||||
|
pDst->pReadSnap = pSrc->pReadSnap;
|
||||||
|
}
|
||||||
|
|
||||||
void tsdbReaderClose(STsdbReader* pReader) {
|
void tsdbReaderClose(STsdbReader* pReader) {
|
||||||
if (pReader == NULL) {
|
if (pReader == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsdbAcquireReader(pReader);
|
tsdbAcquireReader(pReader);
|
||||||
|
|
||||||
{
|
{
|
||||||
if (pReader->innerReader[0] != NULL || pReader->innerReader[1] != NULL) {
|
if (pReader->innerReader[0] != NULL || pReader->innerReader[1] != NULL) {
|
||||||
STsdbReader* p = pReader->innerReader[0];
|
STsdbReader* p = pReader->innerReader[0];
|
||||||
|
clearSharedPtr(p);
|
||||||
p->status.pTableMap = NULL;
|
|
||||||
p->status.uidList.tableUidList = NULL;
|
|
||||||
p->pReadSnap = NULL;
|
|
||||||
p->pSchema = NULL;
|
|
||||||
p->pSchemaMap = NULL;
|
|
||||||
|
|
||||||
p = pReader->innerReader[1];
|
p = pReader->innerReader[1];
|
||||||
|
clearSharedPtr(p);
|
||||||
p->status.pTableMap = NULL;
|
|
||||||
p->status.uidList.tableUidList = NULL;
|
|
||||||
p->pReadSnap = NULL;
|
|
||||||
p->pSchema = NULL;
|
|
||||||
p->pSchemaMap = NULL;
|
|
||||||
|
|
||||||
tsdbReaderClose(pReader->innerReader[0]);
|
tsdbReaderClose(pReader->innerReader[0]);
|
||||||
tsdbReaderClose(pReader->innerReader[1]);
|
tsdbReaderClose(pReader->innerReader[1]);
|
||||||
|
@ -4627,18 +4641,10 @@ int32_t tsdbReaderResume(STsdbReader* pReader) {
|
||||||
|
|
||||||
// we need only one row
|
// we need only one row
|
||||||
pPrevReader->capacity = 1;
|
pPrevReader->capacity = 1;
|
||||||
pPrevReader->status.pTableMap = pReader->status.pTableMap;
|
setSharedPtr(pPrevReader, pReader);
|
||||||
pPrevReader->status.uidList = pReader->status.uidList;
|
|
||||||
pPrevReader->pSchema = pReader->pSchema;
|
|
||||||
pPrevReader->pSchemaMap = pReader->pSchemaMap;
|
|
||||||
pPrevReader->pReadSnap = pReader->pReadSnap;
|
|
||||||
|
|
||||||
pNextReader->capacity = 1;
|
pNextReader->capacity = 1;
|
||||||
pNextReader->status.pTableMap = pReader->status.pTableMap;
|
setSharedPtr(pNextReader, pReader);
|
||||||
pNextReader->status.uidList = pReader->status.uidList;
|
|
||||||
pNextReader->pSchema = pReader->pSchema;
|
|
||||||
pNextReader->pSchemaMap = pReader->pSchemaMap;
|
|
||||||
pNextReader->pReadSnap = pReader->pReadSnap;
|
|
||||||
|
|
||||||
code = doOpenReaderImpl(pPrevReader);
|
code = doOpenReaderImpl(pPrevReader);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
|
Loading…
Reference in New Issue