Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7fab74da
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
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看板
提交
7fab74da
编写于
7月 11, 2023
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enhance: add tsdb stt block data cache
上级
95a18a3c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
51 addition
and
3 deletion
+51
-3
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+3
-0
source/dnode/vnode/src/tsdb/tsdbCache.c
source/dnode/vnode/src/tsdb/tsdbCache.c
+3
-0
source/dnode/vnode/src/tsdb/tsdbMergeTree.c
source/dnode/vnode/src/tsdb/tsdbMergeTree.c
+45
-3
未找到文件。
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
7fab74da
...
...
@@ -376,6 +376,8 @@ struct STsdb {
SLRUCache
*
biCache
;
TdThreadMutex
biMutex
;
SRocksCache
rCache
;
SLRUCache
*
sttBlockCache
;
SLRUCache
*
sttBlkCache
;
};
struct
TSDBKEY
{
...
...
@@ -705,6 +707,7 @@ typedef struct SSttBlockLoadInfo {
SArray
*
aSttBlk
;
int32_t
blockIndex
[
2
];
// to denote the loaded block in the corresponding position.
int32_t
currentLoadBlockIndex
;
LRUHandle
*
blockDataHandle
;
int32_t
loadBlocks
;
double
elapsedTime
;
STSchema
*
pSchema
;
...
...
source/dnode/vnode/src/tsdb/tsdbCache.c
浏览文件 @
7fab74da
...
...
@@ -1210,12 +1210,15 @@ int32_t tsdbOpenCache(STsdb *pTsdb) {
pTsdb
->
flushState
.
pTsdb
=
pTsdb
;
pTsdb
->
flushState
.
flush_count
=
0
;
pTsdb
->
sttBlockCache
=
taosLRUCacheInit
(
128
*
1024
*
1024
,
-
1
,
0
.
0
);
pTsdb
->
sttBlkCache
=
taosLRUCacheInit
(
4
*
1024
*
1024
,
-
1
,
0
.
0
);
_err:
pTsdb
->
lruCache
=
pCache
;
return
code
;
}
void
tsdbCloseCache
(
STsdb
*
pTsdb
)
{
taosLRUCacheCleanup
(
pTsdb
->
sttBlockCache
);
SLRUCache
*
pCache
=
pTsdb
->
lruCache
;
if
(
pCache
)
{
taosLRUCacheEraseUnrefEntries
(
pCache
);
...
...
source/dnode/vnode/src/tsdb/tsdbMergeTree.c
浏览文件 @
7fab74da
...
...
@@ -90,11 +90,52 @@ void *destroyLastBlockLoadInfo(SSttBlockLoadInfo *pLoadInfo) {
taosMemoryFree
(
pLoadInfo
);
return
NULL
;
}
static
void
deleteSttBlockDataCache
(
const
void
*
key
,
size_t
keyLen
,
void
*
value
,
void
*
ud
)
{
SBlockData
*
pBlockData
=
value
;
tBlockDataDestroy
(
pBlockData
);
}
static
SBlockData
*
loadLastBlock
(
SLDataIter
*
pIter
,
const
char
*
idStr
)
{
int32_t
code
=
0
;
// (pReader->pSet->fid, iStt, pReader->pSet->pHeadF->commitID) -> aSttBlk global cache
// (pIter->pReader->pSet->fid, pIter->iStt, pIter->pReader->pSet->pHeadF->commitID, pIter->pSttBlk->bInfo.offset) -> SBlockData
SSttBlockLoadInfo
*
pInfo
=
pIter
->
pBlockLoadInfo
;
if
(
pIter
->
pSttBlk
==
NULL
||
pInfo
->
pSchema
==
NULL
)
{
pInfo
->
blockDataHandle
=
NULL
;
return
NULL
;
}
struct
{
int32_t
fid
;
int32_t
iStt
;
int64_t
cid
;
int64_t
offset
;
}
key
=
{.
fid
=
pIter
->
pReader
->
pSet
->
fid
,
.
iStt
=
pIter
->
iStt
,
.
cid
=
pIter
->
pReader
->
pSet
->
pHeadF
->
commitID
,
.
offset
=
pIter
->
pSttBlk
->
bInfo
.
offset
};
int32_t
code
=
0
;
LRUHandle
*
h
=
taosLRUCacheLookup
(
pIter
->
pReader
->
pTsdb
->
sttBlockCache
,
&
key
,
sizeof
(
key
));
if
(
!
h
)
{
SSttBlockLoadInfo
*
pInfo
=
pIter
->
pBlockLoadInfo
;
SBlockData
*
pBlockData
=
taosMemoryMalloc
(
sizeof
(
SBlockData
));
TABLEID
id
=
{
0
};
if
(
pIter
->
pSttBlk
->
suid
!=
0
)
{
id
.
suid
=
pIter
->
pSttBlk
->
suid
;
}
else
{
id
.
uid
=
pIter
->
uid
;
}
tBlockDataInit
(
pBlockData
,
&
id
,
pInfo
->
pSchema
,
pInfo
->
colIds
,
pInfo
->
numOfCols
);
tsdbReadSttBlock
(
pIter
->
pReader
,
pIter
->
iStt
,
pIter
->
pSttBlk
,
pBlockData
);
int
charge
=
2
*
1024
*
1024
;
//TODO
taosLRUCacheInsert
(
pIter
->
pReader
->
pTsdb
->
sttBlockCache
,
&
key
,
sizeof
(
key
),
pBlockData
,
charge
,
deleteSttBlockDataCache
,
&
h
,
TAOS_LRU_PRIORITY_LOW
,
NULL
);
}
SBlockData
*
pBlockData
=
taosLRUCacheValue
(
pIter
->
pReader
->
pTsdb
->
sttBlockCache
,
h
);
pInfo
->
blockDataHandle
=
h
;
return
pBlockData
;
if
(
pInfo
->
blockIndex
[
0
]
==
pIter
->
iSttBlk
)
{
if
(
pInfo
->
currentLoadBlockIndex
!=
0
)
{
tsdbDebug
(
"current load index is set to 0, block index:%d, file index:%d, due to uid:%"
PRIu64
", load data, %s"
,
...
...
@@ -271,7 +312,7 @@ int32_t tLDataIterOpen(struct SLDataIter *pIter, SDataFReader *pReader, int32_t
if
(
!
pBlockLoadInfo
->
sttBlockLoaded
)
{
int64_t
st
=
taosGetTimestampUs
();
pBlockLoadInfo
->
sttBlockLoaded
=
true
;
// (pReader->pSet->fid, iStt, pReader->pSet->pHeadF->commitID, iStt) -> aSttBlk global cache
code
=
tsdbReadSttBlk
(
pReader
,
iStt
,
pBlockLoadInfo
->
aSttBlk
);
if
(
code
)
{
return
code
;
...
...
@@ -512,6 +553,7 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
}
if
(
skipBlock
||
pIter
->
iRow
>=
pBlockData
->
nRow
||
pIter
->
iRow
<
0
)
{
taosLRUCacheRelease
(
pIter
->
pReader
->
pTsdb
->
sttBlockCache
,
pIter
->
pBlockLoadInfo
->
blockDataHandle
,
false
);
tLDataIterNextBlock
(
pIter
,
idStr
);
if
(
pIter
->
pSttBlk
==
NULL
)
{
// no more data
goto
_exit
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录