Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
63884b55
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
63884b55
编写于
6月 16, 2022
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(query): set correct sort buffer page size.
上级
6b2d4a6a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
41 addition
and
20 deletion
+41
-20
source/common/src/tdatablock.c
source/common/src/tdatablock.c
+1
-0
source/libs/executor/inc/tsort.h
source/libs/executor/inc/tsort.h
+7
-0
source/libs/executor/src/sortoperator.c
source/libs/executor/src/sortoperator.c
+16
-11
source/libs/executor/src/tsort.c
source/libs/executor/src/tsort.c
+17
-9
未找到文件。
source/common/src/tdatablock.c
浏览文件 @
63884b55
...
...
@@ -1226,6 +1226,7 @@ SSDataBlock* createOneDataBlock(const SSDataBlock* pDataBlock, bool copyData) {
SColumnInfoData
colInfo
=
{
0
};
SColumnInfoData
*
p
=
taosArrayGet
(
pDataBlock
->
pDataBlock
,
i
);
colInfo
.
info
=
p
->
info
;
colInfo
.
hasNull
=
true
;
taosArrayPush
(
pBlock
->
pDataBlock
,
&
colInfo
);
}
...
...
source/libs/executor/inc/tsort.h
浏览文件 @
63884b55
...
...
@@ -151,6 +151,13 @@ SSDataBlock* tsortGetSortedDataBlock(const SSortHandle* pSortHandle);
*/
SSortExecInfo
tsortGetSortExecInfo
(
SSortHandle
*
pHandle
);
/**
* get proper sort buffer pages according to the row size
* @param rowSize
* @return
*/
int32_t
getProperSortPageSize
(
size_t
rowSize
);
#ifdef __cplusplus
}
#endif
...
...
source/libs/executor/src/sortoperator.c
浏览文件 @
63884b55
...
...
@@ -420,24 +420,29 @@ SOperatorInfo* createMultiwaySortMergeOperatorInfo(SOperatorInfo** downStreams,
goto
_error
;
}
pInfo
->
binfo
.
pRes
=
pResBlock
;
initResultSizeInfo
(
pOperator
,
1024
);
pInfo
->
pSortInfo
=
pSortInfo
;
pInfo
->
binfo
.
pRes
=
pResBlock
;
pInfo
->
pSortInfo
=
pSortInfo
;
pInfo
->
pColMatchInfo
=
pColMatchColInfo
;
pInfo
->
pInputBlock
=
pInputBlock
;
pOperator
->
name
=
"MultiwaySortMerge"
;
pInfo
->
pInputBlock
=
pInputBlock
;
pOperator
->
name
=
"MultiwaySortMerge"
;
pOperator
->
operatorType
=
QUERY_NODE_PHYSICAL_PLAN_MERGE
;
pOperator
->
blocking
=
false
;
pOperator
->
status
=
OP_NOT_OPENED
;
pOperator
->
info
=
pInfo
;
pInfo
->
bufPageSize
=
rowSize
<
1024
?
1024
:
rowSize
*
2
;
pInfo
->
sortBufSize
=
pInfo
->
bufPageSize
*
16
;
pInfo
->
hasGroupId
=
false
;
pOperator
->
blocking
=
false
;
pOperator
->
status
=
OP_NOT_OPENED
;
pOperator
->
info
=
pInfo
;
pInfo
->
hasGroupId
=
false
;
pInfo
->
prefetchedTuple
=
NULL
;
pOperator
->
pTaskInfo
=
pTaskInfo
;
pInfo
->
bufPageSize
=
getProperSortPageSize
(
rowSize
);
uint32_t
numOfSources
=
taosArrayGetSize
(
pSortInfo
);
numOfSources
=
MAX
(
2
,
numOfSources
);
pInfo
->
sortBufSize
=
numOfSources
*
pInfo
->
bufPageSize
;
pOperator
->
fpSet
=
createOperatorFpSet
(
doOpenMultiwaySortMergeOperator
,
doMultiwaySortMerge
,
NULL
,
NULL
,
destroyMultiwaySortMergeOperatorInfo
,
NULL
,
NULL
,
getMultiwaySortMergeExplainExecInfo
);
...
...
source/libs/executor/src/tsort.c
浏览文件 @
63884b55
...
...
@@ -532,6 +532,19 @@ static int32_t doInternalMergeSort(SSortHandle* pHandle) {
return
0
;
}
int32_t
getProperSortPageSize
(
size_t
rowSize
)
{
uint32_t
defaultPageSize
=
4096
;
uint32_t
pgSize
=
0
;
if
(
rowSize
*
4
>
defaultPageSize
)
{
pgSize
=
rowSize
*
4
;
}
else
{
pgSize
=
defaultPageSize
;
}
return
pgSize
;
}
static
int32_t
createInitialSources
(
SSortHandle
*
pHandle
)
{
size_t
sortBufSize
=
pHandle
->
numOfPages
*
pHandle
->
pageSize
;
...
...
@@ -557,14 +570,9 @@ static int32_t createInitialSources(SSortHandle* pHandle) {
if
(
!
hasGroupId
)
{
// calculate the buffer pages according to the total available buffers.
int32_t
rowSize
=
blockDataGetRowSize
(
pBlock
);
if
(
rowSize
*
4
>
4096
)
{
pHandle
->
pageSize
=
rowSize
*
4
;
}
else
{
pHandle
->
pageSize
=
4096
;
}
// todo!!
pHandle
->
pageSize
=
getProperSortPageSize
(
blockDataGetRowSize
(
pBlock
));
// todo, number of pages are set according to the total available sort buffer
pHandle
->
numOfPages
=
1024
;
sortBufSize
=
pHandle
->
numOfPages
*
pHandle
->
pageSize
;
...
...
@@ -577,7 +585,7 @@ static int32_t createInitialSources(SSortHandle* pHandle) {
if
(
pHandle
->
beforeFp
!=
NULL
)
{
pHandle
->
beforeFp
(
pBlock
,
pHandle
->
param
);
}
// todo relocate the columns
int32_t
code
=
blockDataMerge
(
pHandle
->
pDataBlock
,
pBlock
);
if
(
code
!=
0
)
{
return
code
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录