跟屌丝大哥学习DB2---DB2 runstats、reorgchk、reorg 命令

1、runstats

runsats可以搜集表的信息,也可以搜集索引信息。作为runstats本身没有优化的功能,但是它更新了统计信息以后,可以让DB2优化器使用最新的统计信息来进行优化,这样优化的效果更好。

 

runstats   on   table   <tbschema>.<tbname>   收集表   <tbname>   的统计信息。表名必须是用   <dbschema>   全限定的。

 

 

  2、reorg

 

 A、 reorg   table   <tbschema>.<tablename>   通过重构行来消除“碎片”数据并压缩信息,对表进行重组。表名必须是用   <dbschema>   全限定的。

  B、

reorg还有一个功能就是可以将表中的数据按照某个索引关键字的顺序排列,从而可以减少某些查询I/O的数量。

 

 

  执行REORG可以考虑分为表上有索引和没有索引两种情况: 

     a.如表名为DB2INST1.STAFF,索引名为DB2INST1.ISTAFF

      reorg table db2inst1.staff index db2inst1.istaff use tempspace1

    b.建议REORG时使用USE参数指定数据重排时使用的临时表空间,否则,REORG工作将会

       在表所在表空间中原地执行.如果表上有多个索引,INDEX参数值请使用最为重要的索

       引名.

    c.表上没有索引:

       reorg table db2inst1.staff use tempspace1

      reorg table sysibm.systables use tempspace1

 

 

3、

 

让db2系统定时runstats、reorg

Q:定期runstats、reorg

A:在db2 v8.2以上可以使用 CALL SYSPROC.ADMIN_CMD来实现,

这里主要讲在v8.2以前的版本中利用shell或者批处理来实现同样的功能

因为在以前的版本中存储过程中是不能使用DDL操作语句的!(这点对于oracle刚转过来的人来说很是郁闷的)

然后可以利用db2自带的配置自动维护来做,但是java做的东西比较让人感觉头痛!尤其是速度和莫名的错误!

本代码使用操作系统的脚本来实现这部分功能!

1.windows下

如下:

下一个cmd文件s.cmd

内容如下:

db2 connect to ccp_dm

db2 -x "select 'runstats on table '||rtrim(tabschema)||'.'||tabname||' on all columns' from sysstat.tables where card=-1">tab.sql

db2 -f tab.sql

--其中where后的条件可以修改

然后就是定制任务:用windos的定制任务!每周或者每月运行,这个就不讲了哈!

这部分经测试,通过!

不过能,这里只提到了runstats,对于reorg同理也可以实现!

 

 

4、reorgchk

 

C:\Documents and Settings\Administrator>db2 reorgchk update statistics on table all

 

正在执行 RUNSTATS ....

 

  reorgchk   on   table   all   确定是否需要对表进行重组。这对于对所有表自动执行 runstats很有用。   

 

 

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

 

 

db2 reorgchk 命令是最重要的、也是经常被忽略的 DB2 调整命令之一。 db2 reorgchk 命令被忽略是因为它不是一个一次性调整项。由于更新是在 DB2 数据库上执行的,因此关于表的统计信息将不会是最新的。db2 reorgchk 命令更新 DB2 优化器所使用的重要统计信息。建议在大约每 10,000 次更新后重复 db2 reorgchk 命令。

 

在运行 db2 reorgchk 命令之前,您应该停止 IBM Directory Server 以防止在命令执行的同时发生任何 DB2 查询或更新。虽然这是可选的,但数据库查询和更新可能会非常缓慢并有可能超时。

 

 

 

请注意,运行 db2 reorgchk 命令所带来的性能益处是即时的。不必在 db2 reorgchk 命令之后重新启动 DB2。

 

除了提高性能之外,db2 reorgchk 命令还报告关于数据库中所有表和索引的统计信息。db2 reorgchk 命令还报告关于 DB2 表的组织的统计信息。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-08 22:41:55

跟屌丝大哥学习DB2---DB2 runstats、reorgchk、reorg 命令的相关文章

跟屌丝大哥学习设计模式-抽象工厂模式

1.3 抽象工厂(Abstract Factory)模式    抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象.这就是抽象工厂模式的用意.     每个模式都是针对一定问题的解决方案.抽象工厂模式面对的问题是多产品等级结构的系统设计.     在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级.     产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族.比如AMD的CPU和ADM芯片的主板,组成一个家族.

跟屌丝大哥学习设计模式--生成器模式(Builder)

Builder 模式的重心在于分离构建算法和具体的构造实现,从而使构建算法可以重用. Builder 模式的构成分为两部分:一部分是Builder接口,定义了如何构建各个部件,并装配到产品中去:另一部分是Director,定义如何来构建产品,Director 负责整体的构建算法,而且通常是分步来执行的. 注:这里的构建算法是指:通过什么样的方式来组装产品:构建产品指的是:构建一个复杂对象. Builder 模式就是将构建产品部件和组装产品的过程分开,即实现了产品部件和组装产品过程的解耦,可以使得

跟屌丝大哥学习设计模式--享元模式

四.举例 这里就以去餐馆吃饭为例详细的说明下享元模式的使用方式.去菜馆点菜吃饭的过程大家一定都是轻车熟路了,这里就不赘述.在例子中我使用了一个list来存放外蕴状态和内蕴状态的对应关系,而且提供了查询每个客人点菜情况的方法.内蕴状态在这里代表了菜肴的种类,而外蕴状态就是每盘菜肴的点菜人.  A 让我们先来看看单纯享元模式的实现吧.     先看下抽象享元角色的定义:GoF对享元模式的描述是:运用共享技术有效地支持大量细粒度的对象. Flyweight模式是构造型模式之一,它通过与其他类似对象共享

跟屌丝大哥学习设计模式---代理模式之动态代理

动态代理 java中动态代理机制的引入使得代理模式的思想更加完善与进步,它允许动态的创建代理并支持对动态的对所代理的方法进行调用.Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类:  (1). Interface InvocationHandler:该接口中仅定义了一个方法Object:invoke(Object obj,Method method, Object[] args).在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,如上

跟屌丝大哥学习设计模式---生成器模式(Builder)解析例子

生成器模式属于对象结构型模式,其意图是将一个复杂对象的构建与他的表示分离,使得同样的构建创建过程可以创建不同的表示. 适用性: 1.         当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时 2.         当构造过程必须允许被构造的对象有不同的表示时.   参与者:        生成器Builder:为创建一个Product对象的各个部件指定抽象接口(AnimalBuilder).        具体生成器ConcreteBuilder:实现Builder接口

跟屌丝大哥学习设计模式---代理模式

Java 代理模式详解 代理模式是我们比较常用的设计模式之一.其中新思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象.这些额外的操作通常需要与实际对象进行通信,代理模式一般涉及到的角色有:  抽象角色:声明真实对象和代理对象的共同接口:  代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象.同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装.  真实角

跟屌丝大哥学习设计模式--工厂方法模式

东汉<风俗通>记录了一则神话故事:"开天辟辟,未有人民,女娲搏,黄土作人--",讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹而洁净的自然环境,寂静而又寂寞,于是女娲决定创造一个新物种(即人类)来增加世界的繁荣,怎么制造呢?       别忘了女娲是神仙,没有办不到的事情,造人的过程是这样的:首先,女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生:       第一

跟屌丝一起学习 DB2 第三课 创建表空间

缓冲池(bufferpool) 是一个内存块的集合,这些内存块采用页面的形式.在首次创建数据库时,同时创建了一个默认的缓冲池 IBMDEFAULTBP.可以在创建表空间时,或者在 Buffer Pools 视图中使用 Create New Bufferpool 向导,创建新的缓冲池. 缓冲池最重要的作用是,在数据库读写硬盘上的数据时帮助减少 I/O 开销.这是通过 I/O 预获取和页面清理器实现的.预获取能够减少读取页面的 I/O 开销,其原理是:预先判断特定查询可能需要的页面,然后将这些页面读

跟屌丝一起学习 DB2 第五课 存储过程(一)

DB2 存储过程 一.什么是存储过程 受 DB2 服务器控制的一段可执行程序 可以通过SQL的CALL语句来完成对存储过程的调用 在存储过程中可以包含业务逻辑 存储过程可以在本地或远程进行调用 存储过程可以接收或传递参数,生成结果集 二.存储过程特征 包含使用sql语句的过程构造 存储在数据库中且在db2 服务器上运行: 可以由正在使用的sql的应用程序根据名称来调用: 允许应用程序分2部分允许,在客户机上运行应用程序,在服务器上运行存储过程 存储过程在应用程序中的优势 减少了客户机与服务器直接