haeder4.jpg
首頁 arrow 技術專欄 arrow Informix系統效能改善第一步
Informix系統效能改善第一步 PDF 列印 E-mail
作者 傅凱文,譚永貽/庫柏資訊   
2007/05/23, 週三

本文介紹 IBM Informix® Dynamic Server 資料庫效能改善中最基礎之手段 UPDATE STATISTICS 以及其主要功能與執行時機。

簡介

IBM Informix® Dynamic Server (以下簡稱 IDS) 系統上,SQL 執行效能繫於 IDS optimizer 所決定的執行計畫 (SQL execution plan);而影響執行計畫的決定的兩個重要參考數據為統計資料(statistics) 和資料分佈 (distributions)。如果說這兩個參考數據和實際資料情況有太大的出入,Informix optimizer 可能會做出低效率的執行路徑 (execution path),進而促使 SQL 執行效能不彰。 UPDATE STATISTICS 是更新這兩個數據的必要手段。

適當執行 UPDATE STATISTICS 之後的 IDS optimizer 做出的最高效率的執行計畫而使 SQL IDS 上執行更有效率。

IDS UPDATE STATISTICS 指令在 SQL 執行計畫有兩個主要的功能:

1. 更新在系統型錄 (system catalogs) 統計資料 optimizer 以此決定執行計畫。

2. 更新資料分佈情形。 IDS optimizer 以此決定執行計畫最有效路徑 (lowest cost) 

UPDATE STATISTICS 指令使用時機

前面提到, IDS optimizer 在決定執行計畫時,會參考統計資料和資料分佈。統計資料從統計資料和資料分佈並不是即時的,只有在執行 UPDATE STATISTICS 時才會更新,也就是說這些資訊絕大部份的時候會和實際情況有所出入。至於什麼情況下該使用這個指令呢?

1. 資料數量 (number of rows) 有大量變化情形。

2. IDS 進行資料轉移 (migration) 之後。 

執行 UPDATE STATISTICS 的執行選擇

假使資料庫有 1000+ 表格 (table) ,為所有的 1000+ 表格執行 UPDATE STATISTICS 將耗用太多系統資源與時間,有實際執行上之困難。所以如何選擇需要被執行 UPDATE STATISTICS 之關鍵表格 (table) 才是執行 UPDATE STATISTICS 的關鍵決定。下列來自庫柏資訊 DBSonar 所提供之報表中,能幫你找到最常用以及最需要被執行 UPDATE STATISTICS 之關鍵表格,其範例如下: 

DB

Table

Nrows in Update Statistics

Accurated NRows

Change Rate %

N Read

N Write

Seqscan

ERP

Table1

0

41398

100.0

205815

70238

8

ERP

Table2

1

1859

99.9

37449384

6206787

810

ERP

Table3

400000

18644384

97.9

115655415

17922233

0

ERP

Table4

246

4777

94.8

311858759

127744455

20102

以上 Table1 Table3 因其 Nrows in Update Statistics Accurated NRows 差異甚大,是亟待被執行 UPDATE STATISTICS 之表格。譬如 Table3 是一個被大量讀取 (115,655,415 ) 與寫入 (17,922,233 ) 的表格, IDS 系統型錄認為 Table3 只有 400,000 (rows) 而事實上 Table3 已有 18,644,384 列, DBA 執行下列指令以更新在系統型錄統計資料。

UPDATE STATISTICS LOW FOR TABLE table3;

UPDATE STATISTICS 的等級

這個指令可以分成三種等級 (level) LOW, MEDIUM HIGH 。這三種等級的區別就是執行 UPDATE STATISTICS 時所收集的資料取樣的多寡。所謂的 HIGH level ,就是統計整個 table 的資料, MEDIUM 則是只隨機選取部份的資料進行統計。取樣的資料越多,透過統計資料和資料分佈做出來的執行計畫才會越精準越有效率;不過相對的,統計和計算取樣的時間成本也會比較高。 UPDATE STATISTICS 的語法如下:

 

UPDATE STATISTICS [LOW|MEDIUM|HIGH]; 

UPDATE STATISTICS [LOW|MEDIUM|HIGH] FOR TABLE; 

UPDATE STATISTICS [LOW|MEDIUM|HIGH] FOR TABLE table_name; 

UPDATE STATISTICS [LOW|MEDIUM|HIGH] FOR TABLE table_name(col_name); 

UPDATE STATISTICS [LOW|MEDIUM|HIGH] DISTRIBUTIONS ONLY; 

UPDATE STATISTICS FOR PROCEDURE procedure_name; 

DISTRIBUTIONS ONLY 是指更新資料分佈。只要沒有加上 DISTRIBUTIONS ONLY 參數,都會產生統計資料;然而只有在 level MEDIUM 或是 HIGH 才會產生資料分佈。 IDS optimizer 既然會採用這兩個數據做為選擇執行計畫的參考依據,我們可以透過一些小技巧,讓 optimizer 去選擇我們希望它選擇的執行計畫。例如說,針對 table 所有的欄位執行 UPDATE STATISTICS LOW ;但是針對 query request WHERE 條件有使用到的欄位執行 UPDATE STATISTICS MEDIUM ;對 index 所使用到的第一個欄位執行 UPDATE STATISTICS HIGH 。有了這樣不同等級的區別, optimizer 選擇走 index 的執行計畫的機會就會相對提高了。 UPDATE STATISTICS 執行後統計資料和資料分佈是會不斷覆蓋過去的,所以同一個 table 有執行一種以上 level UPDATE STATISTICS 時,切記先從 LOW, MEDIUM, HIGH 的順序執行,以免 MEDIUM HIGH 的資料被 LOW 所覆蓋。 

結論

在資料庫系統中,最主要的工作就是執行 client 端送來的 SQL ;而 optimizer 就身負決定執行 SQL 效能的關鍵角色。為了讓 IDS optimizer 做出最有效率的執行計畫,定期執行 UPDATE STATISTICS 就是資料庫管理員最重要的職責之一。執行相關細節和執行前後效果差異,將來會在後續的專欄中繼續討論。 

參考資料

- Understanding and Tuning Update Statistics 

(本文屬庫柏資訊所有,未經同意,請勿轉載!)

 

 

最後更新 ( 2007/06/27, 週三 )
 
< 前一個