關于數據庫優化有很多方法,這里針對數據庫的runstat(運行統計)和reorg(重組)進行以下說明;
一、runstats:
1、runstats的作用:
一個SQL在寫完并運行之后,其實我們只是告訴了DB2去做什么,而不是如何去做。而,具體的如何去做,就取決于優化器。優化器為了生成最優的執行計劃,就得掌握當前的系統信息,目錄中的統計信息等等。
runstats命令就是用來收集數據庫對象的狀態信息,這對優化器生成最優的執行計劃至關重要。
2、什么時候需要runstats:
在給表創建一個index后,我們最好做一次runstat,否則可能index沒有生效。不過有說法稱在8.2版本以后的DB2中,會在INDEX之后自動進行runstats;
在對table做了一次reorg后,記得要做一次runstats。因為對表做reorg,會修改表的很多信息,比如高水位等,所以做一次runstats,可以更新統計信息。
當表里數據發生了比較大的變化,一般來說,大約表里面的數據量的10%-20%發生了變化,就應該作一次runstats。這些變化包括刪除,修改,插入。對于一些非常大的表,比方在某些醫院,出院明細賬表非常巨大。這個時候,完整的對一個大表做runstats可能花費時間相當大,需要提前做好準備;
3、runstats的語法:
runstats on table [模式名].[表名] with distribution and detailed indexes all
你可以在所有列上,或者僅僅在某些列或列組(除了LONG和LOB列)上執行RUNSTATS。如果沒有指定特定列的子句,系統則會使用默認的ON ALL COLUMNS子句。
使用RUNSTATS WITH DISTRIBUTION
當您已確定表中包含不是統一分布的數據時,可以運行包含WITH DISTRIBUTION子句的RUNSTATS。目錄統計信息表通常包含關于表中最高和最低值的信息,而優化器假定數據值是在兩個端點值之間均勻分布的。然而,如果數據值彼此之間差異較大,或者群集在某些點上,或者是碰到許多重復的數據值,那么優化器就無法選擇一個最佳的訪問路徑,除非收集了分布統計信息。使用WITH DISTRIBUTION子句還可以幫助查詢處理沒有參數標志符(parameter marker)或主機變量的謂詞,因為優化器仍然不知道運行時的值是有許多行,還是只有少數行。
如果為單一索引進行runstats,可以使用:
runstats on table [模式名].[表名] for indexes [索引名]
4、圖像界面下runstats;
首先在維護機上編目需要優化的的數據庫;
連接數據庫;
找到需要做runstats的表,右鍵,選擇運行統計信息;
二、reorg
在對表數據進行許多更改之后,邏輯上連續的數據可能會位于不連續的物理數據頁上,在許多插入操作創建了溢出記錄時尤其如此。按這種方式組織數據時,數據庫管理器必須執行其他讀操作才能訪問順序數據。另外,在刪除大量行后,也需要執行其他的讀操作。
表重組操作會整理數據碎片來減少浪費的空間,并對行進行重新排序以合并溢出記錄,從而加快數據訪問速度并最終提高查詢性能。還可以指定根據特定索引來重新排序數據,以便查詢時通過最少次數據讀取操作就可以訪問數據。
|
|