分享
 
 
 

使用REORG TABLE命令优化数据库的性能

王朝other·作者佚名  2008-07-17
窄屏简体版  字體: |||超大  

当数据库里某个表中的记录变化量很大时,需要在表上做REORG操作来优化数据库性能。

值得注意的是,针对数据库对象的大量操作,如反复地删除表,存储过程,会引起系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG操作。

由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用合理的ACCESS PLAN至关重要。

一个完整的REORG表的过程应该是由下面的步骤组成的:

RUNSTATS -> REORGCHK -> REORG -> RUNSTATS -> BIND或REBIND

0 执行下面命令前要先连接数据库

1 RUNSTATS

由于在第二步中REORGCHK时可以对指定的表进行RUNSTATS操作(在REORGCHK时指定UPDATE STATISTICS),所以第一步事实上是可以省略的。

2 REORGCHK

REORGCHK命令的语法如下:

>>-REORGCHK----+----------------------------+------------------->

| .-UPDATE--. |

'--+-CURRENT-+---STATISTICS--'

>-----+---------------------------+----------------------------><

| .-USER-------. |

'-ON TABLE--+-SYSTEM-----+--'

+-ALL--------+

'-table-name-'

REORGCHK是根据统计公式计算表是否需要重整。

对于每个表有3个统计公式,对索引有3个统计公式(版本8开始有5个公式),如果公式计算结果该表需重整,在输出的REORG字段中相应值为*,否则为-。

如果数据库中数据量比较大,在生产系统上要考虑REORGCHK的执行时间可能较长,需安排在非交易时间执行。

可以分为对系统表和用户表两部分分别进行REORGCHK:

1) 针对系统表进行REORGCHK

db2 reorgchk update statistics on table system

使用UPDATE STATISTICS参数指定数据库首先执行RUNSTATS命令。

2) 针对用户表进行REORGCHK

db2 reorgchk update statistics on table user

下面是执行的部分结果

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。

3 REORG TABLE

REORG TABLE命令的语法如下:

>>-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

4 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-+--'

如果表名为DB2INST1.STAFF,表上有索引,则可以用下面的例子完成RUNSTATS命令:

db2 runstats on table db2inst1.staff with distribution and detailed indexes all

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有