DB2性能监控:找出关键SQL

4星 · 超过85%的资源 需积分: 46 30 下载量 35 浏览量 更新于2024-09-15 收藏 2KB TXT 举报
"DB2性能监控SQL主要关注的是数据库中运行时间最长、执行频率最高、执行成本最昂贵以及准备和预编译时间消耗最多的SQL语句。为了有效地管理和优化DB2数据库的性能,管理员通常会使用特定的查询来获取这些关键信息。以下是一些用于监控DB2 SQL性能的关键查询示例。 1. 运行最长的SQL: ``` db2 "select elapsed_time_min, appl_status, agent_id from sysibmadm.long_running_sql order by elapsed_time_min desc fetch first 5 rows only" ``` 这个查询返回当前正在运行的SQL语句中,按运行时间降序排列的前5个。`elapsed_time_min` 指的是SQL语句执行的总时间(分钟)。 2. 执行次数最多的SQL: ``` db2 "select num_executions, average_execution_time_s, prep_time_percent from sysibmadm.query_prep_cost order by num_executions desc" ``` 此查询显示执行次数最多的SQL语句,同时提供平均执行时间和预编译时间的百分比。`num_executions` 是执行次数,`average_execution_time_s` 是平均执行时间(秒),`prep_time_percent` 是预编译时间占总执行时间的比例。 3. 执行成本最高的SQL: ``` db2 "select * from sysibmadm.top_dynamic_sql order by num_executions desc fetch first 5 rows only" ``` 这个查询给出了动态SQL中执行次数最多的前5个,但不直接反映执行成本,通常执行次数多的SQL也意味着成本高。 4. 准备和预编译时间最长的SQL: ``` prep_time_ms prep_time_percent ``` `prep_time_ms` 显示SQL语句的预编译时间(毫秒),而`prep_time_percent` 提供预编译时间在总执行时间中的比例,这两个指标对于评估SQL语句的准备效率很重要。 5. 监控活动应用和SQL: ``` select agent_id, rows_selected, rows_read from sysibmadm.snapappl fetch first 10 rows only ``` 该查询显示了当前活动应用的前10个,包括它们选择和读取的行数,这对于理解数据库的活跃程度和资源使用情况很有帮助。 6. 展示详细信息的SQL: ``` select substr(appl_name,1,15) as Appl_name, elapsed_time_min as "ElapsedMin.", appl_status as "Status", substr(authid,1,10) as auth_id, substr(inbound_comm_address,1,15) as "IPAddress", substr(stmt_text,1,30) as "SQLStatement" from sysibmadm.long_running_sql order by 2 desc ``` 这个查询提供了更详细的关于长时间运行SQL的信息,包括应用程序名称、运行时间、状态、认证ID和IP地址,以及SQL语句的一部分。 通过这些监控查询,DB2管理员可以识别性能瓶颈,进行调优工作,确保数据库高效稳定地运行。例如,如果发现某个SQL语句执行时间过长,可能需要考虑优化查询结构、创建合适的索引或者调整数据库配置。同样,频繁执行的SQL语句也可能需要关注,因为它们可能对系统资源造成持续压力。"