大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> DB2 -> 使用db2look 重新创建优化器访问计划

使用db2look 重新创建优化器访问计划

时间: 2021-08-13 作者:daque

简介 在动作 db2 udb 扶助领会员(support analyst)处事时,我常常从处置优化器或查问安置题目的存户何处听到下列题目: “我怎样在接办消费情况的尝试情况中从新创造沟通的查问考察安置呢?” 咱们往往须要将消费情况复制到尝试情况中,囊括为查问领会手段从新创造沟通的考察安置。 比方,在消费中,您大概会遇到运用蹩脚考察安置的查问所引导的本能题目,而且须要在尝试体例上复制该考察安置以试验少许各别的战略,比方操纵统计数据,窜改优化级别,对 db2 备案表变量试验各别的树立之类,再不普及本能。 在理念的寰球中,您须要让尝试情况尽大概逼近地配合消费。也即是说,您须要在两个情况中运用实足沟通的硬件、操纵体例保护级别和摆设、db2 级别和摆设,以及在尝试中运用与消费中沟通的数据。但是,并非老是不妨到达这种理念情景。即使消费情况具备极端洪量的数据,您大概就没有含量来生存消费体例的尝试复本。 db2look 适用步调不妨用来到达该目的,纵然您没辙复制一切的消费详细。 正文将证明怎样不妨在尝试体例上模仿消费体例,而无需真实的数据来从新创造查问安置题目。该功效将扶助您调节和测试查问和领会考察安置题目,且不打断消费情况中的处事。然而请提防,即使须要尝试截止考察安置的实行,则仍旧须要将尽大概多的数据从消费情况装入尝试情况。尝试体例和消费体例之间的分辨仍旧老是大概足以引导尝试上的实行个性不配合消费上的。这局部的领会(本能调优)既是一门科学,又是一门艺术。 优化器或查问编写翻译器范围中的其余题目,比方 sql0901n 缺点或范例解体,也不妨运用正文中所证明的本领来从新创造。您不妨试验百般战略,如尝试最新的补丁包(即使体例是居于更老的补丁级别),试验各别的优化级别、各别的备案表变量之类,再不察看那些窜改能否将处置题目。 让咱们看一看 db2look 顶用于到达该目的的选项。 db2look 吩咐及其选项 底下是用来从消费体例捕捉所需消息的吩咐: 清单 1. 从新创造优化器题目的吩咐 db2look -d <dbname> -l -o storage.out                         db2look -d <dbname> -f -fd -o config.out db2look -d <dbname> -e -a -m -o db2look.out  db2look -d <dbname> -e -a -m -t table1 table2 .... tablex -o table.ddl 此刻,让咱们更精细地看一看那些 db2look 吩咐选项。 天生缓冲池、表空间和数据库分区组消息 db2look -d <dbname> -l -o storage.out 底下是对之上 db2look 吩咐中所用选项的刻画: -d:数据库名 —— 该选项必需指定。  -l:天生数据库构造。这是用来数据库分区组、缓冲池和表空间的构造。  -o:将输入从新定向到给定的文献名。即使未指定 -o 选项,然么输入将为规范输入(stdout),常常是输入到屏幕。 -l 选项对于模仿消费情况格外要害。理念情景下,您须要具备沟通的缓冲池、数据库分区组(即使居于多分区情况中)和表空间消息(囊括偶尔表空间)。然而,即使您遭到了外存牵制,没辙调配消费中所具备的巨型缓冲池,那么就运用 db2fopt 吩咐。我稍后将在本末节中更精细地计划该吩咐。 并非老是不妨在尝试中树立与消费中沟通的表空间。比方,大概树立了巨型摆设,却没辙精巧地在尝试中创造沟通的摆设巨细。大概,大概基础没辙在尝试情况中赢得独立的表空间摆设。其余,大概没辙在尝试中树立与消费中沟通的路途。须要符合地变动路途、摆设和文献以符合尝试情况。 底下是优化器为表空间所运用的要害消息。这即是您须要保证在尝试和消费中沟通的消息。(提防:这边所展现的数字是一个例子。您应在尝试中运用与您消费中沟通的树立。) prefetchsize 16 extentsize 16 overhead 12.670000 transferrate 0.180000 即使消费中表空间是“由数据库处置的”,那么在尝试中也该当是“由数据库处置的”。即使它在消费中是“由体例处置的”,那在尝试中也该当是如许的办法。 提防:即使这是具备多个物理分区(mpp)的体例,那么尝试中数据库分区组中的分区数量就必需沟通。但是,物理呆板的数量不用沟通。尝试和消费中所有 mpp 情况中论理分区的数量必需沟通。 天生摆设参数和备案表变量 db2look -d <dbname> -f -fd -o config.out 这边,我将运用下列参数: -f:索取摆设参数和备案表变量。即使指定了该选项,就会忽视 -wrapper 和 -server 选项。  -fd:为 opt_buffpage 和 opt_sortheap 天生 db2fopt 语句,以及其余摆设和备案表树立。 该吩咐的输入如次所示: 清单 2. db2look 吩咐的示例输入 $ db2look -d sample -f -fd -- no userid was specified, db2look tries to use environment variable user -- user is: skapoor -- this clp file was created using db2look version 8.2 -- timestamp: sat mar 26 00:13:36 est 2005 -- database name: sample -- database manager version: db2/6000 version 8.2.2 -- database codepage: 819 -- database collating sequence is: unique connect to sample;  --------------------------------------------------------  -- database and database manager configuration parameters  --------------------------------------------------------  update dbm cfg using cpuspeed 6.523521e-07;  update dbm cfg using intra_parallel no;  update dbm cfg using federated no;  update dbm cfg using fed_noauth no;  !db2fopt sample update opt_buffpage 50000;  !db2fopt sample update opt_sortheap 10000;  update db cfg for sample using locklist 1000;  update db cfg for sample using dft_degree 1; update db cfg for sample using maxlocks 10;  update db cfg for sample using avg_appls 1;  update db cfg for sample using stmtheap 2048;  update db cfg for sample using dft_queryopt 5;  ---------------------------------  -- environment variables settings  ---------------------------------  !db2set db2_antijoin=yes;  !db2set db2_inlist_to_nljn=yes;  commit work; connect reset;  terminate;  -f 和 -fd 选项是用来索取摆设参数和备案表变量的要害选项,而优化器将在考察安置阶段运用那些摆设参数和情况。在上头的 清单 2 中,请提防下列 -fd 选项所爆发的输入: !db2fopt sample update opt_buffpage 50000;  !db2fopt sample update opt_sortheap 10000;  db2fopt 吩咐报告优化器为“缓冲池巨细(buffer pool size)”运用指定的值,而非将可用缓冲池变量的页面加起来。(db2exfmt 输入中的缓冲池巨细将在底下的 缓冲池巨细 一节中进前进一步的计划。)比方,假如因为尝试体例上的外存牵制,您没辙赢得巨型的缓冲池,而且蓄意将巨细摆设得沟通,本质上却不是真实有这么大。运用将天生需要的 db2fopt 吩咐的 -fd 选项来报告优化器运用指定巨细,而非鉴于对该数据库可用的缓冲池举行计划。[page_break]正如将在底下的 排序堆 一节中所看到的,它的处事办法与排序堆的沟通。 即使您是一名 dba,就大概会运用 db2 sql explain tool(db2exfmt)来赢得对于 sql 考察安置的领会。db2exfmt 东西用来方法弥合释表的实质。即使您在消费中运用 db2exfmt 察看一个考察安置的输入,就会提防到安置顶部的下列实质。(提防:那些参数常常是由 db2look 输入中的 -f 和 -fd 选项所采用的,除去 dbheap 树立除外)。 清单 3. db2exfmt 的示例输入 database context: ----------------          parallelism:            none             cpu speed:              6.523521e-07               comm speed:             100          buffer pool size:       50000          sort heap size:         10000          database heap size:     5120          lock list size:         1000          maximum lock list:      10          average applications:   1          locks available:        7849  package context:  ---------------          sql type:               dynamic          optimization level:     5          blocking:               block all cursors          isolation level:        cursor stability  ---------------- statement 1  section 201 ----------------          queryno:                1          querytag:               clp          statement type:         select          updatable:              no          deletable:              no          query degree:           1  即使您稍微深刻察看 db2exfmt 的输入,就在考察安置之后,您将看到能否具备感化优化器安置的备案表树立。 提防:其余,可惜的是,db2look -f 并非列出了一切关系的备案表变量。您将须要增添那些脱漏的。普遍来说,您尝试体例上的备案表变量树立应与消费体例上的沟通,大概尽大概逼近。 清单 4. 感化考察安置的备案表树立 1) return: (return result)          cumulative total cost:          57.6764          cumulative cpu cost:            191909          cumulative i/o cost:            2          cumulative re-total cost:       5.37264          cumulative re-cpu cost:         134316          cumulative re-i/o cost:         0          cumulative first row cost:      26.9726          estimated buffer pool buffers:   2          arguments:          ---------          bldlevel: (build level)                  db2 v8.1.0.80 : s041221          envvar  : (environment variable)        db2_antijoin=yes                  db2_inlist_to_nljn = yes          stmtheap: (statement heap size)                  2048  创造数据设置谈话(ddl) 下列 db2look 吩咐创造了 ddl 以复制一切数据库东西,以及摆设和统计消息。 db2look -d <dbname> -e -a -m -o db2look.out 这边,咱们运用了下列参数: -a:为一切的创造器(creator)天生统计数据。即使指定了该选项,那么将忽视 -u 选项。  -e:索取复制数据库所需的 ddl 文献。该选项天生包括了 ddl 语句的剧本。该剧本不妨在另一数据库上运转以从新创造数据库东西。  -m:以模仿形式运转 db2look 适用步调。该选项天生包括了 sql update 语句的剧本。那些 sql update 语句捕捉一切的统计数据。该剧本不妨在另一数据库上运转以复制从来的那一个数据库。当指定 -m 选项时,将忽视 -p、-g 和 -s 选项。 搜集数据库子集的统计数据和 ddl 为了只是搜集某些表和关系东西的统计数据和 ddl,可运用下列吩咐: db2look -d <dbname> -e -a -m -t <table1> <table2> .. <tablex> -o table.ddl  这边,我运用了下列附加参数: -t:为一定的表天生统计数据。不妨将表的最大数量指定于 30。 其余,即使您不运用 -a 选项,就不妨运用 -z 选项: -z:形式名。即使同声指定了 -z 和 -a,那么将忽视 -z。邦联地区将忽视形式名。 提防:-m 选项极端要害。该选项将从体例表搜集一切统计数据。尝试中的统计数据必需与消费中的沟通,那些统计数据是不妨在尝试情况中模仿消费情况的要害。  db2exfmt 输入的更多详细 数据库处置器级的摆设参数 提防:运用吩咐 db2 "get dbm cfg" 察看那些参数,并运用 db2 "update dbm cfg using <parameter> <value>" 革新数据库处置器的摆设参数。 并行性(parallelism): 该参数表白是起用分区间并行性(inter-partition parallelism),仍旧起用里面分区并行性(intra-partition parallelism)。即使这是具备多个分区的 dpf,那么您将看到 inter partition parallelism。即使这不过 smp(起用 intra_parallel)单个节点情况,那么您将看到 intra partition parallelism。即使起用了 intra_parallel,而且是多个分区的情况,您将看到该参数为 inter and intra partitions parallelism。结果,即使没有分区间或分区内并行性,该参数将表露 none。 cpu 速率(cpuspeed): sql 优化器运用 cpu 速率(每条训令几微秒)来评价某些操纵的实行本钱。 通讯速率(comm_bandwidth): sql 优化器运用为通讯带宽所指定的值(每秒几兆字节)来评价在分区数据库体例中的分区效劳器之间实行某些操纵的本钱。 数据库级的摆设参数 提防:运用吩咐 db2 "get db cfg for <dbname>" 来察看那些参数,以及运用 db2 "update db cfg for <dbname> using <parameter> <value>") 来革新数据库摆设参数。 缓冲池巨细(buffer pool size): 即使运用 buffpage 动作一个缓冲池的默许值,那么 db2exfmt 输入中表露的缓冲池巨细即是由 buffpage 参数确定的,大概鉴于 syscat.bufferpools 的实质举行计划。所表露的数量即是调配给数据库的缓冲池页面包车型的士总数量。比方,假如咱们具备下列缓冲池: 表 1. 缓冲池树立 缓冲池称呼巨细 ibmdefaultbp1000 bp11000 bp24000 bpind11000 bpind21000 bplong1000 bptemp1000 总额:10,000 db2exfmt 输入将表露一切缓冲池中的页面总额为总的巨细。在上头的例子中,即是 10,000。 提防:页面巨细(pagesize)可有可无,只是是页面包车型的士数量。 即使您没辙在尝试中调配到与消费中沟通数目的缓冲池,那么不妨在 db2look 中运用 -fd 选项来运用 db2fopt 备选吩咐。 在 mpp 中,优化器为运转查问的节点运用总的缓冲池消息时,要按每个节点来计划 opt_buffpage。所以,该窜改将只是运用到运转该东西的谁人节点上。 排序堆巨细(sortheap) 该参数设置用来独占排序的独占外存页面包车型的士最大数量,或用来共享排序的共享外存页面包车型的士最大数量。 您应将之树立为与消费中沟通的值。同样,经过在 db2look 中运用 -fd 选项,您将提防到: !db2fopt sample update opt_sortheap 256; 这将重写 sortheap 摆设参数,优化器也将之用作 sortheap 值。同样,在运转时真实调配的排序堆(sortheap)本质大将由数据库摆设中的 sortheap 树立来确定。与 opt_buffpage 沟通,即使您没辙在尝试体例上调配与消费体例上沟通巨细的排序堆(sortheap),那么不妨运用 opt_sortheap。 数据库堆巨细(dbheap): 每个数据库都有一个数据库堆,数据库处置器运用它来代办贯穿到数据库上的一切运用步调。 它包括表、索引、表空间平静冲池的遏制块消息。 锁列表巨细(locklist): 该参数表白调配给锁列表的保存器巨细。 最大锁列表(maxlocks): 该参数设置数据库处置器实行晋级之前必需填入的运用步调所占领锁列表的百分比。 locklist 和 maxlocks 将扶助决定某扫描(索引扫描或表扫描)功夫将持有的锁典型,以及分隔级别。比方,您将在安置中提防到(比方说)索引扫描操纵:   ixscan: (index scan)           tablock : (table lock intent)                  intent share 提防:即使尝试体例的 db2exfmt 输入中的可用锁(locks available)与消费体例各别,就不要举行贯穿 —— 该分别不感化查问安置。 平衡运用步调(avg_appls): sql 优化器运用该参数来扶助评价在运转时有几何缓冲池可用来所采用的考察安置中(由于贯穿到数据库的一切震动运用步调共享缓冲池)。 优化级别(dft_queryopt): 查问优化类用来在编写翻译 sql 查问时引导优化器运用各别的优化级别。 查问深度(dft_degree): 用来 sql 语句的分区里面并路途度。即使树立为 any,优化器就春联机的本质 cpu 数量敏锐。即使您运用 any,那么就该当将尝试和消费体例上的 cpu 数量摆设得沟通,只有禁止使用分区内并行(intra_parallel)。 除去之上窜改除外,还必需保证其余少许参数都沟通。 保持的高频值数量(num_freqvalues): 该参数承诺您指定“高频值(most frequent values)”的数量,当在 runstats 吩咐上指定 with distribution 选项时,将搜集该值。 保持的分位数数量(num_quantiles): 该参数遏制在 runstats 吩咐上指定 with distribution 选项时将搜集的分位数(quantile)数量。 尝试体例上的上述两个参数 num_freqvalues 和 num_quantiles 必需与消费体例中的沟通,再不保证在尝试体例上搜集与消费中沟通数手段频值数量和分位数值。 sql 语句堆(4kb)(stmtheap): 在 sql 语句的编写翻译功夫,语句堆(statement heap)用作 sql 编写翻译器的处事空间。该参数指定该处事空间的巨细。即使尝试中的该参数小于消费中的,您就大概会发端看到 sql0101n 动静,由于不足编写翻译查问所须要的语句堆空间。即使没有充满的语句堆用来动静贯穿列举,您也大概看到 sql0437w rc=1,低沉为贪心贯穿列举。[page_break]在尝试体例上从新创造优化器/查问安置题目的示例 示例 1: os:windows 2000 db2level:v8.2 fixpack 8 ese 单分区 尝试并复制沟通的 os 和 db2level。 数据库: 消费数据库:sample 尝试数据库:dummydb 运用下列吩咐创造 sample 数据库:db2sampl 运用下列吩咐创造 dummy 数据库: db2 create db dummydb 提防:用与消费中沟通的代码页、地域和排序序列创造 test 数据库。 消费情况: -------------------------------------------------------- -- database sample and database manager configuration parameters -------------------------------------------------------- update dbm cfg using cpuspeed 9.446886e-007; update dbm cfg using intra_parallel no; update dbm cfg using federated no; update dbm cfg using fed_noauth no; !db2fopt sample update opt_buffpage 250; !db2fopt sample update opt_sortheap 256; update db cfg for sample using locklist 50; update db cfg for sample using dft_degree 1; update db cfg for sample using maxlocks 22; update db cfg for sample using avg_appls 1; update db cfg for sample using stmtheap 2048; update db cfg for sample using dft_queryopt 5; --------------------------------- -- environment variables settings --------------------------------- !db2set db2_inlist_to_nljn=yes; !db2set db2_hash_join=yes; 除去之上树立,还应在数据库摆设中提防下列摆设: db2 get db cfg for sample > dbcfg_sample.out database heap (4kb)                     (dbheap)  =  600 sql statement heap (4kb)                (stmtheap)  =  2048 number of frequent values retained     (num_freqvalues) =  10 number of quantiles retained            (num_quantiles) =  20 保证在窜改数据库处置器摆设(dbm cfg)之后遏止并启用该范例。对于 sample 数据库,按下列办法对 org 和 sales 表运转 runstats: db2 connect to sample db2 runstats on table <schema>.org with distribution and indexes all db2 runstats on table <schema>.sales with distribution and indexes all db2 terminate 此刻,经过实行 explain.ddl 文献天生 explain 表,该文献在 <install directory>\sqllib\misc 目次下: db2 connect to sample db2 -tvf <intall path>\explain.ddl db2 terminate 在名为 query.sql 的文献中生存下列吩咐: connect to sample set current explain mode explain select * from org a, staff b where a.deptnumb=b.dept and b.dept=15 set current explain mode no terminate 此刻,按下列办法实行该文献: db2 -tvf query.sql 上头将只是以证明形式编写翻译查问。您将在屏幕上看到: c:\>db2 -tvf query.sql connect to sample    database connection information  database server        = db2/nt 8.2.1  sql authorization id   = skapoor  local database alias   = sample set current explain mode explain db20000i  the sql command completed successfully. select * from org a, staff b where a.deptnumb=b.dept and b.dept=15 sql0217w  the statement was not executed as only explain information requests are being processed.  sqlstate=01604 set current explain mode no db20000i  the sql command completed successfully. c:\>db2 terminate db20000i  the terminate command completed successfully. 运用 db2exfmt 天生考察安置,如次: db2exfmt -d sample -g tic -w -1 -n % -s % -# 0 -o prod_sample_exfmt.txt 查看 prod_sample_exfmt.txt 文献的实质。您将看到天生了底下的考察安置: access plan: -----------  total cost:   25.8823  query degree:  1               rows               return               (   1)                cost                 i/o                 |                 4               hsjoin              (   2)               25.8823                  2            /-----+-----\         4                1       tbscan           tbscan       (   3)           (   4)       12.9682          12.913          1                1         |                |        35                8   table: skapoor   table: skapoor         staff             org  此刻,这即是您要在消费 sample 数据库上连接的安置。您须要在尝试情况中模仿该安置。 从消费 sample 数据库中搜集下列消息: db2look -d sample -l -o storage.out                         db2look -d sample -f -fd -o config.out db2look -d sample -e -a -m -t org sales -o table.ddl 尝试情况: 窜改上头将数据库从 sample 贯穿到 dummydb 时所搜集的每个文献中的数据库名。 比方,即使您察看了 3 个文献的实质,就会提防到: connect to sample; 将它窜改为: connect to dummydb; 在尝试情况中接收那些文献。本例中,一切的表都是在默许的表空间 userspace1 中创造的。所以,它们也应在尝试体例上沟通的 sms 表空间顶用 storage.out 中间转播储的沟通摆设(囊括 prefetchsize、extentsize 等)举行创造。 在 config.out 文献中举行小批窜改。将下列实质: update db cfg for sample using dft_queryopt 5; 窜改为 update db cfg for sample using dft_queryopt 3; 并生存 config.out 文献。 此刻,实行 storage.out、config.out 和 table.ddl,如次: db2 -tvf storage.out > storage_output.out db2 -tvf config.out > config_output.out db2 -tvf table.ddl > table.out 查看输入文献以保证一切吩咐都胜利运转了。而且依照消费情况树立中所表露的用来 sample db 的树立来窜改 dbheap、stmtheap、num_freqvalues、num_quantiles,使它们实用于 dummydb。同声,查看备案表变量树立能否尽大概地沟通。 运用 db2stop 和 db2start 遏止并启用该范例。从新为 dummydb 数据库创造证明表: db2 connect to dummydb; <install path>\sqllib\misc\db2 -tvf explain.ddl db2 terminate; 此刻,对 dummydb 数据库运转查问,在前面临 sample 数据库运转查问时所天生的 query.sql 文献中将数据库名从 sample 窜改为 dummydb。 c:\>db2 -tvf query.sql connect to dummydb    database connection information  database server        = db2/nt 8.2.1  sql authorization id   = skapoor  local database alias   = dummydb set current explain mode explain db20000i  the sql command completed successfully. select * from org a, staff b where a.deptnumb=b.dept and b.dept=15 sql0217w  the statement was not executed as only explain information requests are being processed.  sqlstate=01604 set current explain mode no db20000i  the sql command completed successfully. c:\>db2 terminate db20000i  the terminate command completed successfully.[page_break]天生 db2exfmt 输入: db2exfmt -d dummydb -g tic -w -1 -n % -s % -# 0 -o test_dummydb_exfmt.txt 查看 test_dummydb_exfmt.txt 的实质并察看考察安置: access plan: -----------  total cost:   25.8843  query degree:  1               rows               return               (   1)                cost                 i/o                 |                 4               msjoin              (   2)               25.8843                  2            /-----+-----\         1                4       tbscan           tbscan       (   3)           (   5)       12.913           12.9682          1                1         |                |         8               35   table: skapoor   table: skapoor          org             staff  您在尝试中赢得了一个各别于消费中的考察安置。本例中,明显咱们在尝试体例上仍旧将 dft_queryopt(默许的查问优化)从 5 窜改为 3。所以,您看到的是 merge join 安置,而非 hash join 安置,以及有一点点辨别的总本钱(total cost)。 由于那些安置不配合(假如您不决定干什么),以是要查看 db2exfmt 输入中的摆设。见 表 2。 正如您不妨看到的,尝试(test)和消费(production)之间的专一辨别即是优化级别(optimization level),咱们刻意将之从 5 窜改为 3,不过为了表露在尝试情况中复制消费考察安置何以会不可功。 本例中,您将运用下列 update 语句将 dft_queryopt 革新为 5: update db cfg for sample using dft_queryopt 5 而后,遏止并从新贯穿数据库。再次对 dummydb 发出 query.sql,并运用 db2exfmt 吩咐天生考察安置。这次,您将看到沟通的考察安置。要不,就进一步保证正文中所计划的一切优化器关系的参数都是沟通的。 示例 2: 该示例表露了 db2look 吩咐中 -m 选项的要害性。前方用 -m 选项搜集的统计数据在尝试和消费中该当沟通。本例中,咱们将看到没有精确革新统计数据时安置是怎样变革的。  数据库处置器摆设、数据库摆设和 db2set 备案表变量与上头 示例 1 中的沟通。这边的形式名是 skapoor。用您的表的形式替代它。数据库是沟通的,与 示例 1 中一律是 sample 和 dummy。这边所运用的平台和 db2level 是 aix 5.1 和 db2 udb ese v8.2,fix pack 8,单分区。 在 sample 数据库上实行下列吩咐: db2 "connect to sample" db2 "create index name_ind on staff (name,id)" db2 "runstats on table skapoor.staff with distribution and indexes all" db2 "set current explain mode explain" db2 "select name from staff where id=10 order by name" db2 "set current explain mode no" db2 "terminate" 运用 db2exfmt 天生考察安置。您将看到底下的考察安置:  access plan: -----------         total cost:             0.111065         query degree:           1       rows      return      (   1)       cost        i/o        |         1      ixscan      (   2)     0.111065         0        |        35  index: skapoor     name_ind 从 sample 数据库中搜集 db2look 消息: db2look -d sample -l -o storage.out db2look -d sample -e -a -m -t staff -o db2look.out db2look -d sample -f -fd -o config.out 窜改那些文献以使您贯穿 dummy 数据库,而非之前在上头 示例 1 中所贯穿的 sample 数据库。  细工窜改统计数据之一。在 db2look.out 文献中探求下列语句(请提防,形式名、tabschema 和 indschema 大概与您的简直情景各别): update sysstat.indexes set nleaf=1,     nlevels=1,     firstkeycard=35,     first2keycard=35,     first3keycard=-1,     first4keycard=-1,     fullkeycard=35,     clusterfactor=-1.000000,     clusterratio=100,     sequential_pages=0,     density=0,     average_sequence_gap=0.000000,     average_sequence_fetch_gap=0.000000,     average_sequence_pages=0.000000,     average_sequence_fetch_pages=0.000000,     average_random_pages=1.000000,     average_random_fetch_pages=0.000000,     numrids=35,     numrids_deleted=0,     num_empty_leafs=0 where indname = ’name_ind’ and indschema = ’skapoor ’       and tabname = ’staff’ and tabschema = ’skapoor ’; 此刻,将 firstkeycard、first2keycard、fullkeycard 和 numrids 从 35 窜改为 37。此刻生存 db2look.out 文献并运转这 3 个文献: db2 -tvf config.out > config_output.out db2 -tvf storage.out > storage_output.out db2 terminate db2stop db2start db2 -tvf db2look.out > db2look_output.out 查看前两个文献 config_output.out 和 storage_output.out 的实质,以保证它们运转胜利。此刻,查看 db2look_output.out 文献的实质。您将看到下列革新语句波折了: update sysstat.indexes set nleaf=1, nlevels=1, firstkeycard=37, first2keycard=37 , first3keycard=-1, first4keycard=-1, fullkeycard=37, clusterfactor=-1.000000, c lusterratio=100, sequential_pages=0, density=0, average_sequence_gap=0.000000, a verage_sequence_fetch_gap=0.000000, average_sequence_pages=0.000000, average_seq uence_fetch_pages=0.000000, average_random_pages=1.000000, average_random_fetch_ pages=0.000000, numrids=37, numrids_deleted=0, num_empty_leafs=0 where indname =  ’name_ind’ and indschema = ’skapoor ’ and tabname = ’staff’ and tabschema = ’sk apoor ’ db21034e  the command was processed as an sql statement because it was not a valid command line processor command.  during sql processing it returned: sql1227n  the catalog statistic "37" for column "fullkeycard" is out of range for its target column, has an invalid format, or is inconsistent in relation to some other statistic. reason code = "8".  sqlstate=23521 正如您不妨看到的,上头用来索引 name_ind 的 update 语句波折了,由于 fullkeycard 大于表的基数(card)。正如经过 db2look.out 文献中的下列革新语句不妨看到的,card 是 35: update sysstat.tables set card=35,     npages=1,     fpages=1,     overflow=0,     active_blocks=0 where tabname = ’staff’ and tabschema = ’skapoor ’; 此刻,再次以证明形式运转沟通的查问: db2 "select name from staff where id=10 order by name" 并天生考察安置。您将看到它是各别的: access plan: -----------         total cost:             12.972         query degree:           1       rows      return      (   1)       cost        i/o        |         1      tbscan      (   2)      12.972         1        |         1      sort      (   3)      12.9708         1        |         1      tbscan      (   4)      12.9682         1        |        35  table: skapoor       staff 该示例表露,即使在表上爆发 write 震动时运转 runstats,统计数据就大概与本示例中的不普遍。所以,用来革新统计数据的 update 语句大概波折并爆发 sql1227n 缺点动静。一切的 update 语句都运转胜利格外要害,即使生存不普遍性,就该当举行补缀并从新运转。本例中,处置计划是将 keycards 和 numrids 从 37 从新窜改为 35。 [page_break]示例 3: 您须要在单分区的情况中模仿消费中的所有数据库以举行尝试。 提防:即使尝试中的数据库名与消费中的各别,那么大概须要窜改每个 db2look 输入中的数据库名。 办法 1:运用 -l 选项搜集 db2look,以搜集表空间/缓冲池/数据库节点组消息。 db2look -d <dbname> -l -o storage.out 窜改表空间消息以符合您的尝试情况。比方,在消费中,您具备下列表空间: ------------------------------------ -- ddl statements for tablespaces -- ------------------------------------ create regular tablespace dms1 in database partition group ibmdefaultgroup  pagesize 4096 managed by database          using ( file ’/data/dms1’20000,                  file ’/data/dms2’20000,   file ’/data/dms3’20000)          extentsize 32          prefetchsize 32          bufferpool ibmdefaultbp          overhead 12.670000          transferrate 0.180000          dropped table recovery on; 即使尝试上没有树立沟通的路途,那么就要窜改上头的场所。即使您只是安置模仿情况,而不要复制所有数据,那么就减小文献的巨细,并在需要时运用较少容器。即使没有创造沟通的缓冲池,那么您还大概窜改缓冲池称呼。缓冲池必需具备沟通的页面巨细(pagesize)。不要窜改表空间的页面巨细。一旦处置了那些并创造了数据库,就运转 storage.out 文献: db2 -tvf storage.out 即使须要,就从新定向输入以保证都胜利运转了。比方:      db2 -tvf storage.out > storage_results.out 办法 2:从消费中搜集摆设和情况变量消息,并在尝试体例上运转它: db2look -d sample -f -fd -o config.out 请记取,在 mpp 情况中,这将为运转该吩咐的节点搜集该消息。即使各别的数据库分区上的 db2 备案表和数据库以及数据库处置器摆设各别,您将须要为每个节点辨别搜集该消息。但是,即使尝试中没辙具备与消费中沟通的分区,那么就从消费中实行该查问的节点中搜集该消息,而后在尝试中运用该消息。 请提防,即使尝试中具备各别的分区数量,那么您的模仿将有所缺点。 在尝试体例上,运转 config.out 文献,如次:  db2 -tvf config.out  上头商量到优化器将运用 db2fopt 消息来察看所调配的总的缓冲池和排序堆,此刻将变成尝试情况中的树立。并且,这也是在尝试中因为外存牵制而不具备与消费中沟通的缓冲池以及排序堆时所运用的本领。同声,正文前方所计划的摆设参数以及情况变量也将举行革新。 办法 3:当模仿所有数据库时,从消费中搜集一切东西的 ddl 消息,并在尝试中运转 db2look。 在消费中: db2look -d sample -e -a -m -o db2look.out 在尝试中: db2 -tvf db2look.out 为了看到输入截止,可发出: db2look -tvf db2look.out > db2look.results 一旦实行了之上办法,就请保证在尝试中将 dbheap 数据库摆设参数树立为与消费中沟通的值。 办法 4:运用 db2exfmt 从尝试和消费中赢得考察安置,并保证下列实质与消费中的沟通:      database context: ----------------         parallelism:            none         cpu speed:              4.762804e-07         comm speed:             100         buffer pool size:       128500         sort heap size:         128         database heap size:     5120         lock list size:         12250         maximum lock list:      10         average applications:   4         locks available:        78400 package context: ---------------         sql type:               dynamic         optimization level:     3         blocking:               block all cursors         isolation level:        cursor stability ---------------- statement 1  section 201 ----------------         queryno:                1         querytag:               clp         statement type:         select         updatable:              no         deletable:              no         query degree:           1 此刻,察看考察安置。即使它们是沟通的,那么您就胜利地从新创造了考察安置。还请提防,您还应察看 db2exfmt 输入结果以考证表空间摆设是配合的。 示例 4: 消费:mpp,4 个论理分区/ 16 个物理分区。 尝试:mpp,4 个论理分区,每个论理分区中惟有 4 台可用的物理呆板。 查问中所波及的表、视图/mqt。 本示例中,该模仿大概不会精确处事。尝试和消费中的分区数量必需沟通。但是,您仍不妨试验从新创造,不过它不会精确。 所以,您必需向尝试情况增添 16*4=64 个分区,再不从新创造精确。尝试情况中不须要 16 台物理呆板;即您不妨具备 4 台物理呆板,每台物理呆板具备 16 个论理分区。这由您来确定,但所有必需有 64 个论理分区,与消费中沟通。 所以此刻在举行窜改向尝试情况增添沟通数手段论理分区之后,尝试情况看上去将像原始的消费树立了,如次表所示。 表 3. 消费树立 数据库分区(dbpartition) allnodes(在节点 1 到 64 上) node1(节点 1 上所设置的 db 分区) node2(节点 5 上所设置的 db 分区) 表空间(tablespace) tabspace1(dms 运用数据库分区 allnodes 中设置的摆设) tabspace2(dms 运用数据库分区 node1 中设置的 sms) tabspace3(dms 运用数据库分区 node2 中设置的 dms) 表 tabspace1 中的 tab1 tabspace2 中的 tab2 tabspace3 中的 tab3 mqt: tab3 上设置的 mqt 视图: 设置的 view1,包括两个表 tab1 和 tab2 请保证在发出查问的节点上运用 -f 和 -fd 搜集 db2look,以保证从该节点和备案表树立中获得前方所计划的缓冲池消息,以及从运转查问的节点获得 db cfg 和 dbm cfg。以我的体味,存户的一切节点常常具备沟通的摆设,除去缓冲池这个极端要害的树立除外。 所按照的办法: 办法 1:从消费中搜集保存器消息: db2look -d <dbname> -l -o storage.out 办法 2:窜改表空间/缓冲池消息以符合那些情况。即使您没有可用的摆设,那么就运用 dms 文献容器。同样,即使您不蓄意在尝试中运用与消费中沟通数手段容器,就减少列表并运用较少容器。然而,您同样必需保证即使消费中的表空间是 dms 或 sms 典型的,那么在尝试中要保持沟通的典型。 办法 3:运用下列吩咐搜集摆设消息: db2look -d <dbname> -f -fd -o config.out 办法 4:此刻,只是为咱们感爱好的东西搜集 db2look 消息。本例中,咱们须要一切关系消息,囊括表 dll、视图以与表关系的 mqt: db2look -d <dbname> -e -a -m -t tab1 tab2 tab3 -o db2look.out 一旦搜集了一切那些消息并窜改了表空间/缓冲池消息,就在尝试情况中实行 db2look 输入文献,而且从新从消费和尝试中获得 db2exfmt 输入并举行比拟。 示例 5: 这是一对于在表长进行震动时在何处搜集 runstats 消息的典范示例。您将赢得 sql1227n 缺点动静,而且将没辙从新创造该题目,只有细工窜改统计数据。 比方,该表具备第一百货商店万行记载,一个整型列上设置了主键。您运转带有散布和索引一切选项的 runstats,进而承诺对表举行写考察。在赢得表统计数据的功夫,有 100,000 条附加记载插入了该表。所以对于表统计数据,card 将表露为 1,100,000。然而,在咱们发端搜集索引统计数据时,比方,对于整型列上所设置的主键,就插入了 10,000 条附加记载,所以,该表中的行数是 1,110,000,而主索引 firstkeycard 将是 1,110,000。所以,您不妨看到不普遍性。表统计数据的 card 表露表中该当是 1,100,000 条记载,而主索引统计数据的 firstkeycard 表露表中该当是 1,110,000 条记载。对于索引统计数据的革新将波折,并发出 sql1227n rc=8 缺点动静(本例中),由于索引的 firstkeycard 大于表的 card。您必需细工建设这种不普遍性,对于本例,即是使 firstkeycard 即是 card,均即是 1,100,000,大概反过来 —— 即减少 card 到即是 firstkeycard,均即是 1,110,000。 您还大概碰到很多其余的不普遍性。请保证在将输入生存为文献的尝试中运转带有 -m 选项的 db2look 时,查看一切的不普遍性,并举行建设。这边只是给出了一个不普遍性的例子;您大概会碰到很多其余的不普遍性,这将留给用户去建设一切那些不普遍性,而后从新运转 db2look,将输入重定向到文献中以保证一切革新的统计数据都运转得很好,没有任何题目。 示例 6: 在该示例中,您在消费中赢得 sql0437w rc=1 劝告动静,但在尝试中没有看到它。本例中,依照上头的示例从新创造该题目。请保证 stmtheap 是沟通的。即使它是各别的(比方出于那种因为,尝试中高于消费中),那么您大概就不会看到沟通的劝告。同样,咱们所计划的其余参数也很要害。 sql0437w rc=2 和其余归来代码也不妨依照沟通的本领从新举行创造。 其余缺点动静,比方 sql0101n 和 sql0901n 也不妨运用沟通的本领从新举行创造。以至不妨从新创造编写翻译器/优化器范围中的阻碍。当您居于更老的补丁包级别,并须要试验最新补丁包级别以察看能否不妨制止该题目时,大概当您须要试验各别的优化级别以察看能否将姑且克复该题目时,这就极端有效。 中断语 db2look 是一个功效极端宏大的适用步调,不妨用来从新创造考察安置题目以及编写翻译器题目,如正文中所计划的那些。一旦从新创造了该题目,您就不妨尝试很多不妨感化本能的变量,如窜改优化级别,试验备案表变量和革新不感化消费的统计数据,以及尝试新的补丁包级别。您将创造这个简单的适用步调可用来调节和测试题目和普及查问本能。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.