1、可以查看memstore使用情况
select round(ACTIVE_SPAN/1024/1024/1024,2) as ACTIVE_SPAN_GB , round(FREEZE_TRIGGER/1024/1024/1024,2) as FREEZE_TRIGGER_GB, round(MEMSTORE_USED/1024/1024/1024,2) as MEMSTORE_USED_GB , round(MEMSTORE_LIMIT/1024/1024/1024, 2) as MEMSTORE_LIMIT_GB from GV$OB_MEMSTORE where tenant_id = 1002;
– 查看内存各模块占用
SELECT
ctx_name,
SUM(hold) AS total_hold,
ROUND(SUM(hold) / 1024.0 / 1024.0, 2) AS total_mb,
SUM(count) AS total_count
FROM oceanbase.__all_virtual_memory_info
WHERE tenant_id = 1002
GROUP BY ctx_name
ORDER BY total_hold DESC;
---- 找出占用 memstore 最多的 tablet
SELECT
ttl.table_id,
ttl.tablet_id,
ttl.ls_id,
COUNT(*) AS memstore_count,
SUM(CASE WHEN tma.is_active = 1 THEN 1 ELSE 0 END) AS active_count
FROM oceanbase.__all_virtual_tablet_to_ls ttl
LEFT JOIN oceanbase.__all_virtual_tenant_memstore_allocator_info tma
ON ttl.tenant_id = tma.tenant_id
AND ttl.tablet_id = tma.tablet_id
AND ttl.ls_id = tma.ls_id
WHERE ttl.tenant_id = 1002
GROUP BY ttl.table_id, ttl.tablet_id, ttl.ls_id
HAVING active_count > 0
ORDER BY active_count DESC
LIMIT 20;
应急的话:
1、可以手动触发 Minor Freeze
– 持续监控 memstore 使用率
SELECT memstore_used, memstore_limit,
ROUND(memstore_used * 100.0 / NULLIF(memstore_limit, 0), 2) AS usage_pct
FROM oceanbase.__all_virtual_tenant_memstore_info
WHERE tenant_id = 1002;
–查看长时间运行的事务(可能阻塞 memstore 释放)
SELECT count(1)
FROM GV$OB_TRANSACTION_PARTICIPANTS
WHERE CTX_CREATE_TIME < date_sub(now(), INTERVAL 600 SECOND)
AND STATE = ‘INIT’;