DB2数据库管理最佳实践笔记-10日常运维讲解.doc

DB2数据库管理最佳实践笔记-10日常运维讲解.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.1 日常运维工具概述 Runstats是run statistics的缩写,意思是收集统计信息,目的是为DB2优化器提供最佳路径选择; Reorg是重组的意思,目的是减少表和索引在物理存储上的碎片,提供性能; Reorgchk是重组前的检查 Rebind是对一些包、存储过程或静态程序进行重新绑定。 几个工具的执行流程: 首先通过Runstats收集表和索引的统计信息,然后执行Reorg重组,如果有必要则执行,然后再次收集统计信息。最后,对于静态语句、存储过程等,执行Rebind绑定。 10.2 Runstats 在系统运行一个查询的时候,优化器需要决定用某种方式来访问数据。只有当DB2对表中的数据有一个大概的了解,才能知道每一步操作大约需要处理多少数据,返回多少行。当优化器了解了这些信息后,就会根据一系列的运算,判定出各种访问途径所需要消耗的资源,然后从中选择一个消耗资源最少的方法。 最普通的Runstats就是统计表和索引中有多少行数据,有多少不同的数值。 Runstats命令使用DISTRIBUTION参数手机数据分布。数据分布分为两种,一种叫做频率采样(Frequency),一种叫做百分比采样(Quantile)。当收集数据分布时,两种采样方式都会被收集。其中频率采样是手机表中拥有相同数量最多的几行,比如10000行数据中9000行为10,然后500行为9,然后100行为8,剩下的部分平均分布。如果我们制定Frequency为3的话,那么系统就会记录下来有9000行10,500行9,然后100行8,剩下的部分在估算时则假定平均分布。而百分比采样则是将整个10000行数据分成相等大小的若干段,然后记录每一段的段首和段尾的数值,当需要查询一个数据段时(比如C110 AND C115),就可以根据每一个数据段的启始数值加上段落的大小,估算出符合查询条件的记录数量。 理论上,数据分布收集的越细致越好。但是经过细致的数据分布信息可能会导致DB2在优化SQL时需要处理更多的信息,并占用更多的系统存储空间,可能会导致性能的下降。因此,一般情况下我们建议使用默认的数据分布采样设置,也就是频率采样为10,百分比采样为20。但是,有些情况下,则需要根据实际情况调整分布参数。 Runstats的语法比较复杂,在实际应用中,最常用的几种使用方法如下: 1)为表和索引收集统计信息,包括数据分布,代码如下: RUNSTATS ON TABLE 表模式.表名 ON ALL COLUMNS WITH DISTRIBUTION AND DETAILED INDEXES ALL 2)收集索引统计信息,如果表上没有统计信息,该选项会同时对表做统计。但该选项并不会收集数据分布信息,代码如下: RUNSTATS ON TABLE 表模式.表名 FOR INDEXES ALL 3)使用伯努利算法抽样统计。DB2会扫描每一行数据,但只对一定比例的抽样数据进行统计。这种方法一般用于数据仓库中的大表如果收集全表数据统计,将需要很长时间,并占用CPU资源,应用性能会造成影响。下列采用了伯努利10%抽样统计,代码如下: runstats on table 表模式.表名 tablesample bernoulli(10) 如何查看一个表是否收集了统计信息?一个比较有效的办法是查看syscat.tables的stats_time字段,如果该字段值为空,则表示没有收集过统计信息,否则会显示统计信息的时间: db2 select char(tabname,20) as tabname,stats_time form syscat.tables where STATS_TIME is NULL DB2 runstats 命令只能针对单表执行,而无法对整个数据库做运行时统计(虽然可以使用reorgchk update statistics 对所有表收集统计信息,但reorgchk并不会收集分布统计)。可考虑将需要执行runstats的表写入一个脚本,以下是一个脚本范例: #!/bin/ksh if [$#3];then echo USAGE: $0 DB_NAME DB_USER_NAME DB_PASSWORD exit fi DB=$1 DB_USER=$2 DB_PWD=$3 db2 connect to $DB user $DB_USER using $DB_PWD db2 select rtrim(RUNSTATS ON TABLE||rtrim(tabschema)||.||tabname|| ON ALL COLUMNS WITH DISTRIBUTION ON ALL COLUMNS AND SAMPLED DETA

文档评论(0)

119220 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档