zoukankan      html  css  js  c++  java
  • 利用DB2look 从头创建优化器访问经营(2)

     
    -
    提示:正如将在上面的 “排序堆” 一节中所看到的,它的任务体式名目与排序堆的相反。 假如您是一名 DBA,就大概会利用 DB2 SQL Explain&
     
    正如将在上面的 “排序堆” 一节中所看到的,它的任务体式名目与排序堆的相反。
    假如您是一名 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:提取复制数据库所需的&n。
    这里,我们利用了下列参数:
    -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" 查看这些参数,并利用
     
    并行性(Parallelism):
     
    db2 "update dbm cfg using <parameter> <value>"
     
    更新数据库管理器的设置参数。
    该参数诠释是启用分区间并行性(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 " 来查看这些参数,以及利用 db2 "update db cfg for using ") 来更新数据库设置参数。
    缓冲池巨细(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,下降为贪婪毗连列举。
     
     
    来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2007/0727/28248.html


    版权声明: 原创作品,允许转载,转载时请务必以超链接编制标明文章 原始来由 、作者信息和本声明。否则将究查法律责任。

  • 相关阅读:
    c# 异步和同步问题(转载)
    用Python作GIS之四:Tkinter基本界面的搭建
    Linux必知必会--vmstat
    Linux必知必会--awk
    Linux必知必会--sed
    Linux必知必会--grep
    Linux必知必会--curl
    康威定律
    移动端抓包合集
    MySQL重置自增id
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975358.html
Copyright © 2011-2022 走看看