示例:捕获与语句的执行相关的活动信息
如果发现某个语句的执行时间很长,那么可定义阈值以在超出该阈值时让活动事件监视器捕获有关该语句的执行的信息。
然后,可将语句执行信息与活动事件监视器收集的信息相关联来查看活动指标,它们可帮助您了解可能导致速度变慢的原因。
开始之前
关于此任务
在此示例中,要调查的查询作为应用程序的一部分运行。查询如下所示:
SELECT DISTINCT PARTS_BIN FROM STOCK WHERE PART_NUMBER = ?速度变慢的一个可能原因是数据分发不适宜。例如,如果
STOCK 表只有几行对应大部分部件号,但有几千行对应一个特定部件号,那么它会花较长时间来运行此 SELECT 语句。以下示例说明如何检索与先前查询相关联的活动针对参数标记(“?”)处理的实际值。过程
要测试不适宜数据分发导致查询运行变慢的假设,可为所提到的语句创建阈值。然后,可使用阈值和活动事件监视器来捕获有关该特定语句的执行的信息。可通过此信息确定运行时间超过预期的查询处理的实际值。
变体:通过使用可执行标识来为语句定义阈值
在以上示例中,该阈值在步骤
1 中通过使用该语句的实际文本显式标识。还可间接定义阈值,以标识程序包高速缓存中包含的语句的可执行标识。例如,可按如下所示定义阈值:
CREATE THRESHOLD TH1
FOR STATEMENT REFERENCE
x'0100000000000000020000000000000000000000020020100304162158584850' ACTIVITIES
ENFORCEMENT DATABASE
WHEN ACTIVITYTOTALTIME > 10 SECONDS
COLLECT ACTIVITY DATA WITH DETAILS, SECTION AND VALUES
CONTINUE;在此示例中,跟在关键字 STATEMENT REFERENCE
后面的可执行标识用于在程序包高速缓存中查询相应语句文本。可通过检查程序包高速缓存来确定语句的可执行标识。有关如何查看程序包高速缓存中包含的信息的更多信息(包括语句的可执行标识),请参阅使用程序包高速缓存信息确定用于进行性能调整的候选语句。如果在程序包高速缓存中发现可执行标识,那么会从程序包高速缓存中检索关联语句文本,并且此文本用于定义语句阈值。对于静态 SQL 片段中的语句,如果该可执行标识不在程序包高速缓存中,那么会从系统目录中检索语句文本。对于动态 SQL 片段中的语句,考虑使用 PREPARE 语句以通过语句字符串创建预编译语句。如果在程序包高速缓存或系统目录中找不到该可执行标识,那么会返回错误 (SQL4721N)。