程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 V9 自動維護,第 3 部分: 啟用自動表和索引重組

DB2 V9 自動維護,第 3 部分: 啟用自動表和索引重組

編輯:DB2教程

IBM 的 DB2 V9 引入了自動維護功能,即自動數據庫備份、自動統計信息更新以及在必要時重組表和索引。DB2 V9推出了自動備份功能,自動數據庫備份功能為用戶提供了一個解決方案,從而幫助用戶確保定期正確地對他們的數據庫進行備份,而不必擔心何時進行備份,也不需要具有有關備份命令的任何知識。另外,DB2 V9的自動維護功能還包括數據訪問優化(運行統計)、數據碎片整理(表或索引重組)和統計信息概要分析等功能,基於這些新的特性,將大大簡化我們在實際維護數據庫過程中的工作量。由於自動維護是DB2 V9的新特性,很多客戶不知道該如何使用,本文將重點介紹 DB2 V9 關於自動維護方面的新特性,並結合實際的例子幫助大家理解和提高。

啟用自動表和索引重組

DB2 V9 可以對表和所以進行自動重組。要進行高效率的數據訪問和獲得最佳工作負載性能,具有組織良好的表數據是很關鍵的。在對表數據進行許多更改之後,邏輯上連續的數據可能會位於不連續的物理數據頁上,在許多插入操作創建了溢出記錄時尤其如此。按這種方式組織數據時,數據庫管理器必須執行其他讀操作才能訪問順序數據。另外,在刪除大量行後,也需要執行其他的讀操作。表重組操作會整理數據碎片來減少浪費的空間,並對行進行重新排序以合並溢出記錄,從而加快數據訪問速度並最終提高查詢性能。還可以指定根據特定索引來重新排序數據,以便查詢通過最少次數據讀取操作就可以訪問數據。既可重組系統目錄表,也可以重組數據庫表。由 RUNSTATS 收集的統計信息與其他信息一起來顯示表中的數據分發情況。特別是,通過分析這些統計信息可以知道何時需要執行哪種類型的重組。自動重組通過使用 REORGCHK 公式來確定何時需要對表進行重組。它會定期評估已經更新了統計信息的表,以便了解是否需要重組。如果需要重組,則它會在內部調度對表進行傳統重組。這將要求執行應用程序功能而不對正在重組的表進行寫訪問。可以使用 AUTO_REORG、AUTO_TBL_MAINT 和 AUTO_MAINT 數據庫配置參數來啟用或禁用自動重組功能部件。在分區數據庫環境中,確定執行自動重組和啟動自動重組是在目錄分區上完成的。只需要在目錄分區上啟用數據庫配置參數。將在目標表所在的所有數據庫分區上運行重組。如果您不太確定何時以及如何重組表和索引,則可以將自動重組作為整個數據庫維護方案的一部分。

統計信息概要文件是由 RUNSTATS 實用程序提供了一個選項來注冊並使用的,該文件是一組選項,這些選項指定要對特定表收集的統計信息,例如,表統計信息、索引統計信息或分布統計信息。此功能部件簡化了統計信息收集,它允許您存儲在發出 RUNSTATS 命令時指定的一些選項,從而,可以對表反復收集相同的統計信息而不必重新輸入命令選項。無論實際上是否正在收集統計信息,都可以注冊或更新統計信息概要文件。例如,要同時注冊概要文件和收集統計信息,可發出帶有 SET PROFILE 選項的 RUNSTATS 命令。要在實際上並沒有收集統計信息的情況下只注冊概要文件,可發出帶有SET PROFILE ONLY 選項的 RUNSTATS 命令。要使用已經注冊的統計信息概要文件來收集統計信息,發出 RUNSTATS 命令,並且只指定表名和 USE PROFILE 選項。

統計信息概要文件還可以由 DB2 自動統計信息概要分析自動生成。當啟用了此功能時,會收集有關數據庫活動的信息,並將這些信息存儲在查詢反饋倉庫中。可根據此數據來生成統計信息概要文件。啟用此功能可以緩解統計信息與特定工作負載相關的不確定性問題,並可以收集最少的統計信息集來提供最佳的數據庫工作負載性能。可以將此功能與自動收集統計信息功能配合使用,後一項功能會根據自動生成的統計信息概要文件中包含的信息來自動安排統計信息維護。要啟用此功能,需要已經通過設置適當的配置參數啟用了表的自動維護。AUTO_STATS_PROF 配置參數將激活查詢反饋數據的收集,而 AOTO_PROF_UPD 配置參數將激活生成統計信息概要文件以供自動收集統計信息使用。

需要注意的是,生成統計信息概要文件不太適合 OLTP 環境中 ,比較適合 OLAP(運行使用許多謂詞的大而復雜的查詢、謂詞列的數據中經常具有關聯以及對幾個表進行連接和分組)環境中使用。另外,自動生成統計信息概要文件只能以 DB2 串行方式激活,而對於聯合環境、多分區 MPP 環境以及啟用了分區內並行性的環境中的查詢將禁用此功能。

接下來為了演示統計信息概要文件不能在聯合環境中使用,我們先把 DBM CFG 中的 FEDERATED 配置參數設置成 ON,打開聯合系統,提交,斷開所有連接,重啟示例,在 DB2CLP 窗口環境中,輸入 UPDATE DBM CFG 等命令,具體如清單 1 所示:

清單 1. 更新 DBM CFG 參數

        C:> db2 update dbm cfg using FEDERATED yes
DB20000I UPDATE DATABASE MANAGER CONFIGURATION命令成功完成。
SQL1362W 為立即修改而提交的一個或多個參數未動態更改。直到下次啟動應用程序或發出
TERMINATE 命令之後,客戶機更改才會生效。直到下一條 DB2START命令之後,服務器更改才會生效。  
C:> db2 terminate
DB20000I TERMINATE命令成功完成。
C:> db2 force applications all
DB20000I FORCE APPLICATION命令成功完成。
DB21024I 該命令為異步的,可能不會立即生效。
C:> db2stop
2007-09-23 19:54:07   0  0  SQL1064N DB2STOP 處理成功。
SQL1064N DB2STOP 處理成功。
C:> db2start
2007-09-23 19:54:16   0  0  SQL1063N DB2START 處理成功。
SQL1063N DB2START 處理成功。

接下來我們連上數據庫,對清單1中創建的示例數據庫 DB2TEST1 啟用自動統計信息概要分析和自動概要文件更新功能,在 DB2CLP 窗口環境中 ,連接上示例數據庫 DB2TEST1,通過發出 UPDATE DB CFG 命令修改自動統計信息概要分析(AUTO_STATS_PROF)、自動概要文件更新(AOTO_PROF_UPD)參數,將其值置為 ON,具體如清單 2 所示:

清單 2. 更新 DB CFG 參數

        C:> db2 connect to db2test1
  數據庫連接信息
數據庫服務器     = DB2 / NT 9.1.0
SQL 授權標識     = RHETTE
本地數據庫別名    = DB2TEST1
C:> db2 update db cfg using AUTO_STATS_PROF ON
SQL0270N 函數不受支持(原因碼 = " 75 " )。 SQLSTATE = 42997
C:> db2 update db cfg using AUTO_PROF_UPD ON
SQL0270N 函數不受支持(原因碼 = " 75 " )。 SQLSTATE = 42997

命令執行失敗,報 SQL0270N 錯誤,通過查詢 DB2 幫助得知這是由於在聯合系統中自動統計信息概要分析和自動概要文件更功能,我們在 DB2CLP 窗口中發出“DB2 ? SQL錯誤號”命令查詢 SQL0270N(原因碼 = " 75 " )對應的錯誤,具體如清單 3 所示:

清單 3. 更新 DB CFG 參數

        C:> db2 ? SQL0270N
SQL0270N 函數不受支持(原因碼 = "《原因碼》")。
解釋:
因為該語句違反由下列原因碼所指示的限制,所以不能處理它:
1 主鍵、每個唯一約束以及每個唯一索引必須包含表的所有分布列(這些列可以按任何順序出現)。
2 不支持更新分布鍵列值。
3 如果定義外鍵時指定了 ON DELETE SETNULL,則它不能包含任何可空分布鍵列。由於定義這樣
的約束將導致嘗試更新分布鍵列,所以這是原因碼 2 的特殊情況。
. . . . . . . . . . . . . . . . . . . .
75 多數據庫分區系統、啟用了 SMP的系統或聯合系統不支持自動統計信息概要分析功
能。
83 無法處理該語句,因為 DATA CAPTURE CHANGES 與COMPRESS YES 不兼容。
84 分區數據庫不能啟用自動存儲器。
85 不能將分區添加至啟用了自動存儲器的單一分區數據庫。
87 不能將下列類型的表定義為分區表:類型表、登台表、用戶臨時表和范圍集群表。
. . . . . . . . . . . . . . . . . . . .
用戶響應:
與原因碼對應的操作是:
. . . . . . . . . . . . . . . . . . . .
75 通過將數據庫配置參數 AUTO_STATS_PROF 和AUTO_PROF_UPD 設置為OFF,對此數據庫禁用
自動統計信息概要分析功能。 或者將系統更改為位於非聯合的、未啟用 SMP的單個數據庫分區上的系統。
. . . . . . . . . . . . . . . . . . . .
sqlcode :  -270
sqlstate : 42997

通過幫助我們的用戶響應,我們需要把系統更改為非聯合的。接下來我們把我們先把DBM CFG中的FEDERATED配置參數設置成NO,關閉聯合系統,提交,斷開所有連接,重啟示例,在DB2CLP窗口環境中,輸入UPDATE DBM CFG 等命令,具體如清單12所示:

清單 4. 更新 DBM CFG 參數

        C:> db2 update dbm cfg using FEDERATED no
DB20000I UPDATE DATABASE MANAGER CONFIGURATION命令成功完成。
SQL1362W 為立即修改而提交的一個或多個參數未動態更改。直到下次啟動應用程序
或發出TERMINATE 命令之後,客戶機更改才會生效。直到下一條 DB2START命令之後,服務器更改才會生效。
C:> db2 terminate
DB20000I TERMINATE命令成功完成。
C:> db2 force applications all
DB20000I FORCE APPLICATION命令成功完成。
DB21024I 該命令為異步的,可能不會立即生效。
C:> db2stop
2007-09-23 19:42:49   0  0  SQL1064N DB2STOP 處理成功。
SQL1064N DB2STOP 處理成功。
C:> db2start
2007-09-23 19:42:55   0  0  SQL1063N DB2START 處理成功。
SQL1063N DB2START 處理成功。

接下來我們再次連上數據庫,對示例數據庫DB2TEST1啟用自動統計信息概要分析和自動概要文件更新功能,在 DB2CLP 窗口環境中 ,連接上示例數據庫 DB2TEST1,通過發出 UPDATE DB CFG 命令修改自動統計信息概要分析(AUTO_STATS_PROF)、自動概要文件更新(AOTO_PROF_UPD)參數,將其值置為 ON,具體如清單 13 所示:

清單 5. 更新 DB CFG 參數

  
C:> db2 connect to db2test1
  數據庫連接信息
數據庫服務器     = DB2 / NT 9.1.0
SQL 授權標識     = RHETTE
本地數據庫別名    = DB2TEST1
C:> db2 update db cfg using AUTO_STATS_PROF ON
DB20000I UPDATE DATABASE CONFIGURATION命令成功完成。
C:> DB2 UPDATE DB CFG USING AUTO_PROF_UPD ON
DB20000I UPDATE DATABASE CONFIGURATION命令成功完成。

這樣我們就成功地啟用自動統計信息概要分析和自動概要文件更新功能,可以通過 GET DB CFG 查看配置參數,具體如清單 6 所示:

清單 6. 查看示例數據庫 DB2TEST1 的配置參數

        C:> db2 get db cfg for db2test1
    數據庫 的數據庫配置
數據庫配置發行版級別                  = 0x0b00
數據庫發行版級別                    = 0x0b00
數據庫地域                       = CN
數據庫代碼頁                      = 1386
數據庫代碼集                      = GBK
數據庫國家/地區代碼                  = 86
數據庫整理順序                     = UNIQUE
備用整理順序               ( ALT_COLLATE ) =
數據庫頁大小                      = 4096
. . . . . . . . . . . . . . . . . . . .
自動維護                  ( AUTO_MAINT ) = ON
  自動數據庫備份            ( AUTO_DB_BACKUP ) = ON
  自動表維護              ( AUTO_TBL_MAINT ) = ON
   自動 runstats            ( AUTO_RUNSTATS ) = ON
   自動統計信息概要分析       ( AUTO_STATS_PROF ) = ON
    自動概要文件更新         ( AUTO_PROF_UPD ) = ON
   自動重組            ( AUTO_REORG ) = OFF

接下來繼續在DB2CLP窗口中中打開自動重組功能,輸入UPDATGE DB CFG命令,把AUTO_REORG參數置成ON,打開自動重組功能(自動維護和自動表維護等父項開關必須都打開才有效),具體如清單 7 所示:

清單 7. 更新 DB CFG 參數

        C:> DB2 UPDATE DB CFG USING AUTO_REORG ON
DB20000I UPDATE DATABASE CONFIGURATION命令成功完成。

命令成功完成,這樣我們就打開了自動重組功能。另外,同本文的第一部分和第二部分一樣,對自動重組、自動統計信息概要分析、自動概要文件更新也可以在圖形化界面的配置自動維護中進行。

在控制中心在示例數據庫DB2TEST1上右鍵單擊,選擇自動維護窗口, 打開,在第五個頁面“選擇要配置的維護活動”頁面中對“整理表和索引數據碎片( REORG )”這條記錄中的“自動化”列打上勾即可,具體界面如圖12所示:

圖 1. 配置自動維護窗口選擇配置的維護活動頁面

DB2 V9 自動維護,第 3 部分: 啟用自動表和索引重組

雙擊“整理表和索引數據碎片( REORG )”記錄,或者選中這條記錄並單擊頁面下面的“配置設置”按鈕,就會打開“配置設置-整理數據碎片( REORG )”窗口,在其第一個標簽頁“表作用域”中,可以指定要將數據庫中的哪些表用於自動重組。要排除特定表,使用“選擇的表”選項並標識要使用國旅排除哪些表。要限制將進行自動重組的表的大小,可以指定大小限制。具體界面如圖13所示:

圖 2. 配置設置 - - 整理數據碎片( REORG )

DB2 V9 自動維護,第 3 部分: 啟用自動表和索引重組

在其第二個標簽頁“重組選項”中,可以指定索引重組方式是使用聯機還是脫機,聯機的方式允許對索引進行寫訪問,聯機索引重組將在聯機維護窗口中運行,注意,如果不允許對表進行寫訪問,則將使用脫機方式並且將在脫機維護窗口中運行索引重組。脫機方式允許對索引進行讀訪問。脫機索引重組將在脫機維護窗口中運行,注意,如果不允許對表進行讀訪問,則將在不進行訪問的情況下重試脫機索引重組。

另外,本窗口還可以指定要用於壓縮數據字典的選項,默認是保留,也可以重新選擇成重建。具體如圖14所示:

圖 3. 配置設置 - - 整理數據碎片( REORG )

DB2 V9 自動維護,第 3 部分: 啟用自動表和索引重組

關於配置自動維護窗口的其他頁面和上面所述的差不多,不再累述。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved