jameshd
作者jameshd·2017-02-07 09:05
技术总监·胜科金仕达数据系统(中国)有限公司

indexrec -“索引重新创建时间”配置参数

字数 1760阅读 1589评论 0赞 0

此参数有五个可能的设置:
SYSTEM
在数据库管理器配置文件中指定的 use system setting 决定何时重建无效的索引,以及在 DB2 前滚或 HADR 日志重放期间是否将重做任何索引构建日志记录。(注意:此设置仅对数据库配置有效。)
ACCESS
第一次访问基础表时将重建无效的索引。在 DB2 前滚或 HADR 日志重放期间将重做任何完全记录的索引构建。当启动了 HADR 且发生 HADR 接管时,将在接管之后第一次访问基础表时重建任何无效的索引。
ACCESS_NO_REDO
第一次访问基础表时将重建无效的索引。在 DB2 前滚或 HADR 日志重放期间将不重做任何完全记录的索引构建,那些索引将保留为无效状态。当启动了 HADR 且发生 HADR 接管时,将在接管之后第一次访问基础表时重建任何无效的索引。
RESTART
indexrec 的缺省值。将在显式或隐式发出 RESTART DATABASE 命令时重建无效的索引。在 DB2 前滚或 HADR 日志重放期间将重做任何完全记录的索引构建。当启动了 HADR 且发生 HADR 接管时,将在接管结束时重建任何无效的索引。
如果应用程序连接至数据库时该数据库异常终止,并且已启用 autorestart 参数,那么应用程序连接至数据库时会隐式发出 RESTART DATABASE 命令。如果未发出该命令,那么下次访问底层表时会重建无效索引。

RESTART_NO_REDO
将在显式或隐式发出 RESTART DATABASE 命令时重建无效的索引。在 DB2 前滚或 HADR 日志重放期间将不重做任何完全记录的索引构建,而是在前滚完成时或在 HDAR 接管发生时将重建那些索引。
如果应用程序连接至数据库时该数据库异常终止,并且已启用 autorestart 参数,那么应用程序连接至数据库时会隐式发出 RESTART DATABASE 命令。如果未发出该命令,那么下次访问底层表时会重建无效索引。

当出现严重的磁盘问题时,索引可能会变为无效。如果数据本身出现这个问题,那么数据可能丢失。但是,如果索引出现这个问题,那么可通过重新创建该索引来恢复索引。如果在用户连接至数据库时重建索引,那么可能出现两个问题:
重新创建索引文件时可能会发生响应时间意外降低现象。访问表和使用此特定索引的用户将在重建索引时等待。
在重新创建索引之后可能挂起意外的锁定,尤其是导致索引重新创建的用户事务从未执行过 COMMIT 或 ROLLBACK 的情况下更是如此。
建议:在高端用户服务器上且如果重新启动时间不重要,那么此选项的最佳选择将是在 DATABASE RESTART 时重建该索引,以作为在崩溃后重新将该数据库联机的过程的一部分。

将此参数设置为“ACCESS”或“ACCESS_NO_REDO”将导致重新创建索引时数据库管理器的性能降级。任何访问该特定索引或表的用户将必须等待,直到重新创建索引为止。

如果将此参数设置为“RESTART”,那么重新启动数据库所耗的时间将因重新创建索引而较长,但是一旦数据库恢复联机,正常处理将不受影响。

注: 在进行数据库恢复时,将除去可在属于正在恢复的数据库的文件系统上执行的所有 SQL 过程。如果 indexrec 设置为 RESTART,那么会从数据库目录中抽取所有 SQL 过程可执行文件,并在下一次连接至数据库时放回到该文件系统上。如果未将 indexrec 设置为 RESTART,那么仅在第一次执行该 SQL 过程时才会将 SQL 可执行文件抽取到该文件系统上。
仅当对索引构建操作(如 CREATE INDEX 和 REORG INDEX 操作)或对索引重建操作激活了完全日志记录时,RESTART 与 RESTART_NO_REDO 值或 ACCESS 与 ACCESS_NO_REDO 值之间的差异才会很明显。可以通过启用 logindexbuild 数据库配置参数或者通过在更改表时启用 LOG INDEX BUILD 来激活日志记录。通过将 indexrec 设置为 RESTART 或 ACCESS,就可以前滚涉及记录的索引构建的操作而不会使索引对象处于无效状态,如果索引对象处于无效状态,那么需要以后重建该索引。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广