和oracle的top sql对应的是sysibmadm.top_dynamic_sql,以下的视图所在的模式都是sysibmadm
示例:使用快照管理视图来标识高成本应用程序
ShopMart 数据库上最近的工作负载增长已开始影响到整体数据库性能。Jessie 是 ShopMart 的 DBA,她尝试使用下列管理视图来标识日常工作负载中较大的资源使用者:
APPLICATION_PERFORMANCE
此视图帮助 Jessie 标识可能正在执行大型表扫描操作的应用程序:
connect to shopmart;
select AGENT_ID, ROWS_SELECTED, ROWS_READ from APPLICATION_PERFORMANCE;
ROWS_SELECTED 值显示返回给应用程序的行数,ROWS_READ 值显示在基本表中访问的行数。如果选择率很低,则表示该应用程序可能正在执行表扫描操作,通过创建索引可以避免应用程序执行该操作。Jessie 使用此视图来标识可能有问题的查询,然后,她可以进行进一步调查,即查看 SQL 以确定是否能够减少查询在执行时读取的行数。
LONG_RUNNING_SQL
Jessie 使用 LONG_RUNNING_SQL 管理视图来标识当前正在执行的运行时间最长的查询:
connect to shopmart;
select ELAPSED_TIME_MIN, APPL_STATUS, AGENT_ID from long_running_sql
order by ELAPSED_TIME_MIN desc fetch first 5 rows only;
通过使用此视图,她可以确定这些查询已运行的时间长度以及这些查询的状态。如果某个查询已执行了很长时间并且正在等待锁,她就可以使用对特定代理程序标识执行查询的 LOCKWAITS 或 LOCK_HELD 管理视图来进行进一步调查。LONG_RUNNING_SQL 视图还会指出正在执行的语句并允许她标识可能有问题的 SQL。
QUERY_PREP_COST
Jessie 使用 QUERY_PREP_COST 来对已确定有问题的查询进行故障诊断。此视图可以指出查询的运行频率以及这些查询中每个查询的平均执行时间:
connect to shopmart;
select NUM_EXECUTIONS, AVERAGE_EXECUTION_TIME_S, PREP_TIME_PERCENT from
QUERY_PREP_COST order by NUM_EXECUTIONS desc;
PREP_TIME_PERCENT 值向 Jessie 指出准备查询时耗用的时间在查询执行时间中所占的百分比。如果编译和优化查询时耗用的时间几乎与查询的执行时间一样长,那么,Jessie 可以建议该查询的所有者更改用于该查询的优化类。降低优化类可以使该查询更快地完成优化,从而更快地返回结果。但是,如果某个查询需要相当长的时间来进行准备,但要执行数千次(而不必再次进行准备),则更改优化类并不能提高查询性能。
TOP_DYNAMIC_SQL
Jessie 使用 TOP_DYNAMIC_SQL 视图来标识执行频率最高、运行时间最长和排序次数最多的动态 SQL 语句。有了此信息,Jessie 在进行 SQL 调整工作时就可以把注意力放在代表某些最大资源使用者的查询上。
为了标识运行频率最高的动态 SQL 语句,Jessie 发出以下语句:
connect to shopmart;
select * from TOP_DYNAMIC_SQL order by NUM_EXECUTIONS
desc fetch first 5 rows only;
此语句返回执行频率最高的 5 个动态 SQL 语句的所有执行时间、排序执行次数和语句文本详细信息。
为了标识执行时间最长的动态 SQL 语句,Jessie 检查 AVERAGE_EXECUTION_TIME_S 值最大的 5 个查询:
connect to shopmart;
select * from TOP_DYNAMIC_SQL order by AVERAGE_EXECUTION_TIME_S
desc fetch first 5 rows only;
为了查看排序次数最多的动态 SQL 语句的详细信息,Jessie 发出以下语句:
connect to shopmart;
select STMT_SORTS, SORTS_PER_EXECUTION, substr(STMT_TEXT,1,60) as STMT_TEXT
from TOP_DYNAMIC_SQL order by STMT_SORTS desc fetch first 5 rows only;