技术开发 频道

DB2 V9自动维护(三):启用自动表和索引重组

【IT168 技术文档】启用自动表和索引重组

    DB2 V9 可以对表和所以进行自动重组。要进行高效率的数据访问和获得非常好的工作负载性能,具有组织良好的表数据是很关键的。在对表数据进行许多更改之后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操作创建了溢出记录时尤其如此。按这种方式组织数据时,数据库管理器必须执行其他读操作才能访问顺序数据。另外,在删除大量行后,也需要执行其他的读操作。表重组操作会整理数据碎片来减少浪费的空间,并对行进行重新排序以合并溢出记录,从而加快数据访问速度并最终提高查询性能。还可以指定根据特定索引来重新排序数据,以便查询通过最少次数据读取操作就可以访问数据。既可重组系统目录表,也可以重组数据库表。由 RUNSTATS 收集的统计信息与其他信息一起来显示表中的数据分发情况。特别是,通过分析这些统计信息可以知道何时需要执行哪种类型的重组。自动重组通过使用 REORGCHK 公式来确定何时需要对表进行重组。它会定期评估已经更新了统计信息的表,以便了解是否需要重组。如果需要重组,则它会在内部调度对表进行传统重组。这将要求执行应用程序功能而不对正在重组的表进行写访问。可以使用 AUTO_REORG、AUTO_TBL_MAINT 和 AUTO_MAINT 数据库配置参数来启用或禁用自动重组功能部件。在分区数据库环境中,确定执行自动重组和启动自动重组是在目录分区上完成的。只需要在目录分区上启用数据库配置参数。将在目标表所在的所有数据库分区上运行重组。如果您不太确定何时以及如何重组表和索引,则可以将自动重组作为整个数据库维护方案的一部分。

    统计信息概要文件是由 RUNSTATS 实用程序提供了一个选项来注册并使用的,该文件是一组选项,这些选项指定要对特定表收集的统计信息,例如,表统计信息、索引统计信息或分布统计信息。此功能部件简化了统计信息收集,它允许您存储在发出 RUNSTATS 命令时指定的一些选项,从而,可以对表反复收集相同的统计信息而不必重新输入命令选项。无论实际上是否正在收集统计信息,都可以注册或更新统计信息概要文件。例如,要同时注册概要文件和收集统计信息,可发出带有 SET PROFILE 选项的 RUNSTATS 命令。要在实际上并没有收集统计信息的情况下只注册概要文件,可发出带有SET PROFILE ONLY 选项的 RUNSTATS 命令。要使用已经注册的统计信息概要文件来收集统计信息,发出 RUNSTATS 命令,并且只指定表名和 USE PROFILE 选项。

    统计信息概要文件还可以由 DB2 自动统计信息概要分析自动生成。当启用了此功能时,会收集有关数据库活动的信息,并将这些信息存储在查询反馈仓库中。可根据此数据来生成统计信息概要文件。启用此功能可以缓解统计信息与特定工作负载相关的不确定性问题,并可以收集最少的统计信息集来提供非常好的的数据库工作负载性能。可以将此功能与自动收集统计信息功能配合使用,后一项功能会根据自动生成的统计信息概要文件中包含的信息来自动安排统计信息维护。要启用此功能,需要已经通过设置适当的配置参数启用了表的自动维护。AUTO_STATS_PROF 配置参数将激活查询反馈数据的收集,而 AOTO_PROF_UPD 配置参数将激活生成统计信息概要文件以供自动收集统计信息使用。

    需要注意的是,生成统计信息概要文件不太适合 OLTP 环境中 ,比较适合 OLAP(运行使用许多谓词的大而复杂的查询、谓词列的数据中经常具有关联以及对几个表进行连接和分组)环境中使用。另外,自动生成统计信息概要文件只能以 DB2 串行方式激活,而对于联合环境、多分区 MPP 环境以及启用了分区内并行性的环境中的查询将禁用此功能。

    接下来为了演示统计信息概要文件不能在联合环境中使用,我们先把 DBM CFG 中的 FEDERATED 配置参数设置成 ON,打开联合系统,提交,断开所有连接,重启示例,在 DB2CLP 窗口环境中,输入 UPDATE DBM CFG 等命令,具体如清单 1 所示:
清单 1. 更新 DBM CFG 参数

                C:\> db2 update dbm cfg  using FEDERATED  yes
            DB20000I  UPDATE DATABASE MANAGER CONFIGURATION命令成功完成。
            SQL1362W  为立即修改而提交的一个或多个参数未动态更改。直到下次启动应用程序或发出
            TERMINATE 命令之后,客户机更改才会生效。直到下一条 DB2START命令之后,服务器更改才会生效。
            C:\> db2 terminate
            DB20000I  TERMINATE命令成功完成。
            C:\> db2 force applications all
            DB20000I  FORCE APPLICATION命令成功完成。
            DB21024I  该命令为异步的,可能不会立即生效。
            C:\> db2stop
            2007-09-23 19:54:07     0   0   SQL1064N  DB2STOP 处理成功。
            SQL1064N  DB2STOP 处理成功。
            C:\> db2start
            2007-09-23 19:54:16     0   0   SQL1063N  DB2START 处理成功。
            SQL1063N  DB2START 处理成功。    

    接下来我们连上数据库,对清单1中创建的示例数据库 DB2TEST1 启用自动统计信息概要分析和自动概要文件更新功能,在 DB2CLP 窗口环境中 ,连接上示例数据库 DB2TEST1,通过发出 UPDATE DB CFG 命令修改自动统计信息概要分析(AUTO_STATS_PROF)、自动概要文件更新(AOTO_PROF_UPD)参数,将其值置为 ON,具体如清单 2 所示:

清单 2. 更新 DB CFG 参数
                C:\> db2 connect to db2test1
            数据库连接信息
            数据库服务器         = DB2 / NT 9.1.0
            SQL 授权标识         = RHETTE
            本地数据库别名       = DB2TEST1
            C:\> db2 update db cfg using AUTO_STATS_PROF ON
            SQL0270N  函数不受支持(原因码 = " 75 " )。  SQLSTATE = 42997
            C:\> db2 update db cfg using AUTO_PROF_UPD ON
            SQL0270N  函数不受支持(原因码 = " 75 " )。  SQLSTATE = 42997    

    命令执行失败,报 SQL0270N 错误,通过查询 DB2 帮助得知这是由于在联合系统中自动统计信息概要分析和自动概要文件更功能,我们在 DB2CLP 窗口中发出“DB2 ? SQL错误号”命令查询 SQL0270N(原因码 = " 75 " )对应的错误,具体如清单 3 所示:
清单 3. 更新 DB CFG 参数

                C:\> db2 ? SQL0270N
            SQL0270N 函数不受支持(原因码 = "《原因码》")。
            解释:
            因为该语句违反由下列原因码所指示的限制,所以不能处理它:
            1 主键、每个唯一约束以及每个唯一索引必须包含表的所有分布列(这些列可以按任何顺序出现)。
            2 不支持更新分布键列值。
            3 如果定义外键时指定了 ON DELETE SETNULL,则它不能包含任何可空分布键列。由于定义这样
            的约束将导致尝试更新分布键列,所以这是原因码 2 的特殊情况。
            . . . . . . . . . . . . . . . . . . . .
            75 多数据库分区系统、启用了 SMP的系统或联合系统不支持自动统计信息概要分析功
            能。
            83 无法处理该语句,因为 DATA CAPTURE CHANGES 与COMPRESS YES 不兼容。
            84 分区数据库不能启用自动存储器。
            85 不能将分区添加至启用了自动存储器的单一分区数据库。
            87 不能将下列类型的表定义为分区表:类型表、登台表、用户临时表和范围集群表。
            . . . . . . . . . . . . . . . . . . . .
            用户响应:
            与原因码对应的操作是:
            . . . . . . . . . . . . . . . . . . . .
            75 通过将数据库配置参数 AUTO_STATS_PROF 和AUTO_PROF_UPD 设置为OFF,对此数据库禁用
            自动统计信息概要分析功能。 或者将系统更改为位于非联合的、未启用 SMP的单个数据库分区上的系统。
            . . . . . . . . . . . . . . . . . . . .
            sqlcode :   -270
            sqlstate :  42997     

    通过帮助我们的用户响应,我们需要把系统更改为非联合的。接下来我们把我们先把DBM CFG中的FEDERATED配置参数设置成NO,关闭联合系统,提交,断开所有连接,重启示例,在DB2CLP窗口环境中,输入UPDATE DBM CFG 等命令,具体如清单12所示:
清单 4. 更新 DBM CFG 参数
                C:\> db2 update dbm cfg using  FEDERATED no
            DB20000I  UPDATE DATABASE MANAGER CONFIGURATION命令成功完成。
            SQL1362W  为立即修改而提交的一个或多个参数未动态更改。直到下次启动应用程序
            或发出TERMINATE 命令之后,客户机更改才会生效。直到下一条 DB2START命令之后,服务器更改才会生效。
            C:\> db2 terminate
            DB20000I  TERMINATE命令成功完成。
            C:\> db2 force applications all
            DB20000I  FORCE APPLICATION命令成功完成。
            DB21024I  该命令为异步的,可能不会立即生效。
            C:\> db2stop
            2007-09-23 19:42:49     0   0   SQL1064N  DB2STOP 处理成功。
            SQL1064N  DB2STOP 处理成功。
            C:\> db2start
            2007-09-23 19:42:55     0   0   SQL1063N  DB2START 处理成功。
            SQL1063N  DB2START 处理成功。    

    接下来我们再次连上数据库,对示例数据库DB2TEST1启用自动统计信息概要分析和自动概要文件更新功能,在 DB2CLP 窗口环境中 ,连接上示例数据库 DB2TEST1,通过发出 UPDATE DB CFG 命令修改自动统计信息概要分析(AUTO_STATS_PROF)、自动概要文件更新(AOTO_PROF_UPD)参数,将其值置为 ON,具体如清单 13 所示:
清单 5. 更新 DB CFG 参数
                C:\> db2 connect to db2test1
            数据库连接信息
            数据库服务器         = DB2 / NT 9.1.0
            SQL 授权标识         = RHETTE
            本地数据库别名       = DB2TEST1
            C:\> db2 update db cfg using AUTO_STATS_PROF ON
            DB20000I  UPDATE DATABASE CONFIGURATION命令成功完成。
            C:\> DB2 UPDATE  DB CFG USING AUTO_PROF_UPD ON
            DB20000I  UPDATE DATABASE CONFIGURATION命令成功完成。    

    这样我们就成功地启用自动统计信息概要分析和自动概要文件更新功能,可以通过 GET DB CFG 查看配置参数,具体如清单 6 所示:
清单 6. 查看示例数据库 DB2TEST1 的配置参数
                C:\> db2 get db cfg for db2test1
            数据库  的数据库配置
            数据库配置发行版级别                                    = 0x0b00
            数据库发行版级别                                        = 0x0b00
            数据库地域                                              = CN
            数据库代码页                                            = 1386
            数据库代码集                                            = GBK
            数据库国家/地区代码                                    = 86
            数据库整理顺序                                          = UNIQUE
            备用整理顺序                              ( ALT_COLLATE ) =
            数据库页大小                                            = 4096
            . . . . . . . . . . . . . . . . . . . .
            自动维护                                   ( AUTO_MAINT ) = ON
            自动数据库备份                       ( AUTO_DB_BACKUP ) = ON
            自动表维护                           ( AUTO_TBL_MAINT ) = ON
            自动 runstats                       ( AUTO_RUNSTATS ) = ON
            自动统计信息概要分析              ( AUTO_STATS_PROF ) = ON
            自动概要文件更新                  ( AUTO_PROF_UPD ) = ON
            自动重组                       ( AUTO_REORG ) = OFF    

    接下来继续在DB2CLP窗口中中打开自动重组功能,输入UPDATGE DB CFG命令,把AUTO_REORG参数置成ON,打开自动重组功能(自动维护和自动表维护等父项开关必须都打开才有效),具体如清单 7 所示:
清单 7. 更新 DB CFG 参数

                C:\> DB2 UPDATE  DB CFG USING AUTO_REORG ON
            DB20000I  UPDATE DATABASE CONFIGURATION命令成功完成。 

    命令成功完成,这样我们就打开了自动重组功能。另外,同本文的第一部分和第二部分一样,对自动重组、自动统计信息概要分析、自动概要文件更新也可以在图形化界面的配置自动维护中进行。

    在控制中心在示例数据库DB2TEST1上右键单击,选择自动维护窗口, 打开,在第五个页面“选择要配置的维护活动”页面中对“整理表和索引数据碎片( REORG )”这条记录中的“自动化”列打上勾即可,具体界面如图12所示:

配置自动维护窗口选择配置的维护活动页面
图 1. 配置自动维护窗口选择配置的维护活动页面

    双击“整理表和索引数据碎片( REORG )”记录,或者选中这条记录并单击页面下面的“配置设置”按钮,就会打开“配置设置-整理数据碎片( REORG )”窗口,在其第一个标签页“表作用域”中,可以指定要将数据库中的哪些表用于自动重组。要排除特定表,使用“选择的表”选项并标识要使用国旅排除哪些表。要限制将进行自动重组的表的大小,可以指定大小限制。具体界面如图13所示:

配置设置 - - 整理数据碎片( REORG )
图 2. 配置设置 - - 整理数据碎片( REORG )

    在其第二个标签页“重组选项”中,可以指定索引重组方式是使用联机还是脱机,联机的方式允许对索引进行写访问,联机索引重组将在联机维护窗口中运行,注意,如果不允许对表进行写访问,则将使用脱机方式并且将在脱机维护窗口中运行索引重组。脱机方式允许对索引进行读访问。脱机索引重组将在脱机维护窗口中运行,注意,如果不允许对表进行读访问,则将在不进行访问的情况下重试脱机索引重组。

    另外,本窗口还可以指定要用于压缩数据字典的选项,默认是保留,也可以重新选择成重建。具体如图14所示:

配置设置 - - 整理数据碎片( REORG )
图 3. 配置设置 - - 整理数据碎片( REORG )

    关于配置自动维护窗口的其他页面和上面所述的差不多,不再累述。

0
相关文章