日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

DB2 UDB Version 8.2 中的 RUNSTATS

 昵稱29861 2007-06-15






包含列組統(tǒng)計(jì)信息的 RUNSTATS

列組(Column Group)統(tǒng)計(jì)信息將獲得一組列的不同值組合的數(shù)目。通常,DB2 優(yōu)化器可用的基本統(tǒng)計(jì)信息不檢測數(shù)據(jù)相關(guān)性。列組的使用將給多個(gè)謂詞的聯(lián)合選擇提供更準(zhǔn)確的估計(jì)。列組統(tǒng)計(jì)信息假設(shè)數(shù)據(jù)是均勻分布的;但還無法獲得列組上的分布統(tǒng)計(jì)信息。

較于列組的基數(shù),單個(gè)列的基數(shù)(cardinality)的乘積將獲得更好的相關(guān)性估計(jì)。

下列例子說明了如何使用 RUNSTATS 收集捕獲了列組信息的目錄統(tǒng)計(jì)信息:



示例 19:收集捕獲了列組的目錄統(tǒng)計(jì)信息

                                RUNSTATS ON TABLE db2admin.department ON COLUMNS ((deptno, deptname),
                                deptname, mrgno, (admrdept, location))
                                

本例中,總共有兩個(gè)列組:(deptno, deptname) 和 (admrdept, location)。








包含 LIKE STATISTICS 的 RUNSTATS

當(dāng)在 RUNSTATS 中指定 LIKE STATISTICS 子句時(shí),將收集附加的列統(tǒng)計(jì)信息。這些統(tǒng)計(jì)信息存儲在 SYSIBM.SYSCOLUMNS 表里的 SUB_COUNT 和 SUB_DELIM_LENGTH 列中。它們僅針對字符串列進(jìn)行收集,查詢優(yōu)化器用它們來提高“column LIKE ‘%abc‘”和“column LIKE ‘%abc%‘”類型謂詞的選擇性估計(jì)。

下列例子說明了如何使用 RUNSTATS 收集捕獲了 LIKE 統(tǒng)計(jì)信息的目錄統(tǒng)計(jì)信息:



示例 20:收集所有列上的目錄統(tǒng)計(jì)信息并指定 VARCHAR 列上的 LIKE 統(tǒng)計(jì)信息

                                RUNSTATS ON TABLE db2admin.department ON ALL COLUMNS and COLUMNS (deptname LIKE STATISTICS)
                                







包含統(tǒng)計(jì)信息配置文件的 RUNSTATS

現(xiàn)在,可以在 DB2 V8.2 中為 RUNSTATS 建立一個(gè)統(tǒng)計(jì)信息的配置文件。統(tǒng)計(jì)信息配置文件是指一組選項(xiàng),它預(yù)先定義了特定表上將要收集的統(tǒng)計(jì)信息。

當(dāng)將命令參數(shù)“SET PROFILE”添加到 RUNSTATS 命令時(shí),將在表描述符和系統(tǒng)目錄中注冊或存儲統(tǒng)計(jì)信息配置文件。若要更新該統(tǒng)計(jì)信息配置文件,則可以使用命令參數(shù)“UPDATE PROFILE”。

沒有刪除配置文件的選項(xiàng)。

下列例子展示了如何使用這項(xiàng)功能:



示例 21:只注冊一個(gè)統(tǒng)計(jì)信息配置文件,不收集目錄統(tǒng)計(jì)信息
                                RUNSTATS ON TABLE db2admin.department AND INDEXES ALL SET PROFILE ONLY
                                

RUNSTATS 中的子句“SET PROFILE ONLY”不收集統(tǒng)計(jì)信息。



示例 22:注冊一個(gè)統(tǒng)計(jì)信息配置文件,并執(zhí)行所存儲統(tǒng)計(jì)信息配置文件的 RUNSTATS 命令選項(xiàng)來收集目錄統(tǒng)計(jì)信息
                                RUNSTATS ON TABLE db2admin.department AND INDEXES ALL SET PROFILE
                                



示例 23:僅修改現(xiàn)有的統(tǒng)計(jì)信息配置文件,不收集任何目錄統(tǒng)計(jì)信息

                                RUNSTATS ON TABLE db2admin.department WITH DISTRIBUTION AND INDEXES ALL UPDATE PROFILE ONLY
                                



示例 24:修改現(xiàn)有的統(tǒng)計(jì)信息配置文件,并執(zhí)行已更新的統(tǒng)計(jì)信息配置文件的 RUNSTATS 命令選項(xiàng)來收集目錄統(tǒng)計(jì)信息

                                RUNSTATS ON TABLE db2admin.department WITH DISTRIBUTION AND INDEXES ALL UPDATE PROFILE
                                



示例 25:根據(jù)前面已注冊的統(tǒng)計(jì)信息配置文件來查詢 RUNSTATS 選項(xiàng)

                                SELECT STATISTICS_PROFILE FROM SYSIBM.SYSTABLES WHERE NAME = ‘DEPARTMENT‘ AND CREATOR = ‘DB2ADMIN‘
                                



示例 26:使用前面已注冊的統(tǒng)計(jì)信息配置文件收集目錄統(tǒng)計(jì)信息

                                RUNSTATS ON TABLE db2admin.department USE PROFILE
                                








帶有抽樣的 RUNSTATS

隨著數(shù)據(jù)庫快速不斷地增長,通過訪問所有數(shù)據(jù)收集統(tǒng)計(jì)信息的能力可能會受到固定的批量窗口、內(nèi)存和 CPU 約束的阻礙。

目前,要運(yùn)行表上的 RUNSTATS,就要執(zhí)行全表掃描。通過數(shù)據(jù)抽樣,只需掃描數(shù)據(jù)的一個(gè)子集即可。

如果一個(gè)查詢試圖預(yù)計(jì)總的趨勢和模式,且某一誤差域(margin of error)內(nèi)的近似答案足以監(jiān)測這些趨勢和模式,那么數(shù)據(jù)抽樣或許是比全表掃描更好的選擇。

在 DB2 V8.1 中,引入了 SAMPLED DETAILED 子句,允許通過抽樣計(jì)算詳細(xì)的索引統(tǒng)計(jì)信息。該子句的使用將減少為獲得詳細(xì)索引統(tǒng)計(jì)信息而執(zhí)行的后臺計(jì)算量和所需的時(shí)間,但在大多數(shù)情況下,都會使數(shù)據(jù)足夠的精確。

以下是一些關(guān)于該子句的使用的例子:



示例 27:收集兩個(gè)索引上的詳細(xì)目錄統(tǒng)計(jì)信息,但對每個(gè)索引條目使用抽樣來代替執(zhí)行詳細(xì)的計(jì)算

                                RUNSTATS ON TABLE db2admin.department AND SAMPLED DETAILED INDEXES ALL
                                



示例 28:收集索引上的詳細(xì)抽樣統(tǒng)計(jì)信息和表的分布統(tǒng)計(jì)信息

                                RUNSTATS ON TABLE db2admin.department WITH DISTRIBUTION ON KEY
                                COLUMNS AND SAMPLED DETAILED INDEXES ALL
                                

在 DB2 V8.2 中,提供了對表數(shù)據(jù)進(jìn)行抽樣的兩種新方法:行級的貝努里(Bernoulli)抽樣和系統(tǒng)頁級的抽樣。







帶有行級貝努里(Bernoulli)抽樣的 RUNSTATS

行 級貝努里(Bernoulli)抽樣利用 sargable(search + argument-able 謂詞是一個(gè)可以由數(shù)據(jù)管理器來評估的謂詞)謂詞獲得百分之 P 的表行樣本,在樣本中包含每一行的概率是 P/100,而不包含它的概率則是 1 - P/100。

例如,對于 10% 貝努里(Bernoulli)抽樣,將會選擇 10%(10/100)的行,而拒絕 90%(1-10/100)的行。在貝努里(Bernoulli)抽樣中,每一頁將會引發(fā)一次 I/O,因?yàn)橐獟呙柙摫?。將生成一個(gè)隨機(jī)數(shù)來確定是否選擇一行(類似于以 P/100 的概率扔錢幣)。即使每一頁都發(fā)生一次 I/O,我們?nèi)匀还?jié)省了處理數(shù)據(jù)所需的 CPU 時(shí)間。

在行級貝努里(Bernoulli)抽樣中,需要讀取每一個(gè)數(shù)據(jù)頁。然而,它仍然可以帶來極大的性能提高,因 為 RUNSTATS 是 CPU 密集的。如果索引是可用的,那么就會改進(jìn)抽樣。如果數(shù)據(jù)是群集的,它還可以提供更準(zhǔn)確的統(tǒng)計(jì)信息(所獲得的樣本更好地代表了整個(gè)表數(shù)據(jù))。








帶有系統(tǒng)頁級抽樣的 RUNSTATS

系 統(tǒng)頁級抽樣與行級抽樣類似,除了抽樣的對象是頁面而不是行。以 P/100 的概率選擇每一頁,而以 1 - P/100 的概率拒絕頁的選擇。在所選中的每一頁中,要選擇所有的行。系統(tǒng)頁級抽樣優(yōu)于全表掃描或貝努里(Bernoulli)抽樣的地方是它節(jié)省了 I/O。

抽樣頁也是預(yù)取的,所以該方法將比行級貝努里(Bernoulli)抽樣更快。與不進(jìn)行抽樣相比,頁級抽樣極大地提高了性能。

RUNSTATS repeatable 子句允許通過 RUNSTATS 語句生成相同的樣本,只要表數(shù)據(jù)沒有發(fā)生更改。為了指定該選項(xiàng),用戶還必須提供一個(gè)整數(shù),以表示將用于生成樣本的種子(seed)。通過使用相同的種子,可以生成相同的樣本。

總之,統(tǒng)計(jì)信息的準(zhǔn)確性取決于抽樣率、數(shù)據(jù)傾斜(data skew)以及用于數(shù)據(jù)抽樣的數(shù)據(jù)群集。

下面是一些使用貝努里(Bernoulli)行級和系統(tǒng)頁級抽樣的 RUNSTATS 例子:



示例 29:收集統(tǒng)計(jì)信息,包含 10% 行上的分布統(tǒng)計(jì)信息
                                RUNSTATS ON TABLE db2admin.department WITH DISTRIBUTION TABLESAMPLE BERNOULLI (10)
                                



示例 30:為了控制收集統(tǒng)計(jì)信息的樣本集,以及可以重復(fù)使用相同的樣本集,需要使用下列語句:

                                RUNSTATS ON TABLE db2admin.department WITH DISTRIBUTION TABLESAMPLE
                                BERNOULLI (10) REPEATABLE (1024)
                                



示例 31:收集 10% 的數(shù)據(jù)頁上的索引統(tǒng)計(jì)信息和表統(tǒng)計(jì)信息。請注意,只對表數(shù)據(jù)頁進(jìn)行抽樣,而不是索引頁。本例中,10% 的表數(shù)據(jù)頁用于表統(tǒng)計(jì)信息的收集,而對于索引統(tǒng)計(jì)信息,將使用所有的索引頁。

                                RUNSTATS ON TABLE db2admin.department AND INDEXES ALL TABLESAMPLE SYSTEM (10)
                                








收集目錄統(tǒng)計(jì)信息的可供選擇的方法

對于數(shù)據(jù)庫中的所有表,收集統(tǒng)計(jì)信息的一個(gè)可供選擇的方法就是發(fā)出一條 REORGCHK 命令,如下所示:



示例 32:使用 REORGCHK 收集所有表的目錄統(tǒng)計(jì)信息

                                REORGCHK UPDATE STATISTICS ON TABLE ALL
                                

reorgchk 命令的 update statistics 選項(xiàng)的作用類似于調(diào)用 RUNSTATS 例程來更新數(shù)據(jù)庫中所有表的目錄統(tǒng)計(jì)信息,但是所有列上的統(tǒng)計(jì)信息只能通過默認(rèn)的 RUNSTATS 選項(xiàng)來收集。通過使用該命令,還可以收集單個(gè)表上或同一模式下一組表的統(tǒng)計(jì)信息。



示例 33:使用 REORGCHK 收集一個(gè)表的目錄統(tǒng)計(jì)信息
                                REORGCHK UPDATE STATISTICS ON TABLE db2admin.department
                                



示例 34:使用 REORGCHK 收集一個(gè)模式的目錄統(tǒng)計(jì)信息

                                REORGCHK UPDATE STATISTICS ON SCHEMA systools
                                

雖然該方法看上去是一種在多個(gè)表上收集目錄統(tǒng)計(jì)信息的快速方法,但是僅僅當(dāng) REORGCHK 可以在合理的時(shí)間內(nèi)完成執(zhí)行時(shí),該方法才是可取的。

在表的 LOAD REPLACE 期間以及索引的創(chuàng)建期間,也可以進(jìn)行目錄統(tǒng)計(jì)信息的收集。

在 UDB V8.2 中,為了在 LOAD 期間調(diào)用目錄統(tǒng)計(jì)信息的收集,必須將選項(xiàng)“STATISTICS USE PROFILE”添加到 LOAD 控制語句中。選項(xiàng)“STATISTICS YES”仍然有用,但它現(xiàn)在已是過時(shí)的語法。若在表的 LOAD 之后在同一表上執(zhí)行 RUNSTATS,那么在 LOAD 期間發(fā)出“STATISTICS USE PROFILE”的目的就是為了減少正常運(yùn)行過程中占用的時(shí)間。在執(zhí)行 load 之前,就必須創(chuàng)建統(tǒng)計(jì)信息配置文件,它現(xiàn)在允許指定與 RUNSTATS 命令中相同的統(tǒng)計(jì)信息選項(xiàng)。



示例 35:使用 LOAD 命令和 STATISTICS USE PROFILE 子句收集目錄統(tǒng)計(jì)信息

                                LOAD FROM inputfile.del OF DEL REPLACE INTO db2admin.department STATISTICS USE PROFILE
                                

大多數(shù)情況下,RUNSTATS 是在創(chuàng)建索引之后執(zhí)行的。然而,在執(zhí)行索引創(chuàng)建操作時(shí),也能收集索引的統(tǒng)計(jì)信息。這將避免為了收集統(tǒng)計(jì)信息而進(jìn)行的另一項(xiàng)索引掃描。下列例子說明了完成這項(xiàng)工作可以使用的一些選項(xiàng):



示例 36:收集基本的索引目錄統(tǒng)計(jì)信息:

                                CREATE INDEX db2admin.inx1 ON db2admin.department (deptno) COLLECT STATISTICS
                                



示例 37:收集擴(kuò)展的索引目錄統(tǒng)計(jì)信息:

                                CREATE INDEX db2admin.inx2 ON db2admin.department (deptname) COLLECT DETAILED STATISTICS
                                



示例 38:收集擴(kuò)展的索引目錄統(tǒng)計(jì)信息,指定使用抽樣:

                                CREATE INDEX db2admin.inx3 ON db2admin.department (deptname) COLLECT SAMPLED DETAILED STATISTICS
                                








包含授權(quán)和用戶訪問的 RUNSTATS

為了可以對一個(gè)表或索引收集統(tǒng)計(jì)信息,必須能夠連接到包含該表和索引的數(shù)據(jù)庫,并具有下列授權(quán)級別之一:

  • sysadm
  • sysctrl
  • sysmaint
  • dbadm
  • 表上的 CONTROL 權(quán)限

當(dāng)對一個(gè)表運(yùn)行 RUNSTATS 時(shí),有兩種用戶訪問選項(xiàng):允許讀訪問和允許寫訪問。

在 RUNSTATS 命令中的參數(shù) ALLOW READ ACCESS 指定計(jì)算統(tǒng)計(jì)信息時(shí),其他用戶可以只讀地訪問該表。

在 RUNSTATS 命令中的參數(shù) ALLOW WRITE ACCESS 指定計(jì)算統(tǒng)計(jì)信息時(shí),其他用戶可以讀取或?qū)懭朐摫怼H绻摫碓谌魏螘r(shí)刻都必須是可用的,那么應(yīng)該使用該子句。








分區(qū)數(shù)據(jù)庫中的 RUNSTATS

當(dāng) 在一個(gè)分區(qū)數(shù)據(jù)庫中發(fā)出 RUNSTATS 命令,并且一個(gè)表分區(qū)位于發(fā)出 RUNSTATS 的數(shù)據(jù)庫分區(qū)中時(shí),那么 RUNSTATS 將在該數(shù)據(jù)庫分區(qū)上執(zhí)行。如果表分區(qū)不在該數(shù)據(jù)庫分區(qū)上,那么將請求發(fā)送給數(shù)據(jù)庫分區(qū)組中持有該表分區(qū)的第一個(gè)數(shù)據(jù)庫分區(qū)。然后,在該數(shù)據(jù)庫分區(qū)上執(zhí)行 RUNSTATS 命令。

RUNSTATS 不是在分區(qū)的數(shù)據(jù)庫中并行運(yùn)行的,但對一個(gè)分區(qū)確定信息,然后對所有分區(qū)推斷出合適的估計(jì)值。有一個(gè)隱式的假設(shè):每個(gè)表中的行是均勻分布在每個(gè)多分區(qū)數(shù)據(jù)庫分區(qū)組中的所有分區(qū)上的。

下列 IBM 技術(shù)札記(technote)談到了加載一個(gè)表時(shí)運(yùn)行 RUNSTATS 可能碰到的問題。其解決方案就是確保在加載表之前,為該表定義一個(gè)分區(qū)鍵(partitioning key)。

IBM Technote # 1153232(2004-02-12):
“加載表之后,Runstats 將多分區(qū)實(shí)例上 syscat.tables 中的列 CARD 更新為零行。

摘要

如果加載某一給定表之后,其中一個(gè)分區(qū)的行數(shù)為零,并且將從該分區(qū)執(zhí)行 runstats,那么該命令將更新 syscat. 表中的列 CARD,顯示該表的行數(shù)為零。這只對多分區(qū)的實(shí)例有影響。

內(nèi)容

runstats 的行為使其將使用運(yùn)行它的分區(qū)上的數(shù)據(jù)來推測該表中的行數(shù)。例如,如果加載之后所有數(shù)據(jù)都在一個(gè)分區(qū)上,并從另一分區(qū)執(zhí)行 runstats,那么該命令將更新 syscat.tables 來表示該表的行數(shù)為零。然而,如果是從保存所有數(shù)據(jù)的分區(qū)運(yùn)行 runstats,那么它將更新 syscat.tables 來展示該表包含((該分區(qū)上的行數(shù))x(分區(qū)數(shù)目))行。

為了避免 runstats 的行為默認(rèn)行為,需要在加載表之前,為該表定義分區(qū)鍵(partitioning key)。分區(qū)鍵需要位于高度惟一的一列或一組列上,從而確保數(shù)據(jù)均勻分布在該表所定義的所有分區(qū)上?!?







調(diào)整 STAT_HEAP_SZ 數(shù)據(jù)庫配置參數(shù)

stat_heap_sz 或統(tǒng)計(jì)信息堆大小的數(shù)據(jù)庫配置參數(shù)指定了使用 RUNSTATS 命令收集統(tǒng)計(jì)信息中所用堆的最大尺寸。它是在啟動 RUNSTATS 實(shí)用程序時(shí)分配的,然后當(dāng)它完成時(shí)釋放。stat_heap_sz 是代理私有內(nèi)存的一部分。因此,在收集分布統(tǒng)計(jì)信息時(shí),最好增大 stat_heap_sz 參數(shù),以便能將更多的列放入這個(gè)堆中。處理較寬的表也需要更多的內(nèi)存。當(dāng)執(zhí)行包含 SAMPLED DETAILED 選項(xiàng)的 RUNSTATS 時(shí),必須額外分配 2 MB 內(nèi)存,以確保 RUNSTATS 能夠成功運(yùn)行。








減小 RUNSTATS 對系統(tǒng)性能影響的策略

您可以使用下列策略來幫助減小 RUNSTATS 對于系統(tǒng)的性能影響:

  • 一次僅在少數(shù)表和索引上運(yùn)行 RUNSTATS,在整組表中循環(huán)運(yùn)行。
  • 僅指定將收集其數(shù)據(jù)分布統(tǒng)計(jì)信息的那些列。僅指定那些謂詞中所使用的列。
  • 對于不同的表,在不同的分區(qū)上實(shí)現(xiàn)多個(gè)并發(fā)的 RUNSTATS。
  • 僅在那些影響當(dāng)前工作負(fù)載的關(guān)鍵表上執(zhí)行 RUNSTATS。避免在不需要它的表上運(yùn)行 RUNSTATS。
  • 根據(jù)表中數(shù)據(jù)發(fā)生改變的速度,調(diào)整 RUNSTATS 的頻率。
  • 根據(jù) RUNSTATS 在該表上完成運(yùn)行的速度,調(diào)整 RUNSTATS 的頻率和細(xì)節(jié)。
  • 僅在系統(tǒng)活動量少的時(shí)候,安排執(zhí)行 RUNSTATS。
  • 調(diào)整(Throttle)RUNSTATS,以便最大程度地減少它對系統(tǒng)的需求。

僅在系統(tǒng)活動量少的時(shí)候安排執(zhí)行 RUNSTATS,這是最大程度地減少系統(tǒng)影響的一個(gè)好方法。然而,對于一個(gè) 24 x 7 的系統(tǒng),系統(tǒng)中可能沒有可用的窗口或活動量少的時(shí)候。處理該情形的一種方法就是使用 RUNSTATS 的 throttling 選項(xiàng)。

throttling 選項(xiàng)將根據(jù)當(dāng)前的數(shù)據(jù)庫活動級別,來限制實(shí)用程序所占有的資源數(shù)量。UDB 中,在調(diào)整時(shí),util_impact_lim 與 UTIL_IMPACT_PRIORITY 參數(shù)的交互確定了 RUNSTATS 的行為。UTIL_IMPACT_PRIORITY 關(guān)鍵字被用于諸如 RUNSTATS 的實(shí)用程序命令的子句中,而 util_impact_lim 則是一個(gè)實(shí)例配置參數(shù)。

util_impact_lim 參數(shù)是指允許所有已調(diào)整實(shí)用程序?qū)τ趯?shí)例的工作負(fù)載產(chǎn)生影響的百分比。如果 util_impact_lim 是 100(默認(rèn)值),則不用調(diào)整諸如 RUNSTATS 之類的實(shí)用程序調(diào)用。例如,如果將 util_impact_lim 設(shè)置為 10,那么已調(diào)整的 RUNSTATS 調(diào)用就被限定在消耗 10% 以下的工作負(fù)載。

UTIL_IMPACT_PRIORITY 關(guān)鍵字可充當(dāng)一個(gè)開關(guān),它指定 RUNSTATS 是否訂閱調(diào)整策略。



示例 39:UTIL_IMPACT_PRIORITY 關(guān)鍵字的使用
                                RUNSTATS ON TABLE db2admin.department AND INDEXES ALL UTIL_IMPACT_PRIORITY 10
                                

其中,10 是調(diào)整 RUNSTATS 的優(yōu)先權(quán)或級別。

當(dāng) util_impact_lim 不是 100,而且用 UTIL_IMPACT_PRIORITY 調(diào)用 RUNSTATS 時(shí),將會對該值進(jìn)行調(diào)整。如果沒有為 UTIL_IMPACT_PRIORITY 指定優(yōu)先權(quán),且 util_impact_lim 不是 100,那么 RUNSTATS 將使用默認(rèn)的優(yōu)先權(quán) 50,并將據(jù)此進(jìn)行調(diào)整。如果在 RUNSTATS 命令中省略 UTIL_IMPACT_PRIORITY 關(guān)鍵字,那么可以不加調(diào)整地運(yùn)行 RUNSTATS。如果指定了優(yōu)先權(quán),但是將 util_impact_limit 設(shè)置為 100,也可以不加調(diào)整地運(yùn)行 RUNSTATS。如果將優(yōu)先權(quán)設(shè)置為零,也能不加調(diào)整地運(yùn)行 RUNSTATS。

當(dāng)定義了 RUNSTATS 調(diào)整(throttling),并且該調(diào)整可操作時(shí),RUNSTATS 實(shí)用程序預(yù)計(jì)將花費(fèi)更長時(shí)間,但是對系統(tǒng)產(chǎn)生的影響會少一些。





回頁首


RUNSTATS 的其他問題

已聲明的全局臨時(shí)表上的 RUNSTATS

可 以在已聲明的全局臨時(shí)表(DGTT)上發(fā)出 RUNSTATS 命令,但是結(jié)果的統(tǒng)計(jì)信息不存儲在系統(tǒng)目錄中,因?yàn)槁暶鞯呐R時(shí)表?xiàng)l目沒有目錄條目。這些統(tǒng)計(jì)信息存儲在表示聲明的臨時(shí)表的目錄信息的內(nèi)存結(jié)構(gòu)中。如果整個(gè) 查詢經(jīng)過時(shí)間中所節(jié)省的時(shí)間比完成 RUNSTATS 所增加的時(shí)間大得多,就建議發(fā)出 RUNSTATS。

可以在 SQL 例程(過程、UDF 和方法)中發(fā)出 RUNSTATS 命令嗎?

下列 IBM 技術(shù)札記(technote)討論了該問題:

IBM Technote # 1153051
“既不能從 SQL 例程(過程、UDF、方法)、SQL 動態(tài)復(fù)合語句發(fā)出 RUNSTATS 命令,也不能使用從 SQL 例程中發(fā)出的操作系統(tǒng)調(diào)用來發(fā)出該命令。如果需要發(fā)出 RUNSTATS 命令,那么可以直接從命令行處理器(Command Line Processor,CLP)發(fā)出它,或者通過使用 db2Runstats() API 函數(shù)(DB2 8.1 開始)從客戶機(jī)應(yīng)用程序或外部語言例程發(fā)出它,以及通過 LOAD 和 CREATE INDEX 語句發(fā)出該命令?!?

可以創(chuàng)建一個(gè)名為“runstats”的 C 存儲過程,調(diào)用 db2Runstats() API 函數(shù)。然后,可以使用 CALL 命令調(diào)用這個(gè) C 存儲過程。

如何通過調(diào)用級接口(CLI)或 Java 執(zhí)行 RUNSTATS 來收集統(tǒng)計(jì)信息?

下列 IBM 技術(shù)札記回答了該問題:

IBM Technote # 1023788:
“DB2 管理 API(編程接口)sqlustat 可以用于從 DB2 應(yīng)用程序發(fā)出 RUNSTATS,例如寫入調(diào)用級接口的應(yīng)用程序。DB2 Administrative API Reference 手冊中描述了 sqlustat?!?








DB2 自動統(tǒng)計(jì)信息收集

DB2 自動統(tǒng)計(jì)信息收集是在 DB2 UDB Version 8.2 中引入的。自動統(tǒng)計(jì)信息收集是完全自動表維護(hù)解決方案的一部分。其目標(biāo)是允許 DB2 確定工作負(fù)載需要哪些統(tǒng)計(jì)信息,并定期在后臺自動運(yùn)行 RUNSTATS 實(shí)用程序,以便按需更新統(tǒng)計(jì)信息。

為了設(shè)置 SAMPLE 數(shù)據(jù)庫自動進(jìn)行統(tǒng)計(jì)信息收集,需要為自動維護(hù)開關(guān)設(shè)置數(shù)據(jù)庫配置參數(shù),如下所示:

db2 update db cfg for SAMPLE using AUTO_MAINT ON
                                db2 update db cfg for SAMPLE using AUTO_TBL_MAINT ON
                                db2 update db cfg for SAMPLE using AUTO_RUNSTATS ON 

下圖(只顯示統(tǒng)計(jì)信息收集和配置選項(xiàng))展示了統(tǒng)計(jì)信息收集和配置的自動維護(hù)命令的層次結(jié)構(gòu)和相關(guān)性。在該結(jié)構(gòu)中,可以在最高層次快速關(guān)閉自動維護(hù)參數(shù) AUTO_MAINT,而不丟失較低層的配置設(shè)置,比如 AUTO_RUNSTATS。



圖 1. 自動維護(hù)設(shè)置

如 果需要自動統(tǒng)計(jì)信息配置,那么可以打開參數(shù) AUTO_STATS_PROF 和 AUTO_PROF_UPD。自動統(tǒng)計(jì)信息配置則通過確定何時(shí)和如何收集統(tǒng)計(jì)信息更進(jìn)了一步。統(tǒng)計(jì)信息配置文件是自動生成的,自動統(tǒng)計(jì)信息收集過程將用它 來調(diào)度 RUNSTATS??梢杂脙?nèi)部算法來比較新收集的統(tǒng)計(jì)信息與已保存的一組統(tǒng)計(jì)信息,并基于某些觸發(fā)條件發(fā)出包含抽樣的 RUNSTATS。

當(dāng)啟用自動統(tǒng)計(jì)信息配置時(shí),數(shù)據(jù)庫活動的有關(guān)信息被收集并存儲在查詢反饋倉庫中。然后,基于查詢反饋倉庫中的數(shù)據(jù)生成統(tǒng)計(jì)配置文件。

為了允許自動生成統(tǒng)計(jì)信息配置文件,需要設(shè)置兩個(gè)數(shù)據(jù)庫配置參數(shù):

  • db2 update db cfg for SAMPLE using AUTO_STATS_PROF ON

打開該參數(shù)將啟動查詢反饋數(shù)據(jù)的收集。

  • db2 update db cfg for SAMPLE using AUTO_PROF_UPD ON

打開該參數(shù),指定使用分析查詢反饋數(shù)據(jù)的 DB2 中的建議來更新 RUNSTATS 配置文件。

在觸發(fā)自動統(tǒng)計(jì)信息配置之前,必須通過運(yùn)行 SYSINSTALLOBJECTS 存儲過程創(chuàng)建查詢反饋倉庫。

按照下列方式調(diào)用該存儲過程:

                                call SYSINSTALLOBJECTS ( toolname , action , tablespacename , schemaname )

其中,toolname 是“ASP”或“AUTO STATS PROFILING”,對于 action,“C”表示創(chuàng)建,“D”表示刪除。
目前,不使用參數(shù) schemaname。

例如,要創(chuàng)建反饋倉庫,需要運(yùn)行下列存儲過程:

call SYSINSTALLOBJECTS (‘ASP‘, ‘C‘, ‘USERSPACE1‘, ‘‘)

該過程將創(chuàng)建下列表、存儲建議以及與查詢執(zhí)行過程中碰到的謂詞有關(guān)的信息:

  • SYSTOOLS.OPT_FEEDBACK_QUERY
  • SYSTOOLS.OPT_FEEDBACK_PREDICATE
  • SYSTOOLS.OPT_FEEDBACK_PREDICATE_COLUMN
  • SYSTOOLS.OPT_FEEDBACK_RANKING
  • SYSTOOLS.OPT_FEEDBACK_RANKING_COLUMN

當(dāng)禁用 AUTO_PROF_UPD 參數(shù)時(shí),可以將建議存儲在 SYSTOOLS.OPT_FEEDBACK_RANKING 表中。然后,當(dāng)手動更新 RUNSTATS 配置文件時(shí),就可以查看該表中所存儲的建議。

DB2 自動統(tǒng)計(jì)信息收集和配置生成只能在 DB2 串行模式下啟用;它們在聯(lián)邦的、SMP 和 MPP 環(huán)境中是不可用的。






結(jié)束語

理 解并正確使用 RUNSTATS 是維護(hù)高性能數(shù)據(jù)庫的關(guān)鍵之一。本文討論了 RUNSTATS 的重要性,并解釋了許多使 RUNSTATS 更有用的可用選項(xiàng),其中包括 V8.2 中的一些新選項(xiàng),通過允許建立指定需要為每個(gè)表收集哪些統(tǒng)計(jì)信息的配置文件,這些新選項(xiàng)簡化了管理。我所展示的示例將使您易于使用 RUNSTATS 獲得最佳的數(shù)據(jù)庫性能。



參考資料





    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多