DB2中索引(index)失效的原因、确认、重建及监控

本文探讨了DB2数据库中索引失效的各种原因,包括日志设置、索引重建失败等,并提供了检查失效索引的方法及如何通过访问表或重启数据库来自动重建索引。此外还介绍了如何通过诊断日志监控索引重建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文总结了DB2中索引失效的几种常见原因,如何找出所有失效的索引以及判断某个索引是否失效,如何重建失效的索引,以及如何监控索引创建/重建的进度

索引失效的原因

1.) 如果logindexbuild是off(默认选项),那么创建、重建索引的操作不会记录到日志中,之后如果有rollforward操作时,这些索引就会被标记为无效。(例如在t1时刻创建了表并做了backup,在t2时刻创建/重建了索引,那么之后rollforward到t2时,索引就会失效)

2.) load使用了 INDEXING MODE DEFERRED选项

3.) db2dart显示地将索引标记为无效了。db2dart有一个选项/MI,只需要输入表ID、表空间ID,即可将该表上的索引标记为无效。

4.) 之前索引重建/reorg失败了。 Reorg操作如果因为某些原因失败,比如临时表空间不足,则由可能导致索引重建失败,变为失效状态


查看索引是否失效

下面这条SQL可以查看所有 表模式名 "E105Q5A"下所有表上所有需要重建的索引

db2 "SELECT substr(TABNAME,1,20) as TABNAME, substr(INDSCHEMA,1,20) as INDSCHEMA, substr(INDNAME,1,20) as INDNAME, INDEX_REQUIRES_REBUILD FROM TABLE(sysproc.admin_get_index_info('','E105Q5A','')) AS t where INDEX_REQUIRES_REBUILD= 'Y' "

TABNAME              INDSCHEMA            INDNAME              INDEX_REQUIRES_REBUILD
-------------------- -------------------- -------------------- ----------------------
T1                   E105Q5A              IDX1                 Y                     
T1                   E105Q5A              IDX2                 Y                     

  2 record(s) selected.

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0054905.html

如何重建失效的索引:

1.) 所有对表的访问都被导致失效索引被自动重建

2.) 若indexrec设置为RESTART(默认选项),发出restart database命令也可会自动重建

监控索引重建:

首先诊断日志会在开始和结束阶段各打印一条消息

2017-03-14-13.03.55.339517+480 E201703A552          LEVEL: Warning
PID     : 37093388             TID : 3343           PROC : db2sysc 0
INSTANCE: e105q5a              NODE : 000           DB   : SAMPLE
APPHDL  : 0-9                  APPID: *LOCAL.e105q5a.170314035841
AUTHID  : E105Q5A              HOSTNAME: db2b
EDUID   : 3343                 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldLoadTCB, probe:10797
MESSAGE : ADM5572I  One or more indexes on table "E105Q5A .T1" are marked 
          invalid and require rebuilding.

2017-03-14-13.03.55.354589+480 E202256A507          LEVEL: Warning
PID     : 37093388             TID : 3343           PROC : db2sysc 0
INSTANCE: e105q5a              NODE : 000           DB   : SAMPLE
APPHDL  : 0-9                  APPID: *LOCAL.e105q5a.170314035841
AUTHID  : E105Q5A              HOSTNAME: db2b
EDUID   : 3343                 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldBeginIndexCreate, probe:1
MESSAGE : ADM5540W  Rebuilding "2" indexes on table "E105Q5A .T1".

2017-03-14-13.03.55.356059+480 E202764A566          LEVEL: Warning
PID     : 37093388             TID : 3343           PROC : db2sysc 0
INSTANCE: e105q5a              NODE : 000           DB   : SAMPLE
APPHDL  : 0-9                  APPID: *LOCAL.e105q5a.170314035841
AUTHID  : E105Q5A              HOSTNAME: db2b
EDUID   : 3343                 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldIndexCreate, probe:1
MESSAGE : ADM5541W  Rebuilding index with IID "1" in object with ID "13" and 
          table space ID "3" on table "E105Q5A .T1".

2017-03-14-13.03.55.358700+480 E203331A566          LEVEL: Warning
PID     : 37093388             TID : 3343           PROC : db2sysc 0
INSTANCE: e105q5a              NODE : 000           DB   : SAMPLE
APPHDL  : 0-9                  APPID: *LOCAL.e105q5a.170314035841
AUTHID  : E105Q5A              HOSTNAME: db2b
EDUID   : 3343                 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldIndexCreate, probe:1
MESSAGE : ADM5541W  Rebuilding index with IID "2" in object with ID "13" and 
          table space ID "3" on table "E105Q5A .T1".

2017-03-14-13.03.55.367301+480 E203898A515          LEVEL: Warning
PID     : 37093388             TID : 3343           PROC : db2sysc 0
INSTANCE: e105q5a              NODE : 000           DB   : SAMPLE
APPHDL  : 0-9                  APPID: *LOCAL.e105q5a.170314035841
AUTHID  : E105Q5A              HOSTNAME: db2b
EDUID   : 3343                 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, data management, sqldEndIndexCreate, probe:1
MESSAGE : ADM5542W  Indexes on table "E105Q5A .T1" are successfully rebuilt.

实时监控重建进度的话,可以参考下面的链接:
http://www-01.ibm.com/support/docview.wss?uid=swg21984248 

监控DB2索引的使用情况,可以采用以下几种方法: 1. **使用DB2监控工具**: - **DB2 Performance Expert (DB2 PE)**:这是一个强大的性能监控工具,可以提供详细的索引使用情况报告。 - **DB2 Query Monitor**:这个工具可以监控SQL查询的执行情况,并提供索引使用情况的详细信息。 2. **使用系统视图**: - **SYSCAT.INDEXES**:这个视图包含了数据库中所有索引的定义信息。 - **SYSIBMADM.ADMINTABINFO**:这个视图提供了表和索引的详细信息,包括使用统计信息。 3. **使用SQL查询**: - **查询索引使用统计信息**: ```sql SELECT INDSCHEMA, INDNAME, LASTUSED, STATS_TIME FROM SYSCAT.INDEXES WHERE LASTUSED IS NOT NULL; ``` 这个查询可以显示索引的最后使用时间。 - **查询索引的详细使用情况**: ```sql SELECT TABSCHEMA, TABNAME, INDEXNAME, TOTAL_LOGICAL_READS, TOTAL_PHYSICAL_READS, TOTAL_ROWS_READ FROM SYSIBMADM.ADMINTABINFO WHERE INDEXNAME IS NOT NULL; ``` 这个查询可以显示索引的逻辑读、物理读和读取的总行数。 4. **使用DB2事件监视器**: - **创建事件监视器**: ```sql CREATE EVENT MONITOR index_monitor FOR STATEMENTS WRITE TO TABLE (TABLE db2inst1.index_monitor); ``` 这个事件监视器可以记录所有SQL语句的执行情况,包括索引的使用情况。 5. **使用DB2性能计数器**: - **查看性能计数器**: ```sql db2 get snapshot for tables on database ``` 这个命令可以显示表的性能计数器信息,包括索引的使用情况。 通过以上方法,可以全面监控DB2数据库中索引的使用情况,帮助优化数据库性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值