像L0层内部分为level-0
到 level-n
层,怎么查询L0内部有多少层,和每层有多少 个sstable。
谢谢!
目前没有直接的SQL,你可以参考下这个帖子
sstable文件问题dvmove_gaMTIwMjU5NTAzNC4xNzE0OTc1MTY1_ga_T35KTM57DZ*MTcyOTIyOTY3Ny4yNjcuMS4xNzI5MjM4NTQzLjM0LjAuMA…
L0内部有多少层,和每层有多少 个sstable,是OB自己管理的?会自动跟随存储或者内存大小自动变化吗?
L0内部有多少层,和每层有多少 个sstable,是OB自己管理的?会自动跟随存储或者内存大小自动变化吗?
L0 层内部可以分为多个层级,具体分为 level-0 到 level-n 层,每层的最大容纳 SSTable 个数相同。L0 层的层数和每层的最大 SSTable 数量是由 OceanBase 数据库通过 server 级配置参数来设置的。
-
L0 层的层数:L0 层可以分为多个子层,从 level-0 到 level-n。这些子层的数量是可以通过配置参数来设定的。
-
每层的 SSTable 数量:每层的最大 SSTable 数量也是通过配置参数来设定的,每层的最大 SSTable 数量是相同的。
-
自动调整:虽然 L0 层的层数和每层的最大 SSTable 数量可以通过配置参数来设定,但 OceanBase 数据库并不会根据存储或内存大小自动调整这些参数。这意味着管理员需要根据实际情况手动调整这些参数,以确保最佳的性能和资源利用率。
如果需要根据存储或内存大小动态调整 L0 层的层数和每层的 SSTable 数量,建议定期监控系统的性能指标,并根据实际情况手动调整相关配置参数。
都是有参数设定的,比如L0层转储出来多少后就会触发压缩变成L1,GV$OB_TABLET_COMPACTION_HISTORY 里面能查出来每张表具体的mini merge和minor merge次数
再问一下,实际应用中层数和每层 SSTable ,设置多少才算控制在合理范围。有什么指标吗?
实际应用中层数和每层 SSTable ,设置多少才算控制在合理范围。有什么指标吗?
合理的范围和参考指标
- L0 层的 Mini SSTable 数量:
-
L0 层可以存在多个 Mini SSTable,但过多的 Mini SSTable 会导致 L0 层内部 Compaction 的频率增加,从而增加写放大。因此,建议保持 L0 层的 Mini SSTable 数量在一个合理的范围内,避免过多。
-
可以通过调整 freeze_trigger_percentage 参数来控制 MemTable 冻结的时机,从而间接控制 L0 层 Mini SSTable 的数量。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001052389
- L1 层的 Minor SSTable 数量:
- L1 层通常只有一个 Minor SSTable。当 L0 层 Mini SSTable 的总大小达到一定阈值时,会触发 L1 Compaction,生成新的 Minor SSTable 并替换旧的 Minor SSTable。
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209912?back=kb
- L2 层的 Major SSTable 数量:
-
L2 层通常只有一个 Major SSTable,它是基线数据,由多次 Minor Compaction 合并而成。
-
可以通过调整 major_compact_trigger 参数来控制 Major Compaction 的触发时机,从而影响 L2 层 Major SSTable 的生成频率。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001431196
其他参考指标
-
memstore_limit_percentage:用于设置租户使用 MemStore 的内存占其总可用内存的百分比,默认值是 50,取值范围是 [1, 99]。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001431218 -
freeze_trigger_percentage:用于设置触发全局冻结的租户使用内存阈值,默认值是 20,取值范围是 (0, 100)。
-
major_compact_trigger:用于设置多少次转储并触发一次全局合并。取值范围为 [0, 65535]。
通过合理设置这些参数,可以有效地管理和优化 OceanBase 数据库的分层转储策略,确保系统的性能和稳定性。
SELECT l.database_name, l.table_name, m.svr_ip
, case m.table_type
when 10 then 'MAJOR_SSTABLE' when 11 then 'MINOR_SSTABLE' when 12 then 'MINI_SSTABLE' when 17 then 'COLUMN_ORIENTED_SSTABLE' when 18 then 'NORMAL_COLUMN_GROUP_SSTABLE'
when 21 then 'DDL_MERGE_CO_SSTABLE' when 27 then 'MDS_MINOR_SSTABLE' when 26 then 'MDS_MINI_SSTABLE'
else concat(m.table_type,':','UNKOWN') end as mgr_table_type
, count(*), round(SUM(size)/1024/1024,2) data_size_mb
FROM oceanbase.__all_virtual_table_mgr m join oceanbase.cdb_ob_table_locations l on (m.tenant_id=l.tenant_id and m.tablet_id=l.tablet_id)
WHERE m.tenant_id=1022 and m.table_type >= 1 and l.database_name in ('zabbix') and l.table_name in ('trends')
GROUP BY l.database_name, l.table_name, m.svr_ip, m.table_type
ORDER BY l.database_name, l.table_name, m.svr_ip, m.table_type
;
这个三倍sstable问题已经查到了cdb_ob_table_locations里有三副本信息,你的sql join以后就是会重复三条记录。