租户上不可以回收的clog大小怎么查询

【 使用环境 】 测试环境
【 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量有多少,怎么查询或计算?

@论坛小助手

要查询租户上不可回收的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无法立即回收,但这通常不是主要因素。

参考文档

检索到的文档如下:

  1. 历史合并信息tablet_id查询
  2. SQL 性能问题的典型场景和排查思路

请问下,这个数据怎么看叻?

最后一列是不可回收空间大小