DB2 模式操作细节
DB2 schema operation details
我试图找出以下格式的特定模式发生的操作数
schemaname operation_count
ibmschema 2
操作可以CREATE TABLE ,INSERT ,UPDATE ,SELECT ,DELETE ,DROP TABLE
在 DB2 10 LUW 中是否有元数据 table 来获取此类信息
Db2 不会(默认情况下)记录发生的每个操作。在每天有数百万事务的 OLTP 系统中,记录每条语句的开销将是一个很大的开销
Db2 确实有关于 activity 的内存统计信息,并且此数据在 MON
table 函数中可用。自实例上次重新启动以来,这些统计信息是累积的,除了包缓存统计信息之类的内容,它们仅适用于当前在包缓存中的语句。
您可以创建事件监视器来捕获更详细的信息。有关这些信息,请参阅知识中心,或考虑使用数据服务器管理器来帮助捕获这一额外级别的数据。
如果您需要此信息来满足审计要求,请考虑 db2 审计工具,它可以防止未经授权的篡改。
不过,如果您想要按模式插入的行数(自上次实例重启后),可以从 MON_GET_TABLE
快速导出。例如。
SELECT V.* FROM
( SELECT
TABSCHEMA
, SUM(ROWS_READ) ROWS_READ
, SUM(ROWS_INSERTED) ROWS_INSERTED
, SUM(ROWS_UPDATED) ROWS_UPDATED
, SUM(ROWS_DELETED) ROWS_DELETED
FROM
TABLE(MON_GET_TABLE(NULL,NULL,-2))
GROUP BY
TABSCHEMA
), TABLE(VALUES
(TABSCHEMA, 'ROWS_READ' ,ROWS_READ)
, (TABSCHEMA, 'ROWS_INSERTED',ROWS_INSERTED )
, (TABSCHEMA, 'ROWS_UPDATED' ,ROWS_UPDATED )
, (TABSCHEMA, 'ROWS_DELETED' ,ROWS_DELETED )
) AS V(SCHEMA, OPERATION, COUNT)
ORDER BY 1,2
这会 return 例如
SCHEMA OPERATION COUNT
-------- ------------- ---------
PAUL ROWS_DELETED 0
PAUL ROWS_INSERTED 10
PAUL ROWS_READ 321954698
PAUL ROWS_UPDATED 0
SYSIBM ROWS_DELETED 4883
SYSIBM ROWS_INSERTED 4954
SYSIBM ROWS_READ 575652
SYSIBM ROWS_UPDATED 340
如果你想要语句的计数,你会遇到许多语句可以跨模式的问题。没有简单的方法可以知道语句的 "schema"(除非自己解析 SQL)。此外,语句不会被操作标记(如果您使用更改的 table 引用或触发器,则可以在一个语句中 INSERT
、UPDATE
、DELETE
和 SELECT
ETC)。所以你最终不得不做一些简单的分类,比如这个
SELECT SUM(NUM_EXECUTIONS) EXECS, OPERATION FROM (
SELECT NUM_EXECUTIONS
, CASE
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'INSERT' THEN 'INSERT'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'UPDATE' THEN 'UPDATE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'SELECT' THEN 'SELECT'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'VALUES' THEN 'VALUES'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'CREATE' THEN 'CREATE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'DELETE' THEN 'DELETE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,5)) = 'MERGE' THEN 'MERGE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,3)) = 'SET' THEN 'SET'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'DROP' THEN 'DROP'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'WITH' THEN 'WITH'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'CALL' THEN 'CALL'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'LOCK' THEN 'LOCK'
WHEN UPPER(SUBSTR(STMT_TEXT,1,7)) = 'DECLARE' THEN 'DECLARE'
ELSE UPPER(SUBSTR(STMT_TEXT,1,6)) END OPERATION
FROM
TABLE(MON_GET_PKG_CACHE_STMT ( '', NULL, NULL, -2)) AS T
) GROUP BY OPERATION
这可能 return 例如
EXECS OPERATION
----- ---------
123 CALL
78 DECLARE
12 DELETE
4 INSERT
34 LOCK
63036 SELECT
964 SET
21218 UPDATE
3 VALUES
100 WITH
(但不处理,例如以注释开头的语句。当您移动到 Db2 11.1 时,您可以使用 REGEXP_LIKE 从匹配中删除任何前导注释)
我试图找出以下格式的特定模式发生的操作数
schemaname operation_count
ibmschema 2
操作可以CREATE TABLE ,INSERT ,UPDATE ,SELECT ,DELETE ,DROP TABLE
在 DB2 10 LUW 中是否有元数据 table 来获取此类信息
Db2 不会(默认情况下)记录发生的每个操作。在每天有数百万事务的 OLTP 系统中,记录每条语句的开销将是一个很大的开销
Db2 确实有关于 activity 的内存统计信息,并且此数据在 MON
table 函数中可用。自实例上次重新启动以来,这些统计信息是累积的,除了包缓存统计信息之类的内容,它们仅适用于当前在包缓存中的语句。
您可以创建事件监视器来捕获更详细的信息。有关这些信息,请参阅知识中心,或考虑使用数据服务器管理器来帮助捕获这一额外级别的数据。
如果您需要此信息来满足审计要求,请考虑 db2 审计工具,它可以防止未经授权的篡改。
不过,如果您想要按模式插入的行数(自上次实例重启后),可以从 MON_GET_TABLE
快速导出。例如。
SELECT V.* FROM
( SELECT
TABSCHEMA
, SUM(ROWS_READ) ROWS_READ
, SUM(ROWS_INSERTED) ROWS_INSERTED
, SUM(ROWS_UPDATED) ROWS_UPDATED
, SUM(ROWS_DELETED) ROWS_DELETED
FROM
TABLE(MON_GET_TABLE(NULL,NULL,-2))
GROUP BY
TABSCHEMA
), TABLE(VALUES
(TABSCHEMA, 'ROWS_READ' ,ROWS_READ)
, (TABSCHEMA, 'ROWS_INSERTED',ROWS_INSERTED )
, (TABSCHEMA, 'ROWS_UPDATED' ,ROWS_UPDATED )
, (TABSCHEMA, 'ROWS_DELETED' ,ROWS_DELETED )
) AS V(SCHEMA, OPERATION, COUNT)
ORDER BY 1,2
这会 return 例如
SCHEMA OPERATION COUNT
-------- ------------- ---------
PAUL ROWS_DELETED 0
PAUL ROWS_INSERTED 10
PAUL ROWS_READ 321954698
PAUL ROWS_UPDATED 0
SYSIBM ROWS_DELETED 4883
SYSIBM ROWS_INSERTED 4954
SYSIBM ROWS_READ 575652
SYSIBM ROWS_UPDATED 340
如果你想要语句的计数,你会遇到许多语句可以跨模式的问题。没有简单的方法可以知道语句的 "schema"(除非自己解析 SQL)。此外,语句不会被操作标记(如果您使用更改的 table 引用或触发器,则可以在一个语句中 INSERT
、UPDATE
、DELETE
和 SELECT
ETC)。所以你最终不得不做一些简单的分类,比如这个
SELECT SUM(NUM_EXECUTIONS) EXECS, OPERATION FROM (
SELECT NUM_EXECUTIONS
, CASE
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'INSERT' THEN 'INSERT'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'UPDATE' THEN 'UPDATE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'SELECT' THEN 'SELECT'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'VALUES' THEN 'VALUES'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'CREATE' THEN 'CREATE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,6)) = 'DELETE' THEN 'DELETE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,5)) = 'MERGE' THEN 'MERGE'
WHEN UPPER(SUBSTR(STMT_TEXT,1,3)) = 'SET' THEN 'SET'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'DROP' THEN 'DROP'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'WITH' THEN 'WITH'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'CALL' THEN 'CALL'
WHEN UPPER(SUBSTR(STMT_TEXT,1,4)) = 'LOCK' THEN 'LOCK'
WHEN UPPER(SUBSTR(STMT_TEXT,1,7)) = 'DECLARE' THEN 'DECLARE'
ELSE UPPER(SUBSTR(STMT_TEXT,1,6)) END OPERATION
FROM
TABLE(MON_GET_PKG_CACHE_STMT ( '', NULL, NULL, -2)) AS T
) GROUP BY OPERATION
这可能 return 例如
EXECS OPERATION
----- ---------
123 CALL
78 DECLARE
12 DELETE
4 INSERT
34 LOCK
63036 SELECT
964 SET
21218 UPDATE
3 VALUES
100 WITH
(但不处理,例如以注释开头的语句。当您移动到 Db2 11.1 时,您可以使用 REGEXP_LIKE 从匹配中删除任何前导注释)