Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
97a6e89d
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
97a6e89d
编写于
7月 18, 2023
作者:
S
slzhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enhance: refactor create initial sources
上级
ba2b4042
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
140 addition
and
129 deletion
+140
-129
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+1
-1
source/libs/executor/src/tsort.c
source/libs/executor/src/tsort.c
+139
-128
未找到文件。
source/libs/executor/src/scanoperator.c
浏览文件 @
97a6e89d
...
...
@@ -2840,7 +2840,7 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) {
int32_t
tableStartIdx
=
pInfo
->
tableStartIndex
;
int32_t
tableEndIdx
=
pInfo
->
tableEndIndex
;
pInfo
->
sortBufSize
=
2048
*
pInfo
->
bufPageSize
;
pInfo
->
sortBufSize
=
1024
*
pInfo
->
bufPageSize
;
int32_t
numOfBufPage
=
pInfo
->
sortBufSize
/
pInfo
->
bufPageSize
;
pInfo
->
pSortHandle
=
tsortCreateSortHandle
(
pInfo
->
pSortInfo
,
SORT_TABLE_MERGE_SCAN
,
pInfo
->
bufPageSize
,
numOfBufPage
,
pInfo
->
pSortInputBlock
,
pTaskInfo
->
id
.
str
,
0
,
0
,
0
);
...
...
source/libs/executor/src/tsort.c
浏览文件 @
97a6e89d
...
...
@@ -475,11 +475,11 @@ static int32_t adjustMergeTreeForNextTuple(SSortSource* pSource, SMultiwayMergeT
if
(
pHandle
->
type
==
SORT_SINGLESOURCE_SORT
)
{
pSource
->
pageIndex
++
;
if
(
pSource
->
pageIndex
>=
taosArrayGetSize
(
pSource
->
pageIdList
))
{
qInfo
(
"adjust merge tree. %d source completed %d"
,
*
numOfCompleted
,
pSource
->
pageIndex
);
(
*
numOfCompleted
)
+=
1
;
pSource
->
src
.
rowIndex
=
-
1
;
pSource
->
pageIndex
=
-
1
;
pSource
->
src
.
pBlock
=
blockDataDestroy
(
pSource
->
src
.
pBlock
);
uInfo
(
"adjust merge tree. %d source completed"
,
*
numOfCompleted
);
}
else
{
int32_t
*
pPgId
=
taosArrayGet
(
pSource
->
pageIdList
,
pSource
->
pageIndex
);
...
...
@@ -495,8 +495,6 @@ static int32_t adjustMergeTreeForNextTuple(SSortSource* pSource, SMultiwayMergeT
}
releaseBufPage
(
pHandle
->
pBuf
,
pPage
);
if
(
pSource
->
pageIndex
%
256
==
0
)
uInfo
(
"got block from page %d from ext mem source %p"
,
pSource
->
pageIndex
,
pSource
);
}
}
else
{
int64_t
st
=
taosGetTimestampUs
();
...
...
@@ -506,7 +504,7 @@ static int32_t adjustMergeTreeForNextTuple(SSortSource* pSource, SMultiwayMergeT
if
(
pSource
->
src
.
pBlock
==
NULL
)
{
(
*
numOfCompleted
)
+=
1
;
pSource
->
src
.
rowIndex
=
-
1
;
u
Info
(
"adjust merge tree. %d source completed"
,
*
numOfCompleted
);
q
Info
(
"adjust merge tree. %d source completed"
,
*
numOfCompleted
);
}
}
}
...
...
@@ -688,7 +686,7 @@ static int32_t doInternalMergeSort(SSortHandle* pHandle) {
// Only *numOfInputSources* can be loaded into buffer to perform the external sort.
for
(
int32_t
i
=
0
;
i
<
sortGroup
;
++
i
)
{
u
Info
(
"internal merge sort pass %d group %d. num input sources %d "
,
t
,
i
,
numOfInputSources
);
q
Info
(
"internal merge sort pass %d group %d. num input sources %d "
,
t
,
i
,
numOfInputSources
);
pHandle
->
sourceId
+=
1
;
int32_t
end
=
(
i
+
1
)
*
numOfInputSources
-
1
;
...
...
@@ -884,11 +882,13 @@ static int32_t sortBlocksToExtSource(SSortHandle* pHandle, SArray* aBlk, SBlockO
int32_t
minIdx
=
tMergeTreeGetChosenIndex
(
pTree
);
SSDataBlock
*
minBlk
=
taosArrayGetP
(
aBlk
,
minIdx
);
int32_t
minRow
=
sup
.
aRowIdx
[
minIdx
];
appendOneRowToDataBlock
(
pHandle
->
pDataBlock
,
minBlk
,
&
minRow
);
++
nRows
;
if
(
pHandle
->
pDataBlock
->
info
.
rows
>=
rowCap
)
{
appendDataBlockToPageBuf
(
pHandle
,
pHandle
->
pDataBlock
,
aPgId
);
}
if
(
sup
.
aRowIdx
[
minIdx
]
==
minBlk
->
info
.
rows
-
1
)
{
sup
.
aRowIdx
[
minIdx
]
=
-
1
;
++
numEnded
;
...
...
@@ -911,11 +911,56 @@ static int32_t sortBlocksToExtSource(SSortHandle* pHandle, SArray* aBlk, SBlockO
return
0
;
}
static
int32_t
createInitialSources
(
SSortHandle
*
pHandle
)
{
size_t
sortBufSize
=
pHandle
->
numOfPages
*
pHandle
->
pageSize
;
static
int32_t
createBlocksMergeSortInitialSources
(
SSortHandle
*
pHandle
)
{
SBlockOrderInfo
*
pOrder
=
taosArrayGet
(
pHandle
->
pSortInfo
,
0
);
size_t
nSrc
=
taosArrayGetSize
(
pHandle
->
pOrderedSource
);
SArray
*
aExtSrc
=
taosArrayInit
(
nSrc
,
POINTER_BYTES
);
size_t
maxBufSize
=
pHandle
->
numOfPages
*
pHandle
->
pageSize
;
createPageBuf
(
pHandle
);
SSortSource
*
pSrc
=
taosArrayGetP
(
pHandle
->
pOrderedSource
,
0
);
int32_t
szSort
=
0
;
SArray
*
aBlkSort
=
taosArrayInit
(
8
,
POINTER_BYTES
);
while
(
1
)
{
SSDataBlock
*
pBlk
=
pHandle
->
fetchfp
(
pSrc
->
param
);
if
(
pBlk
!=
NULL
)
{
szSort
+=
blockDataGetSize
(
pBlk
);
SSDataBlock
*
blk
=
createOneDataBlock
(
pBlk
,
true
);
taosArrayPush
(
aBlkSort
,
&
blk
);
}
if
((
pBlk
!=
NULL
&&
szSort
>
maxBufSize
)
||
(
pBlk
==
NULL
&&
szSort
>
0
))
{
int64_t
p
=
taosGetTimestampUs
();
sortBlocksToExtSource
(
pHandle
,
aBlkSort
,
pOrder
,
aExtSrc
);
int64_t
el
=
taosGetTimestampUs
()
-
p
;
pHandle
->
sortElapsed
+=
el
;
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
aBlkSort
);
++
i
)
{
blockDataDestroy
(
taosArrayGetP
(
aBlkSort
,
i
));
}
taosArrayClear
(
aBlkSort
);
szSort
=
0
;
}
if
(
pBlk
==
NULL
)
{
break
;
};
}
taosArrayDestroy
(
aBlkSort
);
tsortClearOrderdSource
(
pHandle
->
pOrderedSource
,
NULL
,
NULL
);
taosArrayAddAll
(
pHandle
->
pOrderedSource
,
aExtSrc
);
taosArrayDestroy
(
aExtSrc
);
pHandle
->
type
=
SORT_SINGLESOURCE_SORT
;
return
0
;
}
static
int32_t
createBlocksQuickSortInitialSources
(
SSortHandle
*
pHandle
)
{
int32_t
code
=
0
;
size_t
sortBufSize
=
pHandle
->
numOfPages
*
pHandle
->
pageSize
;
if
(
pHandle
->
type
==
SORT_SINGLESOURCE_SORT
)
{
SSortSource
**
pSource
=
taosArrayGet
(
pHandle
->
pOrderedSource
,
0
);
SSortSource
*
source
=
*
pSource
;
*
pSource
=
NULL
;
...
...
@@ -1017,56 +1062,22 @@ static int32_t createInitialSources(SSortHandle* pHandle) {
code
=
doAddToBuf
(
pHandle
->
pDataBlock
,
pHandle
);
}
}
}
else
if
(
pHandle
->
type
==
SORT_TABLE_MERGE_SCAN
)
{
SBlockOrderInfo
*
pOrder
=
taosArrayGet
(
pHandle
->
pSortInfo
,
0
);
size_t
nSrc
=
taosArrayGetSize
(
pHandle
->
pOrderedSource
);
SArray
*
aExtSrc
=
taosArrayInit
(
nSrc
,
POINTER_BYTES
);
size_t
maxBufSize
=
pHandle
->
numOfPages
*
pHandle
->
pageSize
;
createPageBuf
(
pHandle
);
SSortSource
*
pSrc
=
taosArrayGetP
(
pHandle
->
pOrderedSource
,
0
);
int32_t
szSort
=
0
;
SArray
*
aBlkSort
=
taosArrayInit
(
8
,
POINTER_BYTES
);
while
(
1
)
{
SSDataBlock
*
pBlk
=
pHandle
->
fetchfp
(
pSrc
->
param
);
if
(
pBlk
==
NULL
)
{
break
;
};
szSort
+=
blockDataGetSize
(
pBlk
);
SSDataBlock
*
blk
=
createOneDataBlock
(
pBlk
,
true
);
taosArrayPush
(
aBlkSort
,
&
blk
);
return
code
;
}
if
(
szSort
>
maxBufSize
)
{
sortBlocksToExtSource
(
pHandle
,
aBlkSort
,
pOrder
,
aExtSrc
);
uInfo
(
"initial source %zu created for %zu blocks"
,
taosArrayGetSize
(
aExtSrc
),
taosArrayGetSize
(
aBlkSort
));
static
int32_t
createInitialSources
(
SSortHandle
*
pHandle
)
{
int32_t
code
=
0
;
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
aBlkSort
);
++
i
)
{
blockDataDestroy
(
taosArrayGetP
(
aBlkSort
,
i
));
}
taosArrayClear
(
aBlkSort
);
szSort
=
0
;
}
}
if
(
szSort
>
0
)
{
sortBlocksToExtSource
(
pHandle
,
aBlkSort
,
pOrder
,
aExtSrc
);
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
aBlkSort
);
++
i
)
{
blockDataDestroy
(
taosArrayGetP
(
aBlkSort
,
i
));
}
taosArrayClear
(
aBlkSort
);
szSort
=
0
;
if
(
pHandle
->
type
==
SORT_SINGLESOURCE_SORT
)
{
code
=
createBlocksQuickSortInitialSources
(
pHandle
);
}
else
if
(
pHandle
->
type
==
SORT_TABLE_MERGE_SCAN
)
{
code
=
createBlocksMergeSortInitialSources
(
pHandle
);
}
taosArrayDestroy
(
aBlkSort
);
tsortClearOrderdSource
(
pHandle
->
pOrderedSource
,
NULL
,
NULL
);
taosArrayAddAll
(
pHandle
->
pOrderedSource
,
aExtSrc
);
taosArrayDestroy
(
aExtSrc
);
pHandle
->
type
=
SORT_SINGLESOURCE_SORT
;
uInfo
(
"create initial sources for table merge scan ended"
);
qInfo
(
"%zu sources created"
,
taosArrayGetSize
(
pHandle
->
pOrderedSource
));
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pHandle
->
pOrderedSource
);
++
i
)
{
SSortSource
*
pSrc
=
taosArrayGetP
(
pHandle
->
pOrderedSource
,
i
);
qInfo
(
"source %d, num of pages %zu"
,
i
,
taosArrayGetSize
(
pSrc
->
pageIdList
));
}
return
code
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录