tanqr
#1
【 使用环境 】 测试环境
【 OB 】
【 使用版本 】V4.3.5
【问题描述】
对于一个租户,在创建时通过resource unit分配了log_disk_size。
我可以通过以下SQL可以查看到使用率
select tenant_id, svr_ip, svr_port,
LOG_DISK_IN_USE/1024/1024/1024 LOG_DISK_IN_USE_G,
LOG_DISK_SIZE/1024/1024/1024 LOG_DISK_SIZE_G,
LOG_DISK_IN_USE*100/LOG_DISK_SIZE LOG_DISK_USED_PERCENTAGE
from gv$ob_units;
但实际上,由于Clog的复用的机制,加之log_disk_utilization_threshold参数的原因,基本上使用率处于80%左右。
我现在想知道去除掉复用的clog后,实际“活跃”(包含未转储等,clog 无法回收的)的clog量有多少,怎么查询或计算?
论坛小助手
#4
要查询租户上不可回收的clog大小,可以利用OceanBase提供的系统表和视图来获取相关信息。不可回收的clog主要是指那些由于尚未转储到SSTable或其他原因无法立即回收的日志文件。根据给定的文档片段,可以参考以下SQL语句来计算未转储的日志大小,这可以帮助您估算‘活跃’clog的数量:
-- 查询未转储的日志大小
SELECT
tenant_id,
svr_ip,
svr_port,
SUM(IFNULL(data_block_count, 0) + IFNULL(index_block_count, 0) + IFNULL(linked_block_count, 0)) * 2 * 1024 * 1024 / 1024.0 / 1024 / 1024 AS unflushed_clog_size_gb
FROM
oceanbase.__all_virtual_table_mgr
WHERE
tenant_id = ${租户ID} AND
table_type >= 10 AND
size > 0 AND
role = 'LEADER'
GROUP BY
tenant_id, svr_ip, svr_port;
此查询将汇总所有未转储到SSTable的clog的大小,单位为GB。请注意替换 ${租户ID} 为您想要查询的具体租户ID。上述查询基于 __all_virtual_table_mgr 表,该表包含了所有与租户相关的表的信息,包括clog状态。
注意事项
- 上述查询可能需要一定的执行时间,尤其是对于大规模的数据集。
- 如果您的环境中有多个副本,则需要确保只选择leader副本,以避免重复计算。
解释
-
data_block_count, index_block_count, 和 linked_block_count 表示数据块、索引块和链接块的数量,乘以2 * 1024 * 1024得到字节数。
-
table_type >= 10 表示这些表是SSTable,这意味着它们已经经过了转储。
-
size > 0 表示这些表是有实际数据的。
-
role = 'LEADER' 确保只选择leader副本。
限制
- 此查询假设所有未转储的clog都是不可回收的。实际上,可能还存在其他原因导致某些clog无法立即回收,但这通常不是主要因素。
参考文档
检索到的文档如下:
- 历史合并信息tablet_id查询
- SQL 性能问题的典型场景和排查思路