SNAPDYN_SQL 管理视图和 SNAP_GET_DYN_SQL 表函数-检索 dynsql 逻辑组快照信息

SNAPDYN_SQL 管理视图和 SNAP_GET_DYN_SQL 表函数从 dynsql 逻辑数据组返回快照信息。

MON_GET_PKG_CACHE_STMT 表函数-获取程序包高速缓存语句指标 返回数据库程序包高速缓存中静态和动态 SQL 语句的时间点视图。 如果使用此表函数,那么可以利用版本 9.7中引入的监视基础结构。

根据您使用的是管理视图还是表函数,请参阅下列其中一个部分:

SNAPDYN_SQL 管理视图

此管理视图允许您检索当前连接的数据库的 dynsql 逻辑组快照信息。

此视图返回等同于 GET SNAPSHOT FOR DYNAMIC SQL ON database-alias CLP 命令的信息。

模式为 SYSIBMADM。

请参阅 表 1 ,以获取可返回的完整信息列表。

权限

需要下列其中一个权限才能使用该视图:
  • 对 SNAPDYN_SQL 管理视图的 SELECT 特权
  • 对 SNAPDYN_SQL 管理视图的 CONTROL 特权
  • DATAACCESS 权限
  • DBADM 权限
  • SQLADM 权限
  • ACCESSCTRL 权限
  • SECADM 权限
需要下列其中一个权限才能使用表函数:
  • 对 SNAP_GET_DYN_SQL 表函数的 EXECUTE 特权
  • DATAACCESS 权限
  • DBADM 权限
  • SQLADM 权限
此外,要访问快照监视器数据,还需要下列其中一个权限:
  • SYSMON
  • SYSCTRL
  • SYSMAINT
  • SYSADM

缺省 PUBLIC 特权

在非限制性数据库中,当自动创建视图时,将向 PUBLIC 授予 SELECT 特权。

示例

检索在当前连接的数据库上运行的动态 SQL 的列表,按读取的行数排序。
SELECT PREP_TIME_WORST, NUM_COMPILATIONS, SUBSTR(STMT_TEXT, 1, 60) 
   AS STMT_TEXT, DBPARTITIONNUM 
   FROM SYSIBMADM.SNAPDYN_SQL ORDER BY ROWS_READ
下列是从此查询输出的示例。
PREP_TIME_WORST      NUM_COMPILATIONS     ...
-------------------- -------------------- ...
                  98                    1 ...
                   9                    1 ...
                   0                    0 ...
                   0                    1 ...
                   0                    1 ...
                   0                    1 ...
                   0                    1 ...
                   0                    1 ...
                  40                    1 ...

  9 record(s) selected.
此查询的输出(继续)。
... STMT_TEXT                                                    ...
... ------------------------------------------------------------ ...
... select prep_time_worst, num_compilations, substr(stmt_text,  ...
... select * from dbuser.employee                                ...
... SET CURRENT LOCALE LC_CTYPE = 'en_US'                        ...
... select prep_time_worst, num_compilations, substr(stmt_text,  ...
... select prep_time_worst, num_compilations, substr(stmt_text,  ...
... select * from dbuser.employee                                ...
... insert into dbuser.employee values(1)                        ...
... select * from dbuser.employee                                ...
... insert into dbuser.employee values(1)                        ...
此查询的输出(继续)。
... DBPARTITIONNUM
... --------------
...              0
...              0
...              0
...              2
...              1
...              2
...              2
...              1
...              0

SNAP_GET_DYN_SQL 表函数

SNAP_GET_DYN_SQL 表函数返回与 SNAPDYN_SQL 管理视图相同的信息,但允许您检索特定数据库成员 (所有数据库成员或所有数据库成员的聚集) 上的特定数据库的信息。

此表函数返回等同于 GET SNAPSHOT FOR DYNAMIC SQL ON database-alias CLP 命令的信息。

请参阅 表 1 ,以获取可返回的完整信息列表。

语法

Read syntax diagramSkip visual syntax diagramSNAP_GET_DYN_SQL(dbname , member)

模式为 SYSPROC。

表函数参数

dbname
类型为 VARCHAR (128) 的输入参数,用于指定与当前连接的数据库在同一实例中的有效数据库名称。 指定目录条目类型为 "Indirect" 或 "Home" 的数据库名称,如 LIST DATABASE DIRECTORY 命令所返回。 指定 NULL 或空字符串以从当前连接的数据库获取快照。
成员
类型为 INTEGER 的可选输入参数,用于指定有效数据库成员编号。 对当前成员指定 -1 ,或对所有活动成员的聚集指定 -2 。 如果 dbname 未设置为 NULL ,并且 member 设置为 NULL,那么将为 member隐式设置 -1 。 如果未使用此输入选项,即仅提供 dbname ,那么将从数据库处于活动状态的成员返回数据。

如果 dbnamemember 都设置为 NULL,那么将尝试从 SNAP_WRITE_FILE 过程创建的文件中读取数据。 请注意,此文件可能是在任何时候创建的,这意味着数据可能不是最新的。 如果具有相应快照 API 请求类型的文件不存在,那么 SNAP_GET_DYN_SQL 表函数将为当前连接的数据库和数据库成员号生成快照。

重要信息: 不推荐使用 SYSPROC.SNAP_WRITE_FILE 过程,在将来的发行版中可能会将其除去。 有关更多信息,请参阅 SNAP_WRITE_FILE 过程

权限

需要下列其中一个权限:
  • 对 SNAP_GET_DYN_SQL 表函数的 EXECUTE 特权
  • DATAACCESS 权限
此外,要访问快照监视器数据,还需要下列其中一个权限:
  • SYSMON
  • SYSCTRL
  • SYSMAINT
  • SYSADM

缺省 PUBLIC 特权

在非限制性数据库中,当自动创建该功能时,将向 PUBLIC 授予 EXECUTE 特权。

示例

检索在当前连接的数据库上运行的动态 SQL 的列表,按读取的行数排序。
SELECT PREP_TIME_WORST, NUM_COMPILATIONS, SUBSTR(STMT_TEXT, 1, 60) 
   AS STMT_TEXT FROM TABLE(SNAP_GET_DYN_SQL('',-1)) as T
    ORDER BY ROWS_READ 
下列是从此查询输出的示例。
PREP_TIME_WORST      NUM_COMPILATIONS      ...
-------------------- ---------------------...
                   0                    0 ...
                  49                    1 ...
                   0                    0 ...
                  46                    1 ...
                   0                    0 ...
                   0                    0 ...
                   0                    0 ...
                  29                    1 ...
                   0                    0 ...
                   0                    0 ...
                  10                    1 ...
                   0                    0 ...
                   4                    0 ...
                  53                    0 ...
                   0                    0 ...
                   6                    1 ...
                 334                    0 ...
                   0                    0 ...
                   5                    0 ...
                  10                    0 ...
                 599                    0 ...
                  15                    1 ...
                   7                    0 ...

  23 record(s) selected.
此查询的输出(继续)。
... STMT_TEXT
... -----------------------------------------------------------
... SET :HV00017  :HI00017  = RPAD(VARCHAR(:HV00035  :HI00035 ),
... SELECT COLNAME, TYPENAME FROM  SYSCAT.COLUMNS WHERE TABNAME=
... DECLARE RES CURSOR WITH RETURN TO CALLER FOR SELECT R.TEXT F
... SELECT PREP_TIME_WORST, NUM_COMPILATIONS, SUBSTR(STMT_TEXT, 
... VALUES (:HV00026  :HI00026  + 1, :HV00024  :HI00024  + 1) IN
... VALUES (:HV00035  :HI00035  + 1, :HV00024  :HI00024  + 1) IN
... VALUES (1) INTO :HV00035  :HI00035                          
... SELECT TRIGNAME FROM  SYSCAT.TRIGGERS WHERE TABNAME='POLICY'
... VALUES (:HV00024  :HI00024 +1, :HV00022  :HI00022 +1) INTO :
... VALUES (1, CARDINALITY(CAST(:HV00040  :HI00040  AS "SYSIBMAD
... CALL SYSPROC.SYSINSTALLOBJECTS('POLICY','V','','')          
... SET :HV00017  :HI00017  = RPAD(VARCHAR(:HV00035  :HI00035 ),
... drop event monitor act                                      
... SELECT TABSCHEMA, TABNAME, TYPE, STATUS, TBSPACEID, PROPERTY
... CALL SAVE_EXEC_INFO (CAST(:HV00040  :HI00040  AS "SYSIBMADM"
... SET CURRENT LOCK TIMEOUT 5                                  
... SELECT TABNAME FROM SYSCAT.PERIODS WHERE PERIODNAME = 'SYSTE
... SELECT ARRAY_AGG(P.EXECUTABLE_ID ORDER BY M.IO_WAIT_TIME DES
... SET CURRENT ISOLATION RESET                                 
... CALL monreport.pkgcache()                                   
... SELECT A.SPECIFICNAME FROM SYSCAT.ROUTINES A WHERE (A.FENCED
... SELECT POLICY FROM SYSTOOLS.POLICY WHERE MED='DB2CommonMED' 
... VALUES 0                                                    

  23 record(s) selected.
运行工作负载后,用户可以将以下查询与表函数配合使用。
SELECT STATS_FABRICATE_TIME,SYNC_RUNSTATS_TIME 
   FROM TABLE (SNAP_GET_DYN_SQL('mytestdb', -1)) 
   AS SNAPDB

STATS_FABRICATE_TIME   SYNC_RUNSTATS_TIME
---------------------- ------------------
                     2                 12
                     1                 30
对于基于此表函数的视图:
SELECT STATS_FABRICATE_TIME,SYNC_RUNSTATS_TIME 
   FROM SYSIBMADM.SNAPDYN_SQL  

STATS_FABRICATE_TIME   SYNC_RUNSTATS_TIME 
---------------------- ------------------ 
                     5                 10 
                     3                 20 
  2 record(s) selected.

返回的信息

表 1. SNAPDYN_SQL 管理视图和 SNAP_GET_DYN_SQL 表函数返回的信息
列名 数据类型 描述或相应的监视元素
snapshot_timestamp TIMESTAMP 获取快照的日期和时间。
NUM_EXECUTIONS BIGINT num_executions - 语句执行次数
num_compilations BIGINT num_compilations - 语句编译次数
prep_time_worst BIGINT prep_time_worst - 语句最长编译时间
prep_time_best BIGINT prep_time_best - 语句最短编译时间
INT_ROWS_DELETED BIGINT int_rows_deleted - 删除的内部行数
INT_ROWS_INSERTED BIGINT int_rows_inserted - 插入的内部行数
INT_ROWS_UPDATED BIGINT int_rows_updated - 更新的内部行数
ROWS_READ BIGINT rows_read - 读取行数
ROWS_WRITTEN BIGINT rows_written - 写入的行数
stmt_sorts BIGINT stmt_sorts - 语句排序数
SORT_OVERFLOWS BIGINT sort_overflows - 排序溢出数
TOTAL_SORT_TIME BIGINT total_sort_time - 排序总时间
POOL_DATA_L_READS BIGINT pool_data_l_reads - 缓冲池数据逻辑读取数
POOL_DATA_P_READS BIGINT pool_data_p_reads - 缓冲池数据物理读取数
POOL_TEMP_DATA_L_READS BIGINT pool_temp_data_l_reads - 缓冲池临时数据逻辑读取数
POOL_TEMP_DATA_P_READS BIGINT pool_temp_data_p_reads - 缓冲池临时数据物理读取数
POOL_INDEX_L_READS BIGINT pool_index_l_reads - 缓冲池索引逻辑读取数
POOL_INDEX_P_READS BIGINT pool_index_p_reads - 缓冲池索引物理读取数
POOL_TEMP_INDEX_L_READS BIGINT pool_temp_index_l_reads - 缓冲池临时索引逻辑读取数
POOL_TEMP_INDEX_P_READS BIGINT pool_temp_index_p_reads - 缓冲池临时索引物理读取数
POOL_XDA_L_READS BIGINT pool_xda_l_reads - 缓冲池 XDA 数据逻辑读取数
POOL_XDA_P_READS BIGINT pool_xda_p_reads - 缓冲池 XDA 数据物理读取数
POOL_TEMP_XDA_L_READS BIGINT pool_temp_xda_l_reads - 缓冲池临时 XDA 数据逻辑读取数
POOL_TEMP_XDA_P_READS BIGINT pool_temp_xda_p_reads -“缓冲池临时 XDA 数据物理读取数”监视元素
total_exec_time BIGINT total_exec_time - 执行语句所耗用的时间
TOTAL_EXEC_TIME_MS BIGINT total_exec_time - 执行语句所耗用的时间
total_usr_cpu_time BIGINT total_usr_cpu_time-语句的用户 CPU 总数
TOTAL_USR_CPU_TIME_MS BIGINT total_usr_cpu_time-语句的用户 CPU 总数
total_sys_cpu_time BIGINT total_sys_cpu_time-语句的系统 CPU 总计
TOTAL_SYS_CPU_TIME_MS BIGINT total_sys_cpu_time-语句的系统 CPU 总计
STMT_TEXT CLOB (2 M) stmt_text - SQL 语句文本
DBPARTITIONNUM SMALLINT dbpartitionnum -“数据库分区号”监视元素
STATS_FABRICATE_TIME BIGINT 在动态语句的查询编译期间,系统在不进行表或索引扫描的情况下创建所需统计信息所花费的总时间 (以毫秒为单位)。
SYNC_RUNSTATS_TIME BIGINT 动态语句的查询编译期间同步统计信息收集活动所花费的总时间 (以毫秒为单位)。
MEMBER SMALLINT member -“数据库成员”监视元素
* 要计算此列所基于的监视元素的总耗用时间,必须使用以下公式将以 _S 结束的此监视元素的列中报告的完整秒数与以 _MS 结束的此监视元素的列中报告的小数秒数相加: (monitor-element-name_S × 1,000,000 + monitor-element-name_MS) ÷ 1,000,000。 例如, (ELAPSED_EXEC_TIME_S × 1,000,000 + ELAPSED_EXEC_TIME_MS) ÷ 1,000,000。