Merge pull request #29645 from taosdata/enh/TS-5945-main

enh: accelerate tsdb snapshot when data are all in stt file
This commit is contained in:
Hongze Cheng 2025-01-23 18:10:19 +08:00 committed by GitHub
commit a653c00f73
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 2 deletions

View File

@ -559,6 +559,7 @@ struct STsdbSnapWriter {
SIterMerger* tombIterMerger; SIterMerger* tombIterMerger;
// writer // writer
bool toSttOnly;
SFSetWriter* fsetWriter; SFSetWriter* fsetWriter;
} ctx[1]; } ctx[1];
}; };
@ -622,6 +623,7 @@ static int32_t tsdbSnapWriteFileSetOpenReader(STsdbSnapWriter* writer) {
int32_t code = 0; int32_t code = 0;
int32_t lino = 0; int32_t lino = 0;
writer->ctx->toSttOnly = false;
if (writer->ctx->fset) { if (writer->ctx->fset) {
#if 0 #if 0
// open data reader // open data reader
@ -656,6 +658,14 @@ static int32_t tsdbSnapWriteFileSetOpenReader(STsdbSnapWriter* writer) {
// open stt reader array // open stt reader array
SSttLvl* lvl; SSttLvl* lvl;
TARRAY2_FOREACH(writer->ctx->fset->lvlArr, lvl) { TARRAY2_FOREACH(writer->ctx->fset->lvlArr, lvl) {
if (lvl->level != 0) {
if (TARRAY2_SIZE(lvl->fobjArr) > 0) {
writer->ctx->toSttOnly = true;
}
continue; // Only merge level 0
}
STFileObj* fobj; STFileObj* fobj;
TARRAY2_FOREACH(lvl->fobjArr, fobj) { TARRAY2_FOREACH(lvl->fobjArr, fobj) {
SSttFileReader* reader; SSttFileReader* reader;
@ -782,7 +792,7 @@ static int32_t tsdbSnapWriteFileSetOpenWriter(STsdbSnapWriter* writer) {
SFSetWriterConfig config = { SFSetWriterConfig config = {
.tsdb = writer->tsdb, .tsdb = writer->tsdb,
.toSttOnly = false, .toSttOnly = writer->ctx->toSttOnly,
.compactVersion = writer->compactVersion, .compactVersion = writer->compactVersion,
.minRow = writer->minRow, .minRow = writer->minRow,
.maxRow = writer->maxRow, .maxRow = writer->maxRow,
@ -791,7 +801,7 @@ static int32_t tsdbSnapWriteFileSetOpenWriter(STsdbSnapWriter* writer) {
.fid = writer->ctx->fid, .fid = writer->ctx->fid,
.cid = writer->commitID, .cid = writer->commitID,
.did = writer->ctx->did, .did = writer->ctx->did,
.level = 0, .level = writer->ctx->toSttOnly ? 1 : 0,
}; };
// merge stt files to either data or a new stt file // merge stt files to either data or a new stt file
if (writer->ctx->fset) { if (writer->ctx->fset) {