文档章节

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

Goopand
 Goopand
发布于 2015/04/15 17:08
字数 987
阅读 15
收藏 0

总结了一下REORG的操作经验:

当数据库里某个表中的记录变化量很大时,需要在表上做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


本文转载自:http://blog.csdn.net/xiyuan1999/article/details/6427146

共有 人打赏支持
Goopand
粉丝 8
博文 392
码字总数 196343
作品 0
朝阳
DB2 10.5列式表存储技术

DB2 10.5引入列式存储表技术,作为DW数据应用的特性,对性能具有很大的提升,同时对SQL基本不做索引优化,查询时直接可以按照列存储格式查询相关列即可,可以说管理很简单了。作为一个新特性...

marvelyu
2015/08/21
0
0
7大绝招帮你轻轻松松提升 MySQL 性能。

  【IT168 资讯】随着负载和文件大小的增长,性能往往会降低。记住以下的7个关键点,让你的MySQL轻松保持平稳运行。   测量应用程序的方式之一是测量它的性能。用户体验是衡量应用程序性...

it168网站
2017/10/26
0
0
如何保障大型网站系统的稳定性总结

常用在线日志分析命令的使用和日志分析脚本的编写:cat,grep,wc,less命令,shel脚本等 2.群集监控:监控指标定义,心跳检测,容量评估等 3.高并发系统的稳定运行:流量控制,依赖管理,服务分...

xiejunbo
2015/01/29
0
0
读书笔记-大型分布式网站架构-设计与实践【陈康贤】

面向服务的体系架构(SOA) HTTP协议的工作方式与HTTP网络协议栈的结构 如何实现基于HTTP协议和TCP协议的RPC调用,它们之间的有何差别,分别适应何种场景 如何实现服务的动态注册和路由,以及软...

p2ng
2016/05/23
214
0
MongoDB的简单学习4-性能相关

一、索引管理 简介: MongoDB提供了多样性的索引支持,索引信息被保存在system.indexes中,MongoDB中的_id字段在创建的时候,默认已经建立了索引,这个索引比较特殊,并且不可删除,不过Cappe...

wind2012
05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Coding and Paper Letter(三十九)

资源整理。 1 Coding: 1.Python库benchmark rio s3,用于在访问S3上的文件时对Rasterio / GDAL的多线程性能进行基准测试的工具。 benchmark rio s3 2.Pangeo-Binder Cookiecutter模板。 cook...

胖胖雕
38分钟前
2
0
Promise 对象

Promise(承诺) 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供...

简心
40分钟前
1
0
让UI设计师崩溃的瞬间,你经历过哪些?

隔行如隔山,这句话人人耳熟能详,但其实隔行并不可怕,大家各谋其事,各尽其职,倒也互不打扰,真正可怕的是,是内行还要受外行指点江山,而最难的部分,便是那沟通。流畅的沟通,和声细语,...

mo311
42分钟前
3
0
python进制转换

#进制转换print(bin(10)) #十进制转换成二进制print(oct(10)) #十进制转换成八进制print(hex(10)) #十进制转换成十六进制print(int('1010',2)) #二进制转十进制print(int(...

fadsaa
53分钟前
5
0
syntax error near unexpected token

最近不断重复在虚拟机CentOS测试安装gitlab,因为gitlab有一个脚本需要饭强才能下载,于是我先在windows下载好再上传到虚拟机,可是执行脚本的时候提示“syntax error near unexpected toke...

W_Lu
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部