Skip to content

Commit f716257

Browse files
authored
feat: implement fixed bucket table distribution (#35092)
1 parent 88dcf28 commit f716257

14 files changed

Lines changed: 989 additions & 20 deletions

File tree

docs/zh/05-basic/02-insert.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,19 @@ delete from meters where ts < '2021-10-01 10:40:00.100' ;
146146
通过查询系统表 `INS_DISK_USAGE`,可以查看数据库的压缩率和磁盘空间,参见 [文档](../../reference/taos-sql/database/#查看数据库的磁盘空间占用)
147147

148148
```sql
149-
select * from INFORMATION_SCHEMA.INS_DISK_USAGE where db_name = 'db_name';
149+
select * from INFORMATION_SCHEMA.INS_DISK_USAGE where db_name = 'db_name';
150150
```
151151

152152
通过如下命令,可以查看表的表的压缩率及具体分布情况,参见 [文档](../../reference/taos-sql/show/#show-table-distributed)
153153

154154
```sql
155155
show table distributed table_name;
156156
```
157+
158+
上面的 `show` 命令是按照数据块可能的数据条数动态计算的等分区间显示的分布情况,也可使用下面的语句查询系统表 `INS_TABLE_FIXED_DISTRIBUTED` 按照固定区间查看分布情况,后者更适合多表低频等单个数据块中数据条数较少的场景。
159+
160+
注意:目前,下面的 SQL 语句仅支持使用 `SELECT *`,不支持指定具体的查询字段,且 `WHERE` 条件中也只能包含 `` 关系的 `db_name``table_name` 条件。
161+
162+
```sql
163+
select * from INFORMATION_SCHEMA.INS_TABLE_FIXED_DISTRIBUTED where db_name = 'db_name' and table_name = 'table_name';
164+
```

include/common/systable.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ extern "C" {
4848
#define TSDB_INS_TABLE_COLS "ins_columns"
4949
#define TSDB_INS_TABLE_VC_COLS "ins_virtual_child_columns"
5050
#define TSDB_INS_TABLE_TABLE_DISTRIBUTED "ins_table_distributed"
51+
#define TSDB_INS_TABLE_TABLE_FIXED_DISTRIBUTED "ins_table_fixed_distributed"
5152
#define TSDB_INS_TABLE_USERS "ins_users"
5253
#define TSDB_INS_TABLE_USERS_FULL "ins_users_full"
5354
#define TSDB_INS_TABLE_TOKENS "ins_tokens"

include/common/tcommon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ typedef struct STableBlockDistInfo {
307307
uint32_t numOfSttRows;
308308
uint32_t numOfVgroups;
309309
int32_t blockRowsHisto[20];
310+
int32_t blockRowsHistoFixed[8]; // buckets: ≤64, ≤128, ≤256, ≤512, ≤1024, ≤2048, ≤4096, >4096
310311
} STableBlockDistInfo;
311312

312313
int32_t tSerializeBlockDistInfo(void* buf, int32_t bufLen, const STableBlockDistInfo* pInfo);

source/common/src/systable.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,34 @@ static const SSysDbTableSchema userTblDistSchema[] = {
290290
{.name = "seek_header_time", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
291291
};
292292

293+
static const SSysDbTableSchema userTblFixedDistSchema[] = {
294+
{.name = "db_name", .bytes = SYSTABLE_SCH_DB_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
295+
{.name = "table_name", .bytes = SYSTABLE_SCH_TABLE_NAME_LEN, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = false},
296+
{.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
297+
{.name = "total_blocks", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
298+
{.name = "total_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
299+
{.name = "average_size", .bytes = 8, .type = TSDB_DATA_TYPE_DOUBLE, .sysInfo = false},
300+
{.name = "compression_ratio", .bytes = 8, .type = TSDB_DATA_TYPE_DOUBLE, .sysInfo = false},
301+
{.name = "block_rows", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
302+
{.name = "min_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false},
303+
{.name = "max_rows", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = false},
304+
{.name = "avg_rows", .bytes = 8, .type = TSDB_DATA_TYPE_DOUBLE, .sysInfo = false},
305+
{.name = "in_mem_rows", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
306+
{.name = "stt_rows", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
307+
{.name = "total_tables", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
308+
{.name = "total_filesets", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
309+
{.name = "total_vgroups", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
310+
{.name = "row_size", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
311+
{.name = "block_dist_64", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
312+
{.name = "block_dist_128", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
313+
{.name = "block_dist_256", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
314+
{.name = "block_dist_512", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
315+
{.name = "block_dist_1024", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
316+
{.name = "block_dist_2048", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
317+
{.name = "block_dist_4096", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
318+
{.name = "block_dist_other", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = false},
319+
};
320+
293321
static const SSysDbTableSchema userUsersSchema[] = {
294322
{.name = "name", .bytes = TSDB_USER_LEN + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR, .sysInfo = true},
295323
{.name = "super", .bytes = 1, .type = TSDB_DATA_TYPE_TINYINT, .sysInfo = true},
@@ -777,6 +805,7 @@ static const SSysTableMeta infosMeta[] = {
777805
{TSDB_INS_TABLE_TAGS, userTagsSchema, tListLen(userTagsSchema), false, PRIV_CAT_BASIC},
778806
{TSDB_INS_TABLE_COLS, userColsSchema, tListLen(userColsSchema), false, PRIV_CAT_BASIC},
779807
{TSDB_INS_TABLE_VC_COLS, userVctbColsSchema, tListLen(userVctbColsSchema), false, PRIV_CAT_BASIC},
808+
{TSDB_INS_TABLE_TABLE_FIXED_DISTRIBUTED, userTblFixedDistSchema, tListLen(userTblFixedDistSchema), false, PRIV_CAT_BASIC},
780809
// {TSDB_INS_TABLE_TABLE_DISTRIBUTED, userTblDistSchema, tListLen(userTblDistSchema), PRIV_CAT_PRIVILEGED},
781810
{TSDB_INS_TABLE_USERS, userUsersSchema, tListLen(userUsersSchema), true, PRIV_CAT_SECURITY},
782811
{TSDB_INS_TABLE_USERS_FULL, userUsersFullSchema, tListLen(userUsersFullSchema), true, PRIV_CAT_SECURITY},

source/dnode/vnode/src/tsdb/tsdbRead2.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6916,6 +6916,16 @@ int32_t tsdbGetFileBlocksDistInfo2(STsdbReader* pReader, STableBlockDistInfo* pT
69166916
int32_t bucketIndex = getBucketIndex(pTableBlockInfo->defMinRows, bucketRange, numOfRows, numOfBuckets);
69176917
pTableBlockInfo->blockRowsHisto[bucketIndex]++;
69186918

6919+
// fixed-size row-count histogram
6920+
if (numOfRows <= 64) pTableBlockInfo->blockRowsHistoFixed[0]++;
6921+
else if (numOfRows <= 128) pTableBlockInfo->blockRowsHistoFixed[1]++;
6922+
else if (numOfRows <= 256) pTableBlockInfo->blockRowsHistoFixed[2]++;
6923+
else if (numOfRows <= 512) pTableBlockInfo->blockRowsHistoFixed[3]++;
6924+
else if (numOfRows <= 1024) pTableBlockInfo->blockRowsHistoFixed[4]++;
6925+
else if (numOfRows <= 2048) pTableBlockInfo->blockRowsHistoFixed[5]++;
6926+
else if (numOfRows <= 4096) pTableBlockInfo->blockRowsHistoFixed[6]++;
6927+
else pTableBlockInfo->blockRowsHistoFixed[7]++;
6928+
69196929
hasNext = blockIteratorNext(&pStatus->blockIter);
69206930
} else {
69216931
code = initForFirstBlockInFile(pReader, pBlockIter);

0 commit comments

Comments
 (0)