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

DB2 優(yōu)化器中使用分布統(tǒng)計信息的正確操作方案描述

數(shù)據(jù)庫
此文描述的是DB2 優(yōu)化器中使用分布統(tǒng)計信息的正確操作方案,DB2 優(yōu)化器中使用分布統(tǒng)計信息在實際的相關(guān)操作中起到不可忽視的作用,以下的文章就是對相關(guān)內(nèi)容的描述。

我們今天主要向大家講述的是在 DB2 優(yōu)化器中使用分布統(tǒng)計信息的正確操作方案,我們大家都知道DB2 數(shù)據(jù)庫的優(yōu)化器是一種基于成本的優(yōu)化器。它主要是根據(jù)表和索引的相關(guān)統(tǒng)計信息作出決策。

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

簡介

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

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

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

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

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

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

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

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

 

溢出的行數(shù)

 

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

 

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

 

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

 

列的基數(shù)

列的平均長度

 

列中第二大的值

 

列中第二小的值

 

列中 NULL 值的個數(shù)

 

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

 

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

  1. 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%),那么優(yōu)化器不能考慮到這一點,因而生成的訪問計劃就不是***的。而分布統(tǒng)計信息可以填補這一空白。分布統(tǒng)計信息可以提供關(guān)于數(shù)據(jù)出現(xiàn)頻率及其分布情況的信息,如果數(shù)據(jù)庫中存儲了很多重復(fù)值,并且數(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” 表示一家汽車制造商,對于生產(chǎn)的每一輛汽車,在表中都有相應(yīng)的一行。每輛汽車可以由它的 ID 來標識,因此 “ID” 是表 “CARS” 的主鍵(PK)。此外,表中有一個 “STATE” 列,表明汽車當前處在制造流程中的哪一步。

一輛汽車的制造流程從第 1 步開始,然后是第 2 步、第 3 步,...、第 49 步、第 50 步、第 51 步、...、第 98 步、第 99 步,一直到第 100 步 —— 第 100 步意味著汽車已經(jīng)完工了。已完工的汽車所對應(yīng)的行仍然保留在表中,后續(xù)流程(例如投訴管理、質(zhì)量保證等)仍要用到這些行。汽車制造商生產(chǎn) 10 種不同型號(“TYPE” 列)的汽車。

為了簡化問題,在這個示例表中,各種汽車型號命名為 A、B、C、D、...、J。除主鍵索引(在 “ID” 列上)之外,“STATE” 列上也有一個索引(“I_STATE”),在 “TYPE” 列上還有一個索引(“I_TYPE”)。實際上,一個 “CARS” 表包含的列遠不止 “ID”、“STATE” 和 “TYPE”。為簡單起見,示例表中沒有出現(xiàn)其他這些列。

頻率統(tǒng)計信息

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

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

 

TYPE COUNT(TYPE)

 

A 506135

 

B 301985

 

C 104105

 

D 52492

 

E 19584

 

F 10123

 

G 4876

 

H 4589

 

I 4403

 

J 3727

 

型號為 A 的汽車最受購買者的青睞,因此生產(chǎn)的汽車中大約有 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 次。而一旦生成了關(guān)于 “TYPE” 列的分布統(tǒng)計信息,優(yōu)化器即可了解每種型號真正的出現(xiàn)頻率。因此,優(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)頻率無關(guān),而與一個表中有多少行小于或大于某個值(或者有多少行介于兩個值之間)相關(guān)。分位數(shù)統(tǒng)計信息提供關(guān)于一個列中的值是否聚合的信息。為獲得這樣的信息,DB2 假定列中的值是按升序排列的,并根據(jù)正則行間隔確定相應(yīng)的值。

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

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

 

COUNT(row) STATE ASC

 

5479 1

 

54948 10

 

109990 21

 

159885 31

 

215050 42

 

265251 52

 

320167 63

 

370057 73

 

424872 84

 

475087 94

 

504298 100

 

... 100

 

1012019 100

 

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

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

上表顯示了 “STATE” 列的分位數(shù)統(tǒng)計信息。有了這種關(guān)于有多少行分別小于和大于確定值的信息,優(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%。以上的相關(guān)內(nèi)容就是對DB2 優(yōu)化器中使用分布統(tǒng)計信息的正確操作方案的介紹,望你能有所收獲。

【編輯推薦】

  1. DB2實施備份時應(yīng)作的事項有哪些?
  2. 實現(xiàn)DB2數(shù)據(jù)庫遷移之導(dǎo)入步驟在Linux下
  3. IBM DB2跨平臺數(shù)據(jù)庫遷移操作步驟與注意點!
  4. DB2數(shù)據(jù)復(fù)制與遷移的實際操作方法,經(jīng)典版!
  5. DB2數(shù)據(jù)庫物化視圖之MQT物化查詢表的正確應(yīng)用

 

 

責任編輯:佚名 來源: csdn.net
相關(guān)推薦

2010-08-20 11:16:39

DB2 優(yōu)化器

2010-08-19 14:54:07

DB2 優(yōu)化器

2010-08-18 09:50:29

DB2緩沖池

2010-08-18 14:10:38

DB2入門

2010-08-04 15:00:06

DB2未使用索引

2010-07-30 13:45:17

執(zhí)行DB2

2010-08-04 10:03:37

DB2 9 分布式管理

2010-08-06 11:28:51

DB2取得當前時間

2010-08-17 15:42:30

DB2 增量備份

2010-08-09 09:50:29

整理DB2數(shù)據(jù)集

2010-09-01 10:38:47

DB2統(tǒng)計信息

2010-08-12 11:26:03

2010-08-02 10:44:16

DB2打補丁

2010-08-20 09:29:34

DB2文件系統(tǒng)已滿

2010-07-28 11:13:04

DB2 Resotre

2010-08-10 17:39:52

DB2 基礎(chǔ)

2010-07-29 10:30:41

DB2隔離級

2010-08-13 14:46:08

DB2 -964

2010-08-12 16:10:45

DB2 Online

2010-08-18 17:15:23

DB2 實現(xiàn)split
點贊
收藏

51CTO技術(shù)棧公眾號