【转】DB2平常维护——REORG TABLE命令优化数据库性能
一个完整的平常维护规范能够帮助 DBA 理顺天天须要的操做,以便更好的监控和维护数据库,
保证数据库的正常、安全、高效运行,防止一些错误重复发生。
因为DB2使用CBO做为数据库的优化器,数据库对象的状态信息对数据库使用合理的 ACCESS PLAN相当重要。
DB2 优化器使用目录统计信息来肯定任何给定查询的最佳访问方案。若是有关表或索引的统计信息已过期或者不完整,
则会致使优化器选择不是最佳的方案,而且会下降 执行查询的速度。当数据库里某个表中的记录变化量很大时,
须要在表上作REORG操做来优化数据库性能数据库
1、完整的REORG表的过程
值得注意的是,针对数据库对象的大量操做,如反复地删除表,存储过程,会引发系统表中数据的频繁改变,
在这种状况下,也要考虑对系统表进行REORG操做。一个完整的REORG表的过程应该是由下面的步骤组成的:
RUNSTATS -> REORGCHK -> REORG -> RUNSTATS -> BIND或REBIND
注: 执行下面命令前要先链接数据库
1 RUNSTATS
因为在第二步中REORGCHK时能够对指定的表进行RUNSTATS操做(在REORGCHK时指定UPDATE STATISTICS),
因此第一步事实上是能够省略的。
2 REORGCHK
在对表数据进行许多更改以后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操做建立了溢出记录时尤为如此。
按这种方式组织数据时,数据库管理器必须执行其余读操做才能访问顺序数据。另外,在删除大量行后,也须要执行其余的读操做。
表重组操做会整理数据碎片来减小浪费的空间,并对行进行从新排序以合并溢出记录,从而加快数据访问速度并最终提升查询性能。
还能够指定根据特定索引来从新排序数据,以便查询时经过最少次数据读取操做就能够访问数据。
下列任何因素均可能指示用户应该重组表:
1)自上次重组表以后,对该表进行了大量的插入、更新和删除活动 。
2)对于使用具备高集群率的索引的查询,其性能发生了明显变化 。
3)在执行 RUNSTATS 命令以刷新统计信息后,性能没有获得改善。
4)REORGCHK 命令指示须要重组表
(注意:在某些状况下,REORGCHK 老是建议重组表,即便在执行了重组后也是如此)。例如,若是使用 32KB 页大小,
而且平均记录长度为 15 字节且每页最多包含 253 条记录,则每页具备 32700- (15 x 253)=28905 个未使用字节。
这意味着大约 88% 的页面是可用空间。用户应分析 REORGCHK 的建议并针对执行重组所需的成本平衡利益。
5)db.tb_reorg_req(须要重组)运行情况指示器处于 ATTENTION 状态。
此运行情况指示器的集合详细信息描述经过重组可得到好处的表和索引的列表。安全
REORGCHK 命令返回有关数据组织的统计信息,而且能够建议您是否须要重组特定表。
然而,按期或在特定时间对目录统计信息表运行特定查询能够提供性能历史记录,该记录使用户能够发现可能具备更广性能隐含的趋势。
DB2 V9.1 引入了自动重组功能,能够对表和索引进行自动重组。自动重组经过使用 REORGCHK 公式来肯定什么时候须要对表进行重组。
它会按期评估已经更新了统计信息的表,以便了解是否须要重组。
REORGCHK命令的语法以下:
REORGCHK UPDATE|CURRENT STATISTICS ON TABLE USER|SYSTEM|ALL|table-name服务器
UPDATE STATISTICS TABLE USER|SYSTEM|ALL|table-name
>>-REORGCHK--+-------------------->ON ----+------------
CURRENT STATISTICS SCHEMA schema-name
下面咱们来看一下各个选项的含义:
UPDATE STATISTICS:更新表的统计数据,根据该统计数据判断是否须要重组表。
CURRENT STATISTICS:根据当前表统计数据判断是否须要重组表。
TABLE table_name:对单个表进行分析。
TABLE ALL:对数据库全部的表进行分析。
TABLE SYSTEM:对系统表进行分析。
TABLE USER:对当前用户模式下的全部表进行分析。
若是数据库中数据量比较大,在生产系统上要考虑REORGCHK的执行时间可能较长,需安排在非交易时间执行。
能够分为对系统表和用户表两部分分别进行REORGCHK:
1) 针对系统表进行REORGCHK
db2 reorgchk update statistics on table system
使用UPDATE STATISTICS参数指定数据库首先执行RUNSTATS命令。
2) 针对用户表进行REORGCHK
db2 reorgchk update statistics on table user
REORGCHK是根据统计公式计算表是否须要重整。对于每一个表有3个统计公式,对索引有3个统计公式(版本8开始有5个公式),
若是公式计算结果该表需重整,在输出的REORG字段中相应值为*,不然为-。
reorgchk 所使用的度量的考虑因素包括:
(当查看 reorgchk 工具的输出时,找到用于表的 F一、F2 和 F3 这几列,以及用于索引的 F四、F五、F六、F7 和 F8 这几列。
若是这些列中的任何一列有星号 (*),则说明当前的表和/或索引超出了阈值。)
F1: 属于溢出记录的行所占的百分比。当这个百分比大于 5% 时,在输出的 F1 列中将有一个星号 (*)。
F2: 数据页中使用了的空间所占的百分比。当这个百分比小于 70% 时,在输出的 F2 列上将有一个星号 (*)。
F3: 其中含有包含某些记录的数据的页所占的百分比。当这个百分比小于 80% 时,在输出的 F3 列上将有一个星号 (*)。
F4: 群集率,即表中与索引具备相同顺序的行所占的百分比。当这个百分比小于 80% 时,那么在输出的F4 列上将有一个星号 (*)。
F5: 在每一个索引页上用于索引键的空间所占的百分比。当这个百分比小于 50% 时,在输出的 F5 列上将有一个星号 (*)。
F6: 能够存储在每一个索引级的键的数目。当这个数字小于 100 时,在输出的 F6 列上将有一个星号 (*)。
F7: 在一个页中被标记为 deleted 的记录 ID(键)所占的百分比。当这个百分比大于 20% 时,在输出的 F7 列上将有一个星号 (*)。
F8: 索引中空叶子页所占的百分比。当这个百分比大于 20% 时,在输出的 F8 列上将有一个星号 (*)。并发
下面是执行的部分结果
db2 reorgchk update statistics on table user
执行 RUNSTATS ....
表统计信息:
F1: 100 * OVERFLOW / CARD < 5
F2: 100 * (Effective Space Utilization of Data Pages) > 70
F3: 100 * (Required Pages / Total Pages) > 80
SCHEMA NAME CARD OV NP FP ACTBLK TSIZE F1 F2 F3 REORG
----------------------------------------------------------------------------------------
DB2INST1 STAFF - - - - - - - - -*-
...工具
索引统计信息:
F4: CLUSTERRATIO 或正常化的 CLUSTERFACTOR > 80
F5: 100 * (KEYS * (ISIZE + 9) + (CARD - KEYS) * 5) / ((NLEAF - NUM EMPTY LEAFS) * INDEXPAGESIZE) > 50
F6: (100 - PCTFREE) * ((INDEXPAGESIZE - 96) / (ISIZE + 12)) ** (NLEVELS - 2) * (INDEXPAGESIZE - 96) / (KEYS * (ISIZE + 9) + (CARD - KEYS) * 5) < 100
F7: 100 * (NUMRIDS DELETED / (NUMRIDS DELETED + CARD)) < 20
F8: 100 * (NUM EMPTY LEAFS / NLEAF) < 20
SCHEMA NAME CARD LEAF ELEAF LVLS ISIZE NDEL KEYS F4 F5 F6 F7 F8 REORG
-------------------------------------------------------------------------------------------------
表:DB2INST1.STAFF
DB2INST1 ISTAFF - - - - - - - - - - - - -----
...
从上面的例子来看,对于表DB2INST1.STAFF,根据统计公式F2计算结果,有必要对表进行REORG。性能
三、对须要重组的表进行重组(REORG TABLE)
DB2 V9 能够对表和索引进行自动重组。要进行高效率的数据访问和得到最佳工做负载性能,具备组织良好的表数据是很关键的。
在对表数据进行许多更改以后,逻辑上连续 的数据可能会位于不连续的物理数据页上,在许多插入操做建立了溢出记录时尤为如此。
按这种方式组织数据时,数据库管理器必须执行其余读操做才能访问顺序数 据。另外,在删除大量行后,也须要执行其余的读操做。
表重组操做会整理数据碎片来减小浪费的空间,并对行进行从新排序以合并溢出记录,从而加快数据访问速 度并最终提升查询性能。
还能够指定根据特定索引来从新排序数据,以便查询经过最少次数据读取操做就能够访问数据。
既可重组系统目录表,也能够重组数据库 表。由 RUNSTATS 收集的统计信息与其余信息一块儿来显示表中的数据分布状况。
特别是,经过分析这些统计信息能够知道什么时候须要执行哪一种类型的重组。自动重组经过使用 REORGCHK 公式来肯定什么时候须要对表进行重组。
它会按期评估已经更新了统计信息的表,以便了解是否须要重组。若是须要重组,则它会在内部调度对表进行传统重组。
这将要 求执行应用程序功能而不对正在重组的表进行写访问。
可使用 auto_reorg、auto_tbl_maint 和 auto_maint 数据库配置参数来启用或禁用自动重组功能部件。
在分区数据库环境中,肯定执行自动重组和启动自动重组是在目录分区上完成的。
只须要在目录分区上启用数据库 配置参数,就将在目标表所在的全部数据库分区上运行重组。
若是用户不太肯定什么时候以及如何重组表和索引,则能够将自动重组做为整个数据库维护方案的一部分。
若是是 DB2 V8.2.2 之前的版本,是没有自动重组功能的。
若是你的数据库是 DB2 V8.2.2 之前的版本,或者想在 DB2 V8.2.2 之后的版本里手工运行重组表,可使用命令完成。
手工重组可使用 REORG 命令来完成。
以脱机方式重组表是整理表碎片的最快方法。重组可减小表所需的空间量并提升数据访问和查询性能。
必须具备 SYSADM、SYSCTRL、SYSMAINT 或 DBADM 权限,或者必须具备对表的 CONTROL 权限才能重组表。必须具备数据库链接才能重组表。
标识须要重组的表以后,能够对这些表运行 REORG 实用程序,而且能够选择对在这些表上定义的任何索引运行该实用程序。
REORG TABLE命令的语法以下:
REORG TABLE table-name [INDEX index-name] [USE tablespace-name]
>>-REORG TABLE--table-name----+--------------------+------------>>-----+-----------------------+--------------------------------><优化
'-INDEX--index-name--' '-USE--tablespace-name--'
执行REORG能够考虑分为表上有索引和没有索引两种状况:
1) 若是表上有索引
如表名为DB2INST1.STAFF,索引名为DB2INST1.ISTAFF,命令以下:
db2 reorg table db2inst1.staff index db2inst1.istaff use tempspace1
建议REORG时使用USE参数指定数据重排时使用的临时表空间,不然,REORG工做将会在表所在表空间中原地执行。
若是表上有多个索引,INDEX参数值请使用最为重要的索引名。
2) 若是表上没有索引
如表名为DB2INST1.STAFF, SYSIBM.SYSTABLES
db2 reorg table db2inst1.staff use tempspace1
db2 reorg table sysibm.systables use tempspace1
使用 REORG TABLE 命令重组 RHETTE.TEST 表
C:\> db2 reorg table rhette.test
DB20000I REORG 命令成功完成。
要使用临时表空间 TEMPSPACE1 重组表 RHETTE.TEST,能够在 DB2CLP 窗口中使用带 USE TEMPSPACE1 选项的 REORG TABLE 命令。
使用临时表空间 TEMPSPACE1 重组 RHETTE.TEST 表
C:\> db2 reorg table rhette.test use TEMPSPACE1
DB20000I REORG 命令成功完成。ui
下面咱们在示例表 TEST 上建立一个索引 A1,构建在 ID 列上。此时咱们想要重组表并根据索引 A1 对行进行从新排序,可使用带 INDEX 选项的 REORG TABLE 命令。
根据索引 A1 重组 RHETTE.TEST 表
C:\> db2 create index a1 on rhette.test(id)
DB20000I SQL 命令成功完成。
C:\> db2 reorg table rhette.test index a1
DB20000I REORG 命令成功完成。lua
若是想使用 SQL 调用语句重组表,请使用 ADMIN_CMD 过程发出 REORG TABLE 命令。
使用 SQL 调用语句重组 RHETTE.TEST 表
C:\> db2 call sysproc.admin_cmd ( 'reorg table rhette.test index a1' )
返回状态 = 0
要使用 DB2 管理 API 重组表,请使用 db2REORG API 。
在重组表以后,应收集有关表的统计信息,以便优化器具备最准确的数据来评估查询访问方案。
另外,记住在分区数据库环境中,若是想在全部节点运行命令,须要使用 db2_all 命令。
经过删除和插入操做对表进行更新后,索引的性能会下降,其表现方式以下:
1)叶子页分段。
叶子页被分段以后,因为必须读取更多的叶子页才能访存表页,所以 I/O 操做成本会增长。
2)物理索引页的顺序再也不与这些页上的键顺序相匹配(此称为不良集群索引)。
叶子页出现不良集群状况后,顺序预取操做的效率将下降,所以会致使更多的 I/O 等待。
3)造成的索引大于其最有效的级别数。
在此状况下应重组索引。
若是在建立索引时设置了 MINPCTUSED 参数,则在删除某个键且可用空间小于指定的百分比时,数据库服务器会自动合并索引叶子页。
此过程称为联机索引整理碎片。可是,要复原索引集群和可用空间以及下降叶级别,请使用下列其中一种方法:spa
1)删除并从新建立索引。
2)使用 REORG INDEXES 命令联机重组索引。
由于此方法容许用户在重建表索引期间对表进行读写操做,因此在生产环境中可能须要选择此方法。
3)使用容许脱机重组表及其索引的选项运行 REORG TABLE 命令。
在使用 ALLOW WRITE ACCESS 选项运行 REORG INDEXES 命令时,若是同时容许对指定的表进行读写访问,则会重建该表的全部索引。
进行重组时,对基础表所做的任何将会影响到索引的更改都将记录在 DB2 日志中。另外,若是有任何内部内存缓冲区空间可供使用,则还将这些更改放在这样的内存空间中。
重组将处理所记录的更改以便在重建索引时与当前写活动保持同 步更新。
内部内存缓冲区空间是根据须要从实用程序堆中分配的指定内存区域,它用来存储对正在建立或重组的索引所做的更改。
使用内存缓冲区空间使索引重组操 做可以经过这样的方式来处理更改,即先直接从内存读取,而后读取日志(若有必要),但读取日志的时间要晚得多。
在重组操做完成后,将释放所分配的内存。重 组完成后,重建的索引可能不是最佳集群的索引。若是为索引指定 PCTFREE,则在重组期间,每页上均会保留相应百分比的空间。
对于分区表,支持对各个索引进行联机索引重组和清除。要对各个索引进行重组,指定索引名:REORG INDEX index_name for TABLE table_name
对于空间索引或多维集群(MDC)表,不支持采用 ALLOW WRITE 方式的联机索引重组。
注: REORG INDEXES 命令的 CLEANUP ONLY 选项不能彻底重组索引。 CLEANUP ONLY ALL 选项将除去那些标记为“删除”且被认为要落实的键。
此外,它还将释放全部标记为“删除”且被认为要落实的键所在的页。在释放页后,相邻的叶子页将会合并, 前提是这样作能够在合并页上至少留出 PCTFREE 可用空间。
PCTFREE 是指在建立索引时为其定义的可用空间百分比。 CLEANUP ONLY PAGES 选项仅删除那些标记为“删除”且被认为要落实的全部键所在的页。
使用 CLEANUP ONLY 选项对分区表的索引进行重组时,支持任何访问级别。若是未指定 CLEANUP ONLY 选项,则缺省访问级别 ALLOW NO ACCESS 是惟一支持的访问级别。
REORG INDEXES 具备下列要求:
1)对索引和表具备 SYSADM、SYSMAINT、SYSCTRL 或 DBADM 权限,或者具备 CONTROL 特权。
2)用于存储索引的表空间的可用空间数量等于索引的当前大小
在发出 CREATE TABLE 语句时,考虑在大型表空间中重组索引。
3)其余日志空间
REORG INDEXES 须要记录其活动。所以,重组可能会失败,尤为是在系统繁忙和记录其余并发活动时。
注: 若是具备 ALLOW NO ACCESS 选项的 REORG INDEXES ALL 命令运行失败,则会标记索引无效而且此项操做不可撤销。
可是,若是具备 ALLOW READ ACCESS 选项的 REORG 命令或具备 ALLOW WRITE ACCESS 选项的 REORG 命令运行失败,则能够复原原来的索引对象。
另外还须要注意,在 DB2 V9 开放平台上对新引入的表分区功能来讲,不能联机重组分区表。
4.对表和索引进行 runstats
DB2 优化器使用目录统计信息来肯定任何给定查询的最佳访问方案。
若是有关表或索引的统计信息已过期或者不完整,则会致使优化器选择不是最佳的方案,而且会下降 执行查询的速度。
可是,决定要为给定的工做负载收集哪些统计信息是很复杂的事情,而且使这些统计信息保持最新是一项很花费时间的任务。
以往,建议对一个频繁进行大量更新、插入或者删除操做的表进行 RUNSTATS,建议在重组表以后运行 RUNSTATS 。
咱们都是经过手工执行 RUNSTATS 命令,或者经过 DB2 任务中心调度执行 RUNSTATS 命令来收集表的统计信息以改善数据库性能。
如今 DB2 V9 又新增了自动收集统计信息功能, 自动收集统计信息经过收集最新的表统计信息来改善数据库性能。
DB2 首先肯定工做负载须要哪些统计信息以及须要更新哪些统计信息,而后,在后台自动调用 RUNSTATS 实用程序以确保收集并维护正确的统计信息。
而后,DB2 优化器根据准确的统计信息来选择访问方案。
从 IBM DB2 版本 9.1 开始,在建立新的数据库时,缺省状况下会启用自动收集统计信息(RUNSTATS)功能。
这表示 DB2 数据库管理器将肯定是否须要更新数据库统计信息。而后,RUNSTATS 实用程序会根据须要在后台自动运行,以确保最新的数据库统计信息可用。
用户在建立数据库以后,能够经过将数据库配置参数 AUTO_RUNSTATS 设置为 OFF 来禁用自动收集统计信息。
须要注意的是,将数据库从版本 8 迁移到版本 9.1 时,不会自动启用此功能。要在已迁移的数据库中使用此功能,必须手工进行启用。
经过使用自动统计信息收集功能,可让 DB2 肯定是否须要更新数据库统计信息。
在启用了自动统计信息收集功能的状况下,DB2 将自动在后台运行 RUNSTATS 实用程序以确保最新的数据库统计信息可用.
RUNSTATS命令的语法以下:
>>-RUNSTATS ON TABLE--table-name-------------------------------->
>-----+-+--------------------------------------------------------------------+-+>
| '-WITH DISTRIBUTION--+--------------------------------------------+--' |
| '-AND--+----------+--+-INDEXES ALL--------+--' |
| '-DETAILED-' '-INDEX--index-name--' |
'-+--------------------------------------------------+-------------------'
'--+-AND-+---+----------+--+-INDEXES ALL--------+--'
'-FOR-' '-DETAILED-' '-INDEX--index-name--'
>-----+--------------------------+-----------------------------><
| .-CHANGE----. |
'-SHRLEVEL--+-REFERENCE-+--'
若是没有启用自动统计信息功能,那么咱们还须要手工对须要的表和索引使用 runstats 命令,更新统计信息。
好比想对 TEST 表和索引运行统计信息,发出“ runstats on table test and index all ” 。
对表 TEST 以及索引更新统计信息
C:\> db2 runstats on table rhette.test and index all
DB20000I RUNSTATS 命令成功完成。
收集索引统计信息以容许优化器评估是否应该使用索引来解析查询。
若是想收集索引统计信息,必须链接至包含表和索引的数据库并具备下列其中一个权限级别:sysadm 、sysctrl 、sysmaint 、dbadm 、对表的 CONTROL 特权 。
带 SAMPLED DETAILED 选项执行 RUNSTATS 命令须要 2MB 统计信息堆。将附加的 488 个 4K 页分配给为此附加内存需求设置的 stat_heap_sz 数据库配置参数。
若是该堆看起来过小,则 RUNSTATS 在尝试收集统计信息以前会返回一条错误。
如今咱们在 DB2CLP 窗口中,连上示例数据库 SAMPLE,在示例数据库中存在表 RHETTE.PROJECT,其有两个索引 PK_PROJE CT 和 XPROJ2,
咱们要建立索引 PK_PROJE CT 和 XPROJ2 的详细统计信息,能够发出带 AND DETAILED INDEXES ALL 选项的 RUNSTATS 命令。
建立索引 PK_PROJECT 和 XPROJ2 的详细统计信息
C:\> db2 RUNSTATS ON TABLE rhette.project AND DETAILED
INDEXES ALL DB20000I RUNSTATS 命令成功完成。
若是咱们想建立两个索引的详细统计信息,可是不想耗费太多的资源和时间,可使用采样的方式而不是对每一个索引条目执行详细计算。
建立索引 PK_PROJECT 和 XPROJ2 的详细统计信息,使用采样方式
C:\> db2 RUNSTATS ON TABLE rhette.project AND SAMPLED DETAILED
INDEXES ALL DB20000I RUNSTATS 命令成功完成。
若是要建立索引上的详细采样统计信息以及表的分布统计信息,以便索引和表统计信息一致,可使用带 WITH DISTRIBUTION 选项的 RUNSTATS 命令。
收集表 rhette.project 的详细统计信息
C:\> db2 RUNSTATS ON TABLE rhette.project WITH DISTRIBUTION ON KEY COLUMNS AND SAMPLED DETAILED
INDEXES ALL DB20000I RUNSTATS 命令成功完成。
若是想全面收集表和索引的信息,而不是使用抽样的方式收集表 rhette.project 的详细统计信息
C:\> db2 RUNSTATS ON TABLE rhette.project WITH DISTRIBUTION AND DETAILED
INDEXES ALL DB20000I RUNSTATS 命令成功完成。
5 (可选) 上面命令完成后能够重复第二步,检查REORG的结果,若是须要,能够再次执行REORG和RUNSTATS命令。
6 BIND或REBIND
RUNSTATS命令运行后,应对数据库中的PACKAGE进行从新联编,简单地,可使用db2rbind命令来完成。
db2rbind命令的语法以下:
>>-db2rbind--database--/l logfile----+------+------------------->
'-all--'
.-conservative--.
>-----+-------------------------+--/r--+-any-----------+-------><
'-/u userid--/p password--'
例如,若是数据库名为SAMPLE,执行:
db2rbind sample -l db2rbind.out
2、DB2 V8.2 如何配置AUTO_RUNSTATS
1.配置参数
首先确保DBM参数HEALTH_MON是ON,
而后使用以下命令打开AUTO_RUNSTATS 的开关。
db2 update db cfg using AUTO_MAINT ON AUTO_TBL_MAINT ON AUTO_RUNSTATS ON
2.设置须要自动RUNSTATS的表的profile,该profile会纪录于系统表sysibm.systables的STATISTICS_PROFILE列
例如:
db2 runstats on table huangdk.hasales and indexes all tablesample system(20) set profile only
说明:a.RUNSTATS的语法见《命令指南》
http://publib.boulder.ibm.com/in ... c/core/r0001980.htm
b.tablesample 是采样runstats的选项,例子里采用system的方法,采样20%
3.AUTO_RUNSTATS触发条件
配置完后,须要重起一下实例,而后系统会在第一次链接请求时,去触发AUTO_RUNSTATS,若是表须要RUNSTATS,就开始RUNSTATS。
之后,系统每隔3小时触发AUTO_RUNSTATS
用户可使用如下语句检查:
db2 select STATS_TIME,SUBSTR(STATISTICS_PROFILE,1,200) from sysibm.systables
其中,STATS_TIME列指示最后一次RUNSTATS的时间。
另外,db2diag.log里有这样的信息:
2004-10-27-16.08.39.007000+480 I30117H327 LEVEL: Event
PID : 2596 TID : 3404 PROC : db2fmp.exe
INSTANCE: DB2 NODE : 000
FUNCTION: DB2 UDB, Automatic Table Maintenance, db2HmonEvalStats, probe:100
START : Automatic Runstats: evaluation has started on database TBCSAMPL
指示自动RUNSTATS已经运行。
3、优化语句的批量获取
一、查找数据库管理表空间(DMS)
SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D' ;
二、DMS下的creator(用户、模式)
SELECT DISTINCT creator FROM sysibm.systables WHERE tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D' );
三、creator下的表数量
SELECT creator,count(1) FROM sysibm.systables WHERE Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D') GROUP BY creator ;
四、构造优化脚本
--检查reorgchk
(1).reorgchk update statistics on table SCHEMA.TABLE ;
select 'reorgchk update statistics on table DB2ADMIN.'||rtrim(name)||';' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D')
--重组表 reorg table
(2).reorg table SCHEMA.TABLE ;
select 'reorg table DB2ADMIN.'||rtrim(name)||';' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D')
--重组索引 reorg indexes
(3).reorg indexes all for table SCHEMA.TABLE ;
select 'reorg indexes all for table DB2ADMIN.'||rtrim(name)||';' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D'
--更新统计 runstats(4).runstats on table SCHEMA.TABLE and indexes all; select 'runstats on table DB2ADMIN.'||rtrim(name)||' and indexes all;' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D') ;