DB2 v8 db2look導出統計信息問題

DB2 v8 db2look生成的用與構造統計信息的SQL有重複語句

DB2 v8 db2look提供了-m參數用於導出統計信息,可用於還原或構造測試優化器行爲。 可是咱們發現一個很奇怪的問題。db2look生成的用於構造統計信息的SQL語句有徹底重複的語句存在。ide

db2inst1[@db2](http://my.oschina.net/u/736168):>db2look -d sample -m -t orders 

-- No userid was specified, db2look tries to use Environment variable USER
-- USER is: DB2INST1
-- The db2look utility will consider only the specified tables 
-- Running db2look in mimic mode
-- This CLP file was created using DB2LOOK Version 8.2
-- Timestamp: Tue Aug 30 08:58:16 BEIST 2016
-- Database Name: SAMPLE         
-- Database Manager Version: DB2/AIX64 Version 8.2.9       
-- Database Codepage: 1386
-- Database Collating Sequence is: UNIQUE


CONNECT TO SAMPLE;

---------------------------------------------

-- Mimic Tables, Columns, Indexes and Column Distribution

---------------------------------------------

-- Mimic table ORDERS


# 這裏開始是第一部分
RUNSTATS ON TABLE "DB2INST1    "."ORDERS" ;

UPDATE SYSSTAT.INDEXES
SET NLEAF=-1,
    NLEVELS=-1,
    FIRSTKEYCARD=-1,
    FIRST2KEYCARD=-1,
    FIRST3KEYCARD=-1,
    FIRST4KEYCARD=-1,
    FULLKEYCARD=-1,
    CLUSTERFACTOR=-1,
    CLUSTERRATIO=-1,
    SEQUENTIAL_PAGES=-1,
    PAGE_FETCH_PAIRS='',
    DENSITY=-1,
    AVERAGE_SEQUENCE_GAP=-1,
    AVERAGE_SEQUENCE_FETCH_GAP=-1,
    AVERAGE_SEQUENCE_PAGES=-1,
    AVERAGE_SEQUENCE_FETCH_PAGES=-1,
    AVERAGE_RANDOM_PAGES=-1,
    AVERAGE_RANDOM_FETCH_PAGES=-1,
    NUMRIDS=-1,
    NUMRIDS_DELETED=-1,
    NUM_EMPTY_LEAFS=-1
WHERE TABNAME = 'ORDERS' AND TABSCHEMA = 'DB2INST1    ';

...
# 奇怪的問題在這裏,輸出中,徹底一致的SQL語句出現了兩次

-- Mimic table ORDERS 

# 這裏開始是第二部分
RUNSTATS ON TABLE "KGDB    "."ORDERS" ;

UPDATE SYSSTAT.INDEXES
SET NLEAF=-1,
    NLEVELS=-1,
    FIRSTKEYCARD=-1,
    FIRST2KEYCARD=-1,
    FIRST3KEYCARD=-1,

咱們經過逐條對比第一部分和第二部分的SQL語句,發現它們是徹底同樣的。測試

這裏有兩個問題,咱們導入統計信息,除了還原原有的統計信息外,還有一個目的是節省時間,用runstats收集統計信息,對大表來講,時間仍是很是可觀的。優化

但生成的SQL語句的最開始倒是進行runstats,這是爲何呢?接下來的SQL語句給了咱們答案,這裏用 了update語句來’導入‘舊的統計信息。假設,咱們不在開始的部分進行runstats的操做,若是剛好表徹底沒有收集過統計信息,咱們能夠預見,update的操做會失敗,統計信息導入操做也會失敗。.net

第二個問題是,爲何須要執行兩次runstats和兩次的update操做。 這個問題,沒有找到確切的答案,可是咱們從v9.7上發現一些蛛絲馬跡。code

DB2 v9.7 db2look生成的用與構造統計信息的SQL正常

咱們經過在v9.7上用db2look生成的用與構造統計信息的SQL語句,發現該SQL語句正常,只有一次runstats和一次的upate操做。所以咱們猜想v8生成重複的SQL語句,多是v8的bug。ci

是否能夠作的更好

db2look生成的用於構造SQL語句的腳本,是否能夠不包含runstats語句,咱們能夠把update語句換成一個delete和一個update語句?直接寫入統計信息數據,減小runstats的時間。v8

相關文章
相關標籤/搜索