如何追踪HANA指定模式下表操作的CPU使用率?
针对指定模式/表的CPU使用率追踪方案
要追踪特定模式或表操作的CPU消耗,无法直接通过主机级的M_HOST_RESOURCE_UTILIZATION实现,需要从SQL执行层面的统计视图入手,这类视图能将CPU消耗关联到具体的数据库对象。以下是可用的视图和查询示例:
核心可用视图
M_SQL_PLAN_CACHE:缓存当前活跃的SQL执行计划,包含每个计划的累计CPU时间、执行次数等指标,可直接关联到对应的模式和表。M_EXECUTED_STATEMENTS:记录已执行的SQL语句(包括已从缓存中淘汰的语句),包含单条语句的CPU使用量、执行时间等细节,适合追溯历史操作的CPU消耗。M_TABLE_STATISTICS:辅助视图,记录表的访问次数、读写量等,可结合CPU统计数据更全面分析表的负载情况。
实用查询示例
1. 统计指定模式下各表的累计CPU消耗
此查询从执行计划缓存中聚合指定模式下所有表的CPU使用总量,帮助定位高CPU消耗的表:
SELECT SCHEMA_NAME, OBJECT_NAME, SUM(TOTAL_CPU_TIME) AS 累计CPU耗时(毫秒), SUM(EXECUTION_COUNT) AS 执行次数, AVG(CPU_TIME_PER_EXECUTION) AS 单次执行平均CPU耗时(毫秒) FROM M_SQL_PLAN_CACHE WHERE SCHEMA_NAME = '你的目标模式名' AND OBJECT_NAME IS NOT NULL GROUP BY SCHEMA_NAME, OBJECT_NAME ORDER BY 累计CPU耗时(毫秒) DESC;
2. 追溯指定表的历史操作CPU消耗
此查询从已执行语句日志中提取针对目标表的所有操作,查看每条语句的CPU消耗和执行时间:
SELECT STATEMENT_ID, SCHEMA_NAME, OBJECT_NAME, CPU_TIME AS CPU耗时(毫秒), START_TIME AS 执行时间, SUBSTRING(STATEMENT_STRING, 1, 200) AS 语句片段 FROM M_EXECUTED_STATEMENTS WHERE SCHEMA_NAME = '你的目标模式名' AND OBJECT_NAME = '你的目标表名' ORDER BY 执行时间 DESC;
注意事项
M_EXECUTED_STATEMENTS的数据有保留周期,由系统参数控制,若需长期追踪,建议定期将数据导出到自定义表存储。- 对于多表关联的复杂查询,
OBJECT_NAME会列出所有涉及的表,需结合语句内容判断具体是哪个表的操作主导了CPU消耗。 - 可将对象级CPU统计结果与
M_HOST_RESOURCE_UTILIZATION的整体CPU数据对比,计算特定表操作对主机CPU的贡献占比。
内容的提问来源于stack exchange,提问作者A Beginner
相关产品推荐
相关产品推荐

