首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>DB2>正文

DB2数据库更新执行计划的几个常见的方法

http://www.oklinux.cn  2008-10-25  ccidnet 水晶  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

和Oracle数据库一样,DB2数据库里面也是通过优化器来分析你的SQL,生成它认为最优的执行计划(Access Plan)。DB2的优化器实际上是一个标准规则集合,一般来说我们只要告诉DB2要检索什么,而不是如何检索。

那么DB2的优化器是根据什么来判断SQL的最优存取路径呢?

DB2的优化器是基于成本的优化器,也就是CBO(Cost Based Optmizer)。也就是说DB2 优化器会应用查询成本公式,该公式对每条可能的存取路径的四个因素进行评估和权衡:CPU 成本、I/O 成本、DB2 系统目录中的统计信息和实际的 SQL 语句。

那么我们来简单看一下DB2的优化器的工作流程:

1. DB2的优化器,在接收到SQL语句后,会首先校验SQL的语法,确保是正确的SQL;

2. 根据当前的系统环境信息,生成最优的执行计划来优化SQL语句;

3. 把SQL翻译成计算机指令语言,并执行这个优化后的SQL;

4. 返回结果,或者存储它们,以便将来的执行。

在我们看来,DB2 系统目录中统计信息是让DB2优化器正确工作的一个非常重要的依据。这些统计信息向优化器提供了与正在被优化的 SQL 语句将要访问的表状态相关的信息。这些信息主要包括:

Table--包括表的记录数、PAGE、PCTFREE以及COMPRESS等信息,相关的系统视图是:sysstat.tables、syscat.tables。

Columns—包括COLUMNS的数量、长度、分布特征以及COMPRESS等信息,相关的系统视图是:sysstat.columns、syscat. columns。

Index--包括是否存在索引、索引的组织(叶子页的数量和级别的数量)、索引键的离散值的数量以及是否群集索引, 相关的系统视图是:sysstat.indexes、syscat. indexes。

其他的还有分区/节点组信息和表空间的信息,如何及时更新这些信息呢?保证DB2优化器正确的工作,在DB2里面提供了以下的办法。

RUNSTATS与REOGCHK

Runstats这个命令的功能主要就是收集数据库对象的状态信息,这对数据库使用合理的ACCESS PLAN是至关重要的。一般来说,以下几种情况下面,我们需要用runstats来收集统计信息:

1. 在给表创建一个index后,我们最好做一次runstat。这个情况也是大家经常忽略的。很多时候大家在给表增加了一个index后,分析执行计划,发现没有变化,觉得很奇怪。其实这个时候,你需要做一次runstats,就可以了。在8.2里面,DB2做了很好的改进,可以避免这个问题,在创建index的时候,可以立即更新你的信息。

2. 在对table做了一次reorg后,记得要做一次runstats。因为对表做reorg,会修改表的很多信息,比如高水位等,所以做一次runstats,可以更新统计信息。

3. 当你的表里面的数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats。这些变化包括删除,修改,插入。对于一些非常大的表,比方在数据仓库的项目里面,某些事实表非常巨大。这个时候,完整的对一个大表作runstats可能花费时间相当大,DB2 8.1里面支持我们对这些大表作抽样,比方说只对20%的数据作runstats,这样的话,一般来说也能保证得到正确的执行计划。当然首先要确保这个表里面的数据最好分布比较均匀。

4. 当你在分区(DPF)数据库里面使用了REDISTRIBUTE DATABASE PARTITION GROUP这个命令,那么就需要用runstats来收集新的统计信息。

RUNSTATS命令的语法如下:

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

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

在实际的项目里面,对于变化比较大的表,需要我们定时对数据库做runstats,一般来说runstats和reorg可以结合起来做,首先对表作reorg,然后做runstats,最后REBIND数据库根据最新的统计信息生成合适的统计计划。

值得注意的是,如果我们要处理的表数据量是快速变化的,比如在电信移动行业,需要在月末进行处理的汇总表。在不长的时间范围内数据量变化特别大,从而使得RUNSTATS 得到的统计信息不准确,原因是这些统计信息只是某个时间点的信息。您可以用这条语句来把表修改为volatile。

共3页: 上一页 1 [2] [3] 下一页

上一篇:Sybase ASE出现表间循环依赖不能删除的问题   下一篇:详细讲解IBM DB2数据库无限活动日志策略

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·详细讲解IBM DB2数据库无限活动日志策略
·pureQuery和DB2 9的闪光点
·使用DB2DART降低管理表空间的高水位标记
·全面解析IBM DB2 9中的查询优化新特性
·如何将Siebel 7从DB2 UDB V8迁移到DB2 9
·教你在AIX上安装IBM DB2 9版本的分区环境
·用DB2 V9.1for z/OS实现应用程序会话锁定
·DB2 V9.5工作负载管理之工作类和工作操作
·DB2 V9.5工作负载管理之阈值(THRESHOLD)
·DB2 V9.5工作负载管理之如何实现工作负载
·DB2 V9.5工作负载管理之工作负载管理简介
·讲解DB2 V9.5工作负载管理之定义服务类
·在AIX HA环境中安装DB2时的七个注意事项
·全面解析DB2性能调优方面的二十个疑难问题
·DB2数据库控制中心乱码问题解决方法集合
·为什么修改机器名后DB2实例会无法启动
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·详细讲解IBM DB2数据库无限活动日志策
·pureQuery和DB2 9的闪光点
·使用DB2DART降低管理表空间的高水位标
·全面解析IBM DB2 9中的查询优化新特性
·如何将Siebel 7从DB2 UDB V8迁移到DB2
·教你在AIX上安装IBM DB2 9版本的分区环
·用DB2 V9.1for z/OS实现应用程序会话锁
·DB2 V9.5工作负载管理之工作类和工作操
·DB2 V9.5工作负载管理之阈值(THRESHOLD
·DB2 V9.5工作负载管理之如何实现工作负
·DB2 V9.5工作负载管理之工作负载管理简
·讲解DB2 V9.5工作负载管理之定义服务类
  阅读排行
·维护IBM DB2数据库所应了解的基本知识
·Oracle与DB2、MySQL取前10条记录的对比
·快速掌握查看数据库表死锁的实用方法
·实例讲解如何在DB2 UDB中正确的监控死
·快速掌握IBM DB2数据库的常用操作指令
·分析in和exists的区别与执行效率的问题
·教你快速掌握DB2数据库中的相关命令
·DB2中更新执行计划的几个常见的方法
·使用DB2look 重新创建优化器访问计划(2
·怎样为DB2 XML数据开发Java应用程序(
·DB2中创建一个汉字拼音首字母的SQL函数
·DB2数据库离线、在线全备、增量备份及
·使用DB2look 重新创建优化器访问计划(3
·三种级别的DB2数据库字符集的设置与修
·Oracle/Sybase/Informix与DB2的比较
网摘收藏: