[td-225] opt perf
This commit is contained in:
parent
02bba66835
commit
43b7996c90
|
@ -24,6 +24,7 @@
|
||||||
#include "tarray.h"
|
#include "tarray.h"
|
||||||
#include "tdataformat.h"
|
#include "tdataformat.h"
|
||||||
#include "tname.h"
|
#include "tname.h"
|
||||||
|
#include "hash.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -168,8 +169,9 @@ typedef struct SDataBlockInfo {
|
||||||
} SDataBlockInfo;
|
} SDataBlockInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
size_t numOfTables;
|
size_t numOfTables;
|
||||||
SArray *pGroupList;
|
SArray *pGroupList;
|
||||||
|
SHashObj *map; // speedup acquire the tableQueryInfo from STableId
|
||||||
} STableGroupInfo;
|
} STableGroupInfo;
|
||||||
|
|
||||||
typedef struct SQueryRowCond {
|
typedef struct SQueryRowCond {
|
||||||
|
|
|
@ -4161,33 +4161,36 @@ static int64_t scanMultiTableDataBlocks(SQInfo *pQInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SDataBlockInfo blockInfo = tsdbRetrieveDataBlockInfo(pQueryHandle);
|
SDataBlockInfo blockInfo = tsdbRetrieveDataBlockInfo(pQueryHandle);
|
||||||
STableQueryInfo *pTableQueryInfo = NULL;
|
STableQueryInfo **pTableQueryInfo = (STableQueryInfo**) taosHashGet(pQInfo->tableqinfoGroupInfo.map, &blockInfo.tid, sizeof(blockInfo.tid));
|
||||||
|
if(pTableQueryInfo == NULL) {
|
||||||
// todo opt performance using hash table
|
break;
|
||||||
size_t numOfGroup = GET_NUM_OF_TABLEGROUP(pQInfo);
|
|
||||||
for (int32_t i = 0; i < numOfGroup; ++i) {
|
|
||||||
SArray *group = GET_TABLEGROUP(pQInfo, i);
|
|
||||||
|
|
||||||
size_t num = taosArrayGetSize(group);
|
|
||||||
for (int32_t j = 0; j < num; ++j) {
|
|
||||||
STableQueryInfo *p = taosArrayGetP(group, j);
|
|
||||||
|
|
||||||
STableId id = tsdbGetTableId(p->pTable);
|
|
||||||
if (id.tid == blockInfo.tid) {
|
|
||||||
assert(id.uid == blockInfo.uid);
|
|
||||||
pTableQueryInfo = p;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pTableQueryInfo != NULL) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// todo opt performance using hash table
|
||||||
assert(pTableQueryInfo != NULL);
|
|
||||||
setCurrentQueryTable(pRuntimeEnv, pTableQueryInfo);
|
// size_t numOfGroup = GET_NUM_OF_TABLEGROUP(pQInfo);
|
||||||
|
// for (int32_t i = 0; i < numOfGroup; ++i) {
|
||||||
|
// SArray *group = GET_TABLEGROUP(pQInfo, i);
|
||||||
|
//
|
||||||
|
// size_t num = taosArrayGetSize(group);
|
||||||
|
// for (int32_t j = 0; j < num; ++j) {
|
||||||
|
// STableQueryInfo *p = taosArrayGetP(group, j);
|
||||||
|
//
|
||||||
|
// STableId id = tsdbGetTableId(p->pTable);
|
||||||
|
// if (id.tid == blockInfo.tid) {
|
||||||
|
// assert(id.uid == blockInfo.uid);
|
||||||
|
// pTableQueryInfo = p;
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (pTableQueryInfo != NULL) {
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
assert(*pTableQueryInfo != NULL);
|
||||||
|
setCurrentQueryTable(pRuntimeEnv, *pTableQueryInfo);
|
||||||
|
|
||||||
SDataStatis *pStatis = NULL;
|
SDataStatis *pStatis = NULL;
|
||||||
SArray *pDataBlock = loadDataBlockOnDemand(pRuntimeEnv, pQueryHandle, &blockInfo, &pStatis);
|
SArray *pDataBlock = loadDataBlockOnDemand(pRuntimeEnv, pQueryHandle, &blockInfo, &pStatis);
|
||||||
|
@ -4195,11 +4198,12 @@ static int64_t scanMultiTableDataBlocks(SQInfo *pQInfo) {
|
||||||
if (!isGroupbyNormalCol(pQuery->pGroupbyExpr)) {
|
if (!isGroupbyNormalCol(pQuery->pGroupbyExpr)) {
|
||||||
if (!isIntervalQuery(pQuery)) {
|
if (!isIntervalQuery(pQuery)) {
|
||||||
int32_t step = QUERY_IS_ASC_QUERY(pQuery)? 1:-1;
|
int32_t step = QUERY_IS_ASC_QUERY(pQuery)? 1:-1;
|
||||||
setExecutionContext(pQInfo, pTableQueryInfo->pTable, pTableQueryInfo->groupIndex, blockInfo.window.ekey + step);
|
setExecutionContext(pQInfo, (*pTableQueryInfo)->pTable, (*pTableQueryInfo)->groupIndex,
|
||||||
|
blockInfo.window.ekey + step);
|
||||||
} else { // interval query
|
} else { // interval query
|
||||||
TSKEY nextKey = blockInfo.window.skey;
|
TSKEY nextKey = blockInfo.window.skey;
|
||||||
setIntervalQueryRange(pQInfo, nextKey);
|
setIntervalQueryRange(pQInfo, nextKey);
|
||||||
/*int32_t ret = */setAdditionalInfo(pQInfo, pTableQueryInfo->pTable, pTableQueryInfo);
|
/*int32_t ret = */setAdditionalInfo(pQInfo, (*pTableQueryInfo)->pTable, *pTableQueryInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5627,7 +5631,9 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
|
||||||
|
|
||||||
pQInfo->tableqinfoGroupInfo.pGroupList = taosArrayInit(numOfGroups, POINTER_BYTES);
|
pQInfo->tableqinfoGroupInfo.pGroupList = taosArrayInit(numOfGroups, POINTER_BYTES);
|
||||||
pQInfo->tableqinfoGroupInfo.numOfTables = pTableGroupInfo->numOfTables;
|
pQInfo->tableqinfoGroupInfo.numOfTables = pTableGroupInfo->numOfTables;
|
||||||
}
|
pQInfo->tableqinfoGroupInfo.map = taosHashInit(pTableGroupInfo->numOfTables,
|
||||||
|
taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false);
|
||||||
|
}
|
||||||
|
|
||||||
int tableIndex = 0;
|
int tableIndex = 0;
|
||||||
STimeWindow window = pQueryMsg->window;
|
STimeWindow window = pQueryMsg->window;
|
||||||
|
@ -5655,6 +5661,7 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
|
||||||
item->groupIndex = i;
|
item->groupIndex = i;
|
||||||
item->tableIndex = tableIndex++;
|
item->tableIndex = tableIndex++;
|
||||||
taosArrayPush(p1, &item);
|
taosArrayPush(p1, &item);
|
||||||
|
taosHashPut(pQInfo->tableqinfoGroupInfo.map, &id.tid, sizeof(id.tid), &item, POINTER_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosArrayPush(pQInfo->tableqinfoGroupInfo.pGroupList, &p1);
|
taosArrayPush(pQInfo->tableqinfoGroupInfo.pGroupList, &p1);
|
||||||
|
@ -5797,7 +5804,7 @@ static void freeQInfo(SQInfo *pQInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
taosArrayDestroy(pQInfo->tableqinfoGroupInfo.pGroupList);
|
taosArrayDestroy(pQInfo->tableqinfoGroupInfo.pGroupList);
|
||||||
|
taosHashCleanup(pQInfo->tableqinfoGroupInfo.map);
|
||||||
tsdbDestoryTableGroup(&pQInfo->tableGroupInfo);
|
tsdbDestoryTableGroup(&pQInfo->tableGroupInfo);
|
||||||
taosArrayDestroy(pQInfo->arrTableIdInfo);
|
taosArrayDestroy(pQInfo->arrTableIdInfo);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue