如何查询Teradata近一周延迟、活跃、空闲会话数及按日时统计会话数
Teradata会话状态查询与维度统计方案
一、查询近一周的延迟、活跃、空闲会话数量
使用Teradata系统视图DBC.SessionInfoV获取实时会话数据,结合会话状态字段与登录时间过滤近一周范围:
SELECT CASE SessionState WHEN 'A' THEN '活跃会话' WHEN 'I' THEN '空闲会话' WHEN 'Q' THEN '延迟队列会话' ELSE '其他状态' END AS 会话状态, COUNT(*) AS 会话数量 FROM DBC.SessionInfoV WHERE LoginTime >= CURRENT_TIMESTAMP - INTERVAL '7' DAY GROUP BY SessionState ORDER BY 会话状态;
关键说明:
SessionState枚举值:A代表正在执行SQL的活跃会话,I代表已登录但无任务的空闲会话,Q代表等待资源的延迟队列会话;如需确认全量状态码,可查询DBC.SessionStateV视图。- 若需按自然日(而非当前时间往前推7天)过滤,将
CURRENT_TIMESTAMP替换为CURRENT_DATE即可。
二、按日/按时维度统计各会话状态数量
历史维度统计依赖DBC.SessionStatsV——这是Teradata定期收集的会话快照表(默认15分钟收集一次,可配置),通过CollectTime字段标记快照生成时间实现维度聚合。
1. 按日统计
SELECT CAST(CollectTime AS DATE) AS 统计日期, CASE SessionState WHEN 'A' THEN '活跃会话' WHEN 'I' THEN '空闲会话' WHEN 'Q' THEN '延迟队列会话' ELSE '其他状态' END AS 会话状态, COUNT(*) AS 会话数量 FROM DBC.SessionStatsV WHERE CollectTime >= CURRENT_DATE - INTERVAL '7' DAY GROUP BY CAST(CollectTime AS DATE), SessionState ORDER BY 统计日期, 会话状态;
2. 按时统计(小时粒度)
SELECT TRUNC(CollectTime, 'HOUR') AS 统计小时, CASE SessionState WHEN 'A' THEN '活跃会话' WHEN 'I' THEN '空闲会话' WHEN 'Q' THEN '延迟队列会话' ELSE '其他状态' END AS 会话状态, COUNT(*) AS 会话数量 FROM DBC.SessionStatsV WHERE CollectTime >= CURRENT_TIMESTAMP - INTERVAL '7' DAY GROUP BY TRUNC(CollectTime, 'HOUR'), SessionState ORDER BY 统计小时, 会话状态;
补充说明:
- 若需15分钟粒度统计(匹配默认快照间隔),将
TRUNC(CollectTime, 'HOUR')替换为TRUNC(CollectTime, 'QUARTER HOUR')即可。 - 查询上述系统视图需具备
SELECT ON DBC.SessionInfoV和SELECT ON DBC.SessionStatsV权限,权限不足时需联系DBA授予。
内容的提问来源于stack exchange,提问作者John J
相关产品推荐
相关产品推荐

