一、REORG INDEX的作用
联机REORG INDEX实用程序通过重新组织索引空间来改进访问性能,并且回收碎片空间。
二、REORG INDEX的输出:
REORG详细说明
结果
REORG INDEX
重组整个索引(如果是分区索引则是所有分区)
REORG INDEX PART n
重组分区索引的第n个分区,或是一个数据分区的二级索引
三、需要的权限
要运行实用程序,需要以下特权的至少一个:
l 数据库的REORG特权
l 对于数据库的DBADM或者DBCTRL权限
l SYSCTRL权限
l SYSADM权限
要运行存在于编目或者目录中的索引空间的实用程序,需要以下特权的至少一个:
l 在DSNDB06(编目)数据库的REORG特权
l 对于DSNDB06(编目)数据库的DBADM或者DBCTRL权限
l SYSOPR安装权限
l SYSCTRL权限
l SYSADM或者SYSADM安装权限
l 如果指定了STATISTICS 关键字,则对于数据库需要STATS特权
如果想运行REORG INDEX STATISTICS REPORT YES,要确保在编目表和要收集统计的表上有SELECT特权。
四、REORG INDEX执行阶段
1、UTILINIT阶段
执行初始化和设置
2、UNLOAD阶段
卸装索引空间,在一个顺序数据集中写入关键信息
3、BUILD阶段
重新构建索引,更新索引统计
4、LOG阶段(可选)
迭代处理日志,只在定义了SHRLEVEL CHANGE时使用
5、SWITCH阶段(可选)
在原索引空间(分区)和新拷贝中切换访问,只在定义了SHRLEVEL REFERENCE或者 CHANGE时使用
6、UTILTERM阶段
执行清理操作
五、REORG INDEX控制语句的语法和可选项
可以在顺序数据集或者分区数据集中存储控制语句,然后在运行的JCL中的SYSIN DD语句中引入它。
选项描述:
INDEX creator-id.index-name
详细指定了将要被重组的索引,可以指定索引名称或者索引空间名
INDEXSPACE database-name.index-space-name
详细指定一个在SYSIBM.SYSINDEXES 表中存在的,合格的索引空间名。数据库名称的默认值是DSNDB04
LIST listdef-name
详细指定一个在之前定义的LISTDEF列表名,list不能包含任何的表空间
PART integer
指定需要被重组的分区,可以重组一个分区索引的单独分区,当存在LIST时,不可以指定PART。integer的范围是1到分区索引的分区数,最大4096。如果忽略PART关键字,就会重组整个索引
REUSE
当使用了SHRLEVEL NONE选项时,本选项详细指定REORG在逻辑上重置和重用DB2管理数据集,而不用删除和重定义它们。如果不用REUSE和SHRLEVEL NONE,DB2会删除并重定义DB2管理数据集以重置它们
如果使用REUSE选项的同时使用了SHRLEVEL REFERENCE或CHANGE选项, 则REUSE不起作用
CLONE
指示重组的是克隆表上的索引空间和索引
SHRLEVEL
说明了重组的方式,下面的参数指定了在REORG的重新装载阶段允许的访问方式:
NONE
1、 从正在重组的区域卸装数据(这时应用程序对这个区域只能读不能写)
2、 重新装入该区域(这时应用程序不具有任何存取权),然后重新允许读写访问
REFERENCE
1、 从正在重组的区域卸装数据(这时应用程序对这个区域只能读不能写)
2、 重新装入到该区域的影子副本(shadow copy)(这时应用程序可以读取但不可以写入原始副本)
3、 通过交换数据集的名字,将应用程序对原始副本的访问切换到影子副本上,最后重新允许读写访问(switch phase)
CHANGE
1、 从正在重组的区域卸装数据(这时应用程序对这个区域可以读也可以写)
2、 重新装入到该区域的影子副本(shadow copy)(这时应用程序具有对该区域原始副本的读写访问权)
3、 将原始副本的日志应用于影子副本(这时应用程序可以读取并通常写入原始副本)(log phase)
4、 通过交换数据集的名字,将应用程序对原始副本的访问切换到影子副本上,最后重新允许读写访问(switch phase)
如果指定了CHANGE,就不能使用UNLOAD参数。如果表空间定义了NOT LOGGED属性,则不可以指定SHRLEVEL CHANGE
DEADLINE
为SWITCH阶段的开始指定DEADLINE
NONE
没有指定SWITCH阶段日志处理必须开始的截止时间
timestamp
指定SWITCH阶段日志处理必须开始的截止时间
labeled-duration-expression
计算SWITCH阶段日志处理必须开始的截止时间,计算是基于CURRENT TIMESTAMP或者CURRENT DATE,可以加或者减一个constant
constant单位:YEARS,MONTHS,DAYS,HOURS,MINUTES,SECONDS或MICROSECONDS,以下格式是等同的YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,MICROSECOND
DRAIN_WAIT integer
在SQL语句((inserts,updates,deletes和selects )运行时,实用程序等待他们结束的秒数,这个值重写了IRLMRWT和UTIMOUT参数(仅对于本条SQL语句),integer的取值从0到1800,如果没有指定此关键字,或者integer=0的时候,实用程序使用锁超时系统参数IRLMRWT
RETRY integer
指定了REORG重试的次数,integer的取值从0到255,如果没有指定此关键字,则不进行重试,默认值是UTIMOUT子系统参数
RETRY_DELAY integer
指定了重试之间的最小间隔,以秒为单位,integer的取值从0到1800
如果没有指定RETRY_DELAY,REORG INDEX下面两个值中稍小的一个:
l DRAIN_WAIT值 × RETRY值
l DRAIN_WAIT值 × 10
MAXRO
详细指定了对于log过程的最后一个迭代的最大时间量,对于这个迭代,应用程序只有只读访问权限。实际执行的最后一个迭代的时间可能会超越MAXRO值。ALTER UTILITY命令可以修改MAXRO值,它的默认值是RETRY_DELAY的默认值
integer
以秒为单位,如果指定为较小的正值,将会降低只读存取期的长度,但是可能会增加REORG完成的时间;如果指定为非常大的正值,log过程的第二个迭代可能就是最终迭代
默认值是300秒
DEFER
指定拥有读写访问权限的log过程迭代不确定地持续进行,REORG绝对不会开始拥有只读访问的最终迭代,除非通过ALTER UTILITY命令修改MAXRO值,如果定义了DEFER,则也要定义LONGLOG CONTINUE
DRAIN
指定了在log最后阶段,当达到MAXRO阀值,并且log的最终迭代将要被应用时的放弃行为。
WRITERS
在达到MAXRO阀值后,DB2只放弃log阶段的writers,接着在进入switch阶段时使用DRAIN ALL
ALL
在达到MAXRO阀值后,DB2放弃log阶段的所有readers 和writers
在下列情况下,考虑DRAIN ALL:
l 在log阶段SQL更新活动非常高
l 默认行为导致巨量的 -911 SQL错误信息
LONGLOG
如果log过程将要处理的下一个迭代的记录数不完全低于之前迭代处理的数量,在向控制台发送一条信息后,LONGLOG指定了DB2将要执行的动作。这种情况意味着REORG INDEX读取应用程序log的步调跟不上应用程序log的写入速度
CONTINUE
表示在JOB语句过期时,DB2仍然继续执行重组
MAXRO DEFER和LONGLOG CONTINUE一起使用的话,表示REORG INDEX将持续允许对正在重组的原拷贝区域的访问,不switch到阴影拷贝
TERM
表示在指定DELAY后DB2将中止重组
DRAIN
表示在指定DELAY后DB2将放弃写入要求类别
DELAY integer
REORG向控制台发送信息的最小时间间隔,integer以秒为单位,默认值是1200
TIMEOUT
指定了超时后(log或switch阶段试图放弃对象造成)的处理动作
TERM
1. DB2发生隐式TERM UTILITY命令,导致中止并返回8
2. DB2发生DSNU590I和DSNU170I消息
3. DB2将对象留在RW状态
ABEND
在超时条件发生时,DB2将对象留在UTRO或UTUT状态
LEAFDISTLIMIT integer
叶距离限制(LEAFDIST是索引页的无序程度的量度),详细指定integer值来与SYSIBM.SYSINDEXPART中索引的特定分区的LEAFDIST值作比较,如果任何LEAFDIST值超越了指定的LEAFDISTLIMIT值,REORG就被执行,
默认值是200
REPORTONLY
REORG仅仅是被推荐,并不是真的执行
UNLOAD
数据卸装之后,实用程序job是继续处理还是终结
CONTINUE
在卸装数据之后,实用程序继续处理
PAUSE
在卸装数据之后,实用程序结束,而RELOAD状态存储在 SYSIBM.SYSUTIL 中,以便可以使用RELOAD RESTART(PHASE)命令来复原处理
ONLY
在卸装数据之后,实用程序结束,并除去存储在SYSIBM.SYSUTIL中与此实用程序标识相对应的状态
KEYCARD
指定收集的范围是特定索引的1到n键列组合的所有互不相同的值
FREQVAL
指定了收集频繁值统计
NUMCOLS
指定了连接在一起的键列数,默认是1
COUNT
指定了将要收集的频繁值数量
SORTDEVT device-type
指定了为DFSORT动态分配的临时数据集的设备类型
SORTNUM integer
指定了收集分区数据集二级索引统计信息时动态分配的临时数据集的数目
注意:如果ZPARM UTSORTAL定义为YES并且IGNSORTN定义为YES的话,不可以使用SORTNUM关键字
UPDATE
指示统计信息是否插入编目表
ALL
ACCESSPATH
SPACE
NONE
HISTORY
所有插入或更新到编目历史表的编目表都会被记录
ALL
ACCESSPATH
SPACE
NONE
FORCEROLLUP
这个选项能使优化器选择最佳存取路径
YES
NO
WORKDDN(ddname)
ddname指示了卸装数据集的DD语句,是用于构建输入的临时工作文件(temporary work file)的DD名称,默认值是SYSUT1
PREFORMAT
待续......