Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103780655
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-05-31 16:53:13

更新统计信息的调优

IDS 使用基于成本的优化器:

当优化器确定查询计划时,它为每个可能的计划赋予一个成本,然后选择成本最低的计划。下面是优化器用于确定每个查询计划的成本的一些因素:

  • 与每个文件系统访问相关的 I/O 请求的数量
  • 确定哪些行满足查询谓词所需的 CPU 工作
  • 对数据进行排序或分组所需的资源
  • 可用于查询的内存大小(由 DS_TOTAL_MEMORYDS_MAX_QUERIES 参数指定)

为了计算每种可能的查询计划的成本,优化器:

  • 使用一组描述表数据和索引的性质和物理特征的统计信息
  • 检查查询过滤器
  • 检查计划中可以使用的索引
  • 分析转移数据以执行本地连接或用于分布式查询的远程连接的成本

它使用系统编目表 SYSDISTRIB 确定成本。

UPDATE STATISTICS 语句更新优化器用于确定最低成本的查询计划的系统编目中的统计信息。

下面的统计信息是由 CREATE INDEX 带或者不带 ONLINE 关键字自动生成的。

  • 索引级统计信息相当于 LOW 模式下 UPDATE STATISTICS 操作中收集到的统计信息,用于所有类型的索引,包括 B-树、Virtual Index Interface 和函数索引。
  • 列分布索引相当于 MEDIUM 模式下 UPDATE STATISTICS 操作中收集到的分布信息,用于普通 B-树索引的 non-opaque 引导索引列。

为确保优化器选择最能反映表的当前状态的查询计划,当没有自动生成动态表(即数据不断变化)的统计信息时,应定期运行 UPDATE STATISTICS

下面的表 5 总结了何时运行不同的 UPDATE STATISTICS 语句。如果有很多表,那么可以编写一个脚本以生成这些 UPDATE STATISTICS 语句。ISA 可以为表生成很多 UPDATE STATISTICS 语句。



描述
UPDATE STATISTICS LOW DROP DISTRIBUTIONS
  • 行数已经有了大的变动
  • 从之前版本的数据库服务器迁移过来之后
UPDATE STATISTICS LOW
  • 用于不是任何索引的引导列的所有列
  • (多列索引中的所有类)对于在连接列或过滤列上定义了多列索引的查询
UPDATE STATISTICS MEDIUM DISTRIBUTIONS ONLY
  • 有未索引的连接列或过滤列的查询
UPDATE STATISTICS HIGH
  • (表或者索引中的引导列)用于有被索引的连接列或过滤列的查询
  • (多列索引中的第一个区分列)用于在连接列或过滤列上定义了多列索引的查询
  • 有很多小型表的查询(放在一个盘区)








新特性将查询优化器可用统计信息的收集的某些方面自动化,并使用户可以更好地控制这些统计信息的收集和显示。

  • Dynamic Server 现在自动收集索引统计信息,这些统计信息相当于在 non-opaque 列上创建新索引时,在 LOW 模式下 UPDATE STATISTICS 收集的统计信息。
  • 当创建一个 B-树索引时,Dynamic Server 也收集列统计信息,这相当于 HIGH 模式下,对少于一百万行的表使用 1% 的抽样率,对更大的表使用 0.5% 的抽样率的情况下,UPDATE STATISTICS 收集的信息。
  • 用户不需要运行 UPDATE STATISTICS,查询优化器就可以使用该特性自动收集的索引和列统计信息。也可以在 SET EXPLAIN 输出中新的查询统计信息部分查看关于完成的查询的统计信息。
  • 在 MEDIUM 模式下的显式 UPDATE STATISTICS 操作中,resolution 子句中新的 SAMPLING SIZE 选项可以指定用于列分布抽样的最小行数。






SAMPLING SIZE 关键字和 UPDATE STATISTICS MEDIUM 一起使用,用于指定在计算列分布统计信息时抽样的最小行数。抽样的行数将大于以下两个值:

  • 指定的值
  • 满足每个 bin 中的行的百分比,同时满足置信度所需的行数

每个 bin 中的行的默认百分比为 2.5%,最小置信度为 .80。

例如,清单 4 中的语句计算 customer 表中三个列的统计信息。至少有 300 行被抽样,但是实际抽样可能多于 300 行。然而,如果需要更多的行以满足默认的 0.80 的置信度,那么对于一个使用 60 个同等类别的示例分布,将抽样更多的行。每个 bin 中被抽样的值的平均百分比将为 3%。



                    				
UPDATE STATISTICS MEDIUM FOR TABLE customer (address1, city, state) 
   SAMPLING SIZE 300 RESOLUTION 3 DISTRIBUTIONS ONLY;

UPDATE STATISTICS MEDIUM 运行时,Dynamic Server 总是在系统编目中记录实际抽样大小(表中总行数的百分比)。

阅读(620) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~