自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DB2 優(yōu)化器中如何使用分布統(tǒng)計信息?

數(shù)據(jù)庫
此文章主要和大家一起分享的是DB2 優(yōu)化器中如何正確使用分布統(tǒng)計信息的實際操作步驟,以下就是對其實際操作步驟的描述。

本文講述的是在DB2 優(yōu)化器中如何使用分布統(tǒng)計信息?我們大家都知道DB2 優(yōu)化器是一種基于成本的優(yōu)化器。它是根據(jù)表與實際操作索引的相關統(tǒng)計信息作出決策。DB2 在生成統(tǒng)計信息時,不但能提供基本統(tǒng)計信息,還允許創(chuàng)建所謂的分布統(tǒng)計信息。

本文解釋什么是分布統(tǒng)計信息、分布統(tǒng)計信息在哪些情況下尤為重要,以及應用程序開發(fā)人員應該考慮些什么,才能使 DB2 優(yōu)化器創(chuàng)建有效的訪問計劃。

簡介

為了執(zhí)行查詢或 DML 語句(INSERT、UPDATE、DELETE),DB2 必須創(chuàng)建一個訪問計劃(access plan)。訪問計劃定義按什么順序訪問表,使用哪些索引,以及用何種連接(join)方法來關聯(lián)數(shù)據(jù)。好的訪問計劃對于 SQL 語句的快速執(zhí)行至關重要。DB2 優(yōu)化器可以創(chuàng)建訪問計劃。這是一種基于成本的優(yōu)化器,這意味著它是根據(jù)表和索引的相關統(tǒng)計信息來作出決策的。

DB2 在生成統(tǒng)計信息時,不但能提供基本統(tǒng)計信息,還允許創(chuàng)建所謂的分布統(tǒng)計信息。不但數(shù)據(jù)庫管理員要理解分布統(tǒng)計信息,而且應用程序開發(fā)人員也要理解分布統(tǒng)計信息。應用程序開發(fā)人員必須小心謹慎,因為在某些情況下分布統(tǒng)計信息對于 DB2 優(yōu)化器來說非常重要。

主變量或參數(shù)標記(在 Java 中為 java.sql.PreparedStatement)的使用可能會造成阻礙,使優(yōu)化器無法***限度地利用分布統(tǒng)計信息。本文解釋什么是分布統(tǒng)計信息、分布統(tǒng)計信息在哪些情況下尤為重要,以及應用程序開發(fā)人員應該考慮些什么,才能使 DB2 優(yōu)化器創(chuàng)建有效的訪問計劃。

基本統(tǒng)計信息和分布統(tǒng)計信息

在研究分布統(tǒng)計信息之前,我們先來看看基本統(tǒng)計信息,只要執(zhí)行 RUNSTATS 即可收集這些表的相關統(tǒng)計信息。

表的相關統(tǒng)計信息:

當前使用的頁面數(shù)

包含記錄行的頁面數(shù)

 

溢出的行數(shù)

 

表中的行數(shù)(基數(shù))

 

對于 MDC 表,還有包含數(shù)據(jù)的塊(block)數(shù)

 

表中各列的相關統(tǒng)計信息:

 

列的基數(shù)

列的平均長度

 

列中第二大的值

 

列中第二小的值

 

列中 NULL 值的個數(shù)

 

通常,執(zhí)行 RUNSTATS 時,不但可以收集到關于表的統(tǒng)計信息,而且還可以收集到相應的索引的相關統(tǒng)計信息。要了解為索引而收集的統(tǒng)計信息,請參閱 DB2 Administration Guide: Performance - Statistical information that is collected。

 

觀察一個表的基本統(tǒng)計信息,您可以看到,DB2 優(yōu)化器知道一個表由多少行組成(表的基數(shù)),以及一個列包含多少個不同的值(列的基數(shù))。但是,還有一些信息是基本統(tǒng)計信息無法提供的。例如,基本統(tǒng)計信息不能告訴優(yōu)化器一個列中某些值出現(xiàn)的頻率。假設表 TABLE_X 有大約 1,000,000 行,在該表上執(zhí)行這樣一條查詢:

SELECT * FROM TABLE_X WHERE COLUMN_Y = 'VALUE_Z'

難道 DB2 優(yōu)化器知道 TABLE_X 中有多少行滿足條件 COLUMN_Y = 'VALUE_Z' 不重要嗎?換句話說:知道這個查詢將返回 1 行、100 行、1000 行還是 10000 行有什么不好呢?

實際上,通過基本統(tǒng)計信息,DB2 優(yōu)化器只能估計 'VALUE_Z' 在 COLUMN_Y 中出現(xiàn)的頻率。在這種情況下,優(yōu)化器認為所有值在 COLUMN_Y 中是平均分布的,這意味著它認為所有的值都有相同的出現(xiàn)頻率。如果事實碰巧如此,這樣估計并無大礙。但是,如果有些值比其他值出現(xiàn)得更頻繁一些(例如,如果 'VALUE_Z' 出現(xiàn) 900,000 次,即占所有行的 90%)。

那么DB2 優(yōu)化器不能考慮到這一點,因而生成的訪問計劃就不是***的。而分布統(tǒng)計信息可以填補這一空白。分布統(tǒng)計信息可以提供關于數(shù)據(jù)出現(xiàn)頻率及其分布情況的信息,如果數(shù)據(jù)庫中存儲了很多重復值,并且數(shù)據(jù)在表中并非平均分布的時候,分布統(tǒng)計信息對于基本統(tǒng)計信息是一個重要的補充。

分布統(tǒng)計信息的類型 —— 頻率(frequency)統(tǒng)計信息和分位數(shù)(quantile)統(tǒng)計信息

有兩種不同類型的分布統(tǒng)計信息 —— 頻率統(tǒng)計信息和分位數(shù)統(tǒng)計信息。讓我們通過一個示例表來研究一下這兩種不同類型的分布統(tǒng)計信息。

示例表 “CARS” 表示一家汽車制造商,對于生產的每一輛汽車,在表中都有相應的一行。每輛汽車可以由它的 ID 來標識,因此 “ID” 是表 “CARS” 的主鍵(PK)。此外,表中有一個 “STATE” 列,表明汽車當前處在制造流程中的哪一步。一輛汽車的制造流程從第 1 步開始,然后是第 2 步、第 3 步,...、第 49 步、第 50 步、第 51 步、...、第 98 步、第 99 步。

一直到第 100 步 —— 第 100 步意味著汽車已經完工了。已完工的汽車所對應的行仍然保留在表中,后續(xù)流程(例如投訴管理、質量保證等)仍要用到這些行。汽車制造商生產 10 種不同型號(“TYPE” 列)的汽車。為了簡化問題,在這個示例表中,各種汽車型號命名為 A、B、C、D、...、J。除主鍵索引(在 “ID” 列上)之外。

“STATE” 列上也有一個索引(“I_STATE”),在 “TYPE” 列上還有一個索引(“I_TYPE”)。實際上,一個 “CARS” 表包含的列遠不止 “ID”、“STATE” 和 “TYPE”。為簡單起見,示例表中沒有出現(xiàn)其他這些列。

頻率統(tǒng)計信息

假設表 CARS 現(xiàn)在有大約 1,000,000 條記錄,不同的型號在表中出現(xiàn)的頻率如下所示:

表 1. 表 CARS 中 TYPE 列的頻率統(tǒng)計信息

 

 

  1. TYPE COUNT(TYPE)   
  2. A 506135   
  3. B 301985   
  4. C 104105   
  5. D 52492   
  6. E 19584   
  7. F 10123   
  8. G 4876   
  9. H 4589   
  10. I 4403   
  11. J 3727 

 

 

型號為 A 的汽車最受購買者的青睞,因此生產的汽車中大約有 50% 是這種型號。型號 B 和型號 C 僅次于型號 A ,分別占所有汽車的 30% 和 10%。其他所有型號加在一起僅占 10%。

上面的表顯示了 “TYPE” 列的頻率統(tǒng)計信息。通過基本統(tǒng)計信息,DB2 優(yōu)化器只能了解到該表包含 1,000,000 行(表的基數(shù))和 10 種不同的值(型號),即 A 到 J。如果沒有分布統(tǒng)計信息,優(yōu)化器會認為每種值以相同的頻率出現(xiàn),大約都是出現(xiàn) 100,000 次。

而一旦生成了關于 “TYPE” 列的分布統(tǒng)計信息,優(yōu)化器即可了解每種型號真正的出現(xiàn)頻率。因此,DB2 優(yōu)化器清楚各種已有型號出現(xiàn)的不同頻率。

優(yōu)化器使用頻率統(tǒng)計信息來計算用于檢查相等或不等的謂詞的過濾因子。例如:

 

  1. SELECT * FROM CARS WHERE TYPE = 'H' 

分位數(shù)統(tǒng)計信息

與頻率統(tǒng)計信息不同,分位數(shù)統(tǒng)計信息與不同值的出現(xiàn)頻率無關,而與一個表中有多少行小于或大于某個值(或者有多少行介于兩個值之間)相關。分位數(shù)統(tǒng)計信息提供關于一個列中的值是否聚合的信息。為獲得這樣的信息,DB2 假定列中的值是按升序排列的,并根據(jù)正則行間隔確定相應的值。

我們來看看表 CARS 中的 “STATE” 列,該列按升序排列。根據(jù)正則行間隔,即可確定 “STATE” 的對應值。

表 2. CARS 表中 STATE 列的分位數(shù)統(tǒng)計信息

 

 

  1. COUNT(row) STATE ASC   
  2. 5479 1   
  3. 54948 10   
  4. 109990 21   
  5. 159885 31   
  6. 215050 42   
  7. 265251 52   
  8. 320167 63   
  9. 370057 73   
  10. 424872 84   
  11. 475087 94   
  12. 504298 100   
  13. ... 100   
  14. 1012019 100 

 

 

由于已完工的汽車仍然沒有從表中刪除,因此狀態(tài)為 100 (=完工)的汽車數(shù)量比所有處于其他狀態(tài)的汽車總和還多。已完工的汽車占表中所有記錄的 50%。

注意: 在實際情況下,已完工的汽車數(shù)量甚至還要更多(例如超過 99%)。在后文中的具體例子中可看到這種情況。

上表顯示了 “STATE” 列的分位數(shù)統(tǒng)計信息。有了這種關于有多少行分別小于和大于確定值的信息,優(yōu)化器即可計算出用于測試小于(小于等于)、大于(大于等于)或介于兩值之間的謂詞的過濾因子。例如:

 

  1. SELECT * FROM CARS WHERE STATE < 100 
  2. SELECT * FROM CARS WHERE STATE BETWEEN 50 AND 70  

 

根據(jù)已有的分位數(shù)統(tǒng)計信息計算出來的過濾因子不是很精確,但即使只收集 20 個值,其誤差仍然低于 5%。

完整內容的學習,請訪問:

http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0606fechner/

【編輯推薦】

  1. DB2數(shù)據(jù)庫雙機的正確安裝流程描述
  2. 對DB2 實現(xiàn)split的操作流程描述
  3. JDBC連接DB2數(shù)據(jù)庫的“捷徑”
  4. IBM DB2 Catalog如何正確應用?
  5. DB2連接端口不能啟動這一問題的殲滅

 

責任編輯:佚名 來源: css-board.cn
相關推薦

2010-08-20 11:16:39

DB2 優(yōu)化器

2010-08-13 14:32:13

DB2 優(yōu)化器

2010-09-01 10:38:47

DB2統(tǒng)計信息

2010-08-31 15:08:14

DB2INSERT優(yōu)化

2011-03-21 09:51:04

DB2性能優(yōu)化

2010-08-16 17:07:43

DB2 trc

2012-08-01 14:23:35

IBMdW

2010-11-04 15:43:49

DB2數(shù)據(jù)統(tǒng)計與分析系

2010-08-05 15:48:14

DB2強制優(yōu)化器

2010-11-04 15:39:40

DB2 SQL語句

2010-09-06 16:16:20

DB2 優(yōu)化器

2010-08-10 17:33:42

DB2 優(yōu)化器

2010-08-20 09:44:51

DB2確定某個表

2010-08-20 09:44:51

DB2確定某個表

2010-08-17 16:13:32

DB2 并行版本

2010-08-20 09:44:51

DB2確定某個表

2010-09-06 14:39:06

DB2 9

2010-09-30 13:27:09

DB2游標

2010-09-30 15:17:17

DB2信息目錄

2011-01-20 10:15:22

ibmdwDB2
點贊
收藏

51CTO技術棧公眾號