打开和关闭快照
缺省情况不打开 DB2 监控,必须在连接或实例级别上进行设置。有一系列监视器开关来决定是否监控某种数据元素。还预留了一个内存堆,用于包含为监控而存储的信息。
1:在instance级别上设置监视器开关
在实例级别上设置监视器开关会影响连接到该实例中任何数据库的所有用户。
下面是监视器开关
DFT_MON_STMT:语句监视器(用于动态 SQL)
DFT_MON_TABLE:表监视器
DFT_MON_LOCK:锁监视器
DFT_MON_BUFPOOL:缓冲池监视器
DFT_MON_SORT:排序监视器
DFT_MON_UOW:工作单元信息
DFT_MON_TIMESTAMP:跟踪时间戳记信息
这些开关的值存储在数据库管理器配置信息中(都是联机配置参数)
例:db2 update dbm cfg using DFT_MON_LOCK ON
2:在应用程序级别上设置监视器开关
也可以在应用程序级别上设置监视器开关;用这种方法设置开关只适用于特定的应用程序。如果您在命令提示符或命令窗口中使用下面列出的方法,所做的更改将只适用于这个特定的提示符窗口。
开关名称:
Bufferpool
Lock
Sort
Statement
Table
Timestamp
UOW
列出开关:
db2 get monitor switches
设置开关:
db2 update monitor switches using switchName [ON | OFF]
复位开关
可将监视器开关的所有值复位成空值或 0:
db2 reset monitor [ALL | for database databaseName] [at dbpartitionnum partitionNum]
使用动态 SQL 快照来查找执行速度较慢的 SQL
可以用它来查找数据库中最耗时的 SQL 语句:
SELECT stmt_text, total_exec_time, num_executions FROM TABLE( SNAPSHOT_DYN_SQL('DREW_DB', -1)) as dynSnapTab ORDER BY total_exec_time desc FETCH FIRST 1 ROW ONLY
第二个示例查找平均执行时间最长的五条 SQL 语句:
SELECT stmt_text, CASE WHEN num_executions = 0 THEN 0 ELSE (total_exec_time / num_executions) END avgExecTime,num_executions FROM TABLE( SNAPSHOT_DYN_SQL('DREW_DB', -1)) as dynSnapTab ORDER BY avgExecTime desc FETCH FIRST 5 ROWS ONLY