免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4338 | 回复: 2
打印 上一主题 下一主题

DB2优化 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-25 14:55 |只看该作者 |倒序浏览
5可用积分
建完INDEX用runstats吗?还有用不用bind呢?
以及还有要注意什么呢?没办法菜鸟一个。这边也比较急。

最佳答案

查看完整内容

当数据库里某个表中的记录变化量很大时,需要在表上做REORG操作来优化数据库性能。值得注意的是,针对数据库对象的大量操作,如反复地删除表,存储过程,会引起系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG操作。说明:一个完整的REORG表的过程应该是由下面的步骤组成的:RUNSTATS -> REORGCHK -> REORG -> RUNSTATS -> BIND或REBIND0 执行下面命令前要先连接数据库1 RUNSTATS由于在第二步中REORGCHK时可以 ...

论坛徽章:
0
2 [报告]
发表于 2009-03-25 14:55 |只看该作者
当数据库里某个表中的记录变化量很大时,需要在表上做REORG操作来优化数据库性能。
值得注意的是,针对数据库对象的大量操作,如反复地删除表,存储过程,会引起系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG操作。

说明:

一个完整的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

http://www.itpub.net/thread-621756-1-1.html

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2009-03-25 14:57 |只看该作者

补充

Bind和runstats用不好的话有危害吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP