概要介紹
DB2 開發和規劃團隊很久以前就認識到降低維護成本的必要性。這種認知促使他們開始關注許多行業領先的特性,比如 Configuration Advisor、Design Advisor 和一些自治特性(如自調優內存管理器),這些特性可以幫助減少與 DB2 維護有關的人力成本。與硬件成本削減有關的特性(比如數據壓縮)以及虛擬化支持也構成了向低成本演變的一部分。
DB2 數據庫不僅包含了旨在降低成本的特性,它始終保持在行業性能基准之上。DB2 性能基准頁面 描述了這種性能領先性。
由於具有旨在幫助削減成本的行業領先特性、性能領先性和一個開放標准,因此,DB2 數據庫在低成本演變方面也保持領先優勢。
本文將全面審視成本削減策略,並提供針對以下各種主題的指導:
規劃
安裝
設置和配置
維護和操作
降低硬件成本
減少故障診斷成本
某些小節包含了指向其他最佳實踐文章的鏈接,這些文章描述了針對特定主題的具體技術或最佳實踐。其他小節則重點介紹了有關這些主題的關鍵考慮事項。
最後,通過提供簡單的方法來找出可以在 DB2 環境中削減成本的特性,本文檔描述了如何輕松地在企業標准中確定成本削減策略。要確保使用遠程監控技術在數百個或數千個系統之間監視成本削減特性,檢測是一個非常重要的環節。這可以幫助您在企業范圍內擴展您的成本削減策略。
DB2 數據庫和總擁有成本
本白皮書主要針對數據庫管理員(DBA),側重於 DB2 數據庫的快速成本削減實踐。本白皮書的目標是解放 DBA,使他們能夠將更多的注意力、時間和精力集中到業務發展方面。以降低成本為宗旨,我們將跳過繁瑣的介紹,直接切入主題。
我們將首先討論企業成本削減,它涉及三個關鍵方面:
IT 實踐(包括標准化)
業務策略(比如主數據管理,可以整合和 / 或精簡業務)
成本削減特性和技術
我們將簡要介紹每一個方面,但是將對最後一個主題進行深入探討,因為這是本文的主要關注點。
標准化
標准化對於減少各個系統和 DB2 實例的復雜性和特殊性至關重要。特殊性只有在驅動業務價值時才對業務有價值。除此以外,其他任何原因的特殊性只會帶來不必要的復雜性。例如,擁有 100 個專門系統和 DB2 實例會增加維護成本,因為每一個系統都有它自身所特有的計劃表、特性以及挑戰或機遇。另一方面,100 個標准化系統可以更好地共享計劃表、基本原則、最佳實踐以及已知的改進。企業標准化提供了增強的一致性、改進的可預測性和更低的風險,所有這些改進都有助於降低您的業務成本。對於數據倉庫需求,IBM Balanced Warehouse™ 為企業范圍內的應用提供了一個標准化平台。
業務策略
有許多種業務策略,比如整合、虛擬化、主數據管理(MDM)以及流線化開發。IBM 在每一種策略方面都擁有行業領先技術,包括其 MDM 解決方案、Data Studio 以及旨在流線化業務的各種技術。請咨詢 IBM 的本地銷售代表,詳細了解這些技術如何幫助您節省業務資金。
IBM 的業務和技術顧問可以為您的企業提供出色的標准化實踐,他們非常樂意幫助您流線化您的業務運營,從而最終實現成本削減。
成本削減特性和技術
DB2 數據庫是行業內的性能領先者。通過結合旨在幫助縮減成本的行業領先特性,比如壓縮,DB2 數據庫是幫助您削減 IT 部門的成本的最佳選擇。性能和特性(比如壓縮)都能幫助您最大程度地利用您的硬件投資成本。請參考以下最佳實踐,了解如何利用 DB2 數據庫的出眾性能以及它如何幫助您實現硬件成本節約:
DB2 最佳實踐: 編寫並調試查詢語句以優化性能最佳實踐
DB2 最佳實踐: 性能調優和問題診斷最佳實踐
DB2 最佳實踐: 在 DB2 for Linux, Unix, and Windows 中的行壓縮的最佳實踐
DB2 最佳實踐:使用虛擬化來提高數據服務器利用率和對數據服務器的管理
除了硬件成本外,人力成本也構成了平均 IT 預算的一個重要部分。可以實現自動化的任務越多,花在繁瑣任務方面的時間就越少。這可以空出更多的時間來關注業務發展(更不用說可以令 DBA 大大減輕負擔)。DBA 和企業認識到利用成本削減技術的團隊能夠將他們的時間重新投入到積極的企業增長中,這對公司的盈利以及 DBA 對公司的價值將產生實質的影響。事實上,企業將獲得雙重受益:降低日常成本並提高生產力,從而推動業務向前發展。還有比這更劃算的事情嗎?
DB2 數據庫成本削減特性一覽表
下表列出了旨在幫助企業削減成本的 DB2 特性,並指出了每一種特性所在的版本。
DB2 UDB Version 8.2 DB2 Version 9.1 DB2 Version 9.5 DB2 Version 9.7 Configuration Advisor X X X X Design Advisor X X X X 自調優內存管理器 X X X 自動備份 X X X X 自動統計數據收集 X X X X 工作負載管理 X X 數據壓縮 X X X 自動存儲 X X X X 自動重組 X X X X 非根安裝 X X pureXML® X X X 低內存占用線程化架構 X X 自調優備份 X X X X 自調優負載 X X X X 查詢重寫 X X X X 數據庫管理工具(Data Studio) X X
本文提供了有關上表提及的一些關鍵特性的說明。
規劃您的系統
容量規劃是開始實現成本削減實踐的良好開端。與容量有限的系統相比,一個針對工作負載及其預期增長進行了適當容量調整的系統將經歷更少的問題。超大容量的系統不會引起問題,但是會浪費寶貴的硬件資源。實現兩者的平衡是一個重要目標,而這可以通過一組最佳實踐實現。
如果系統和實例已經啟動並運行,那麼您可以使用諸如 DB2 Performance Expert 歷史歸檔之類的技術收集各種關鍵性能指標(KPI)。DB2 Performance Expert 可以給出一些推斷,比如工作負載隨時間的增長、這種增長對系統資源的影響,以及 DB2 系統的最佳調優。另一方面,如果您從零開始且沒有任何可供利用的系統指標,那麼最好咨詢熟悉其他系統的專家,以幫助您確定初始大小並選擇必需的硬件。DB2 最佳實踐: 性能調優和問題診斷最佳實踐 中的“硬件配置”小節介紹了有關容量規劃的一些方面。
安裝 DB2 系統
有關安裝的最佳實踐,請參考 DB2 最佳實踐: 部署 IBM DB2 產品 一文中的部署 DB2 產品的最佳實踐。本文介紹了來自 IBM 主題專家的安裝規劃、安裝方法和大型部署。大型部署方法對於那些包含數百或數千個 DB2 實例的企業環境尤其重要。
配置 DB2 系統
本節將概述關鍵的 DB2 成本削減特性,它們可以幫助配置和調優您的實例和數據庫。本節包括針對每個特性的最佳實踐以及有關它們使用狀況的檢測方式。後一部分內容可以簡化對標准實踐的監視以及整個企業內潛在的成本削減機會的識別。
DB2 Configuration Advisor
由於 DB2 客戶庫極其復雜,因此任何硬編碼的默認配置只適合一小部分系統。DB2 數據庫包含一個名為 Configuration Advisor 的特性,該特性可用於通過一組最簡單的步驟來執行點擊操作,從而在最短的時間內配置一個新的或已有的數據庫。Configuration Advisor 可以幫助在默認配置值的基礎之上實現顯著的性能改進。
當自動運行在一個新數據庫之上時,Configuration Advisor 將做出一些假設,比如數據庫中混合了 OLTP 和 DSS 工作負載。如果在創建數據庫並使用了一段時間後運行 Configuration Advisor,您可以提供有關目前已知的工作負載的信息,這將生成更好的配置。
Configuration Advisor 不會持續修改配置參數來響應不斷變化的工作負載。如果希望它這樣做的話,那麼可以使用自調優內存管理器(STMM),我們將稍後介紹這一主題。然而,Configuration Advisor 確實調優了一些 STMM 沒有修改的參數。下表顯示了分別由 Configuration Advisor 和 STMM 調優的參數:
參數
類型
Configuration Advisor
STMM
AGENT_STACK_SZ
DBM
√
ASLHEAPSZ
DBM
√
FCM_NUM_BUFFERS
DBM
√
INTRA_PARALLEL
DBM
√
MAX_QUERYDEGREE
DBM
√
MAXAGENTS
DBM
√
NUM_POOLAGENTS
DBM
√
NUM_INITAGENTS
DBM
√
PRIV_MEM_THRESH
DBM
√
RQRIOBLK
DBM
√
SHEAPTHRES
DBM
√
APP_CTL_HEAP_SZ
DB
√
APPGROUP_MEM_SZ
DB
√
APPLHEAPSZ
DB
√
CATALOGCACHE_SZ
DB
√
√①
CHNGPGS_THRESH
DB
√
DBHEAP
DB
√
√①
DFT_DEGREE
DB
√
DFT_EXTENT_SZ
DB
√
DFT_PREFETCH_SZ
DB
√
DFT_QUERYOPT
DB
√
LOCKLIST
DB
√
√
LOGBUFSZ
DB
√
LOGFILSIZ
DB
√
LOGPRIMARY
DB
√
LOGSECOND
DB
√
MAXAPPLS
DB
√
MAXLOCKS
DB
√
√
MINCOMMIT
DB
√
NUM_IOCLEANERS
DB
√
NUM_iOSERVERS
DB
√
PCKCACHESZ
DB
√
√
SOFTMAX
DB
√
SORTHEAP
DB
√
√
STMTHEAP
DB
√
STAT_HEAP_SZ
DB
√
UTIL_HEAP_SZ
DB
√
√①
SELF_TUNING_MEM
DB
√
AUTO_RUNSTATS
DB
√
AUTO_MAINT
DB
√
AUTO_TBL_MAINT
DB
√
SHEAPTHRES_SHR
DB
√
√
DATABASE_MEMORY
DB
√
(Buffer pool sizes)
Buffer pool
√
√
① :DB2 數據庫將調優在這些堆耗盡內存的情況下可用的空閒數據庫內存量。
從 DB2 Version 9 開始,在默認情況下將為新數據庫激活 AUTOCONFIGURE(Configuration Advisor 實用工具的命令行調用)。還可以運行 AUTOCONFIGURE 命令來對現有數據庫使用 Configuration Advisor。
注意:Configuration Advisor 不會在升級期間自動運行,因此您需要在必要時手動使用它。
研究表明,使用非自動化或非默認特性的次數要比使用自動化和默認特性的次數少 20 倍。如果您的企業也是這種情況的話,那麼在沒有企業標准且不受鼓勵的情況下,不太可能出現在創建數據庫後手動運行 Configuration Advisor 的情況。這將導致出現許多未得到調優的系統,或者需要花費額外的時間手動調優每一個系統。確保您的組織了解運行 Configuration Advisor 的價值,且至少需要在最開始考慮一些推薦實踐。
下面是關於使用 Configuration Advisor 的一些一般規則:
如果使用 Data Partitioning Feature,那麼使用注冊表變量禁用 AUTOCONFIGURE。每個節點都應該使用相同的調優設置。可以專門在一個節點上調優 AUTOCONFIGURE 以為此節點獲得最佳性能,然後在其他節點(分區)中手動復制這些設置。
如果在創建一個新數據庫時沒有特意運行 AUTOCONFIGURE,那麼在數據庫相對較新時盡早使用 Configuration Advisor GUI。該 GUI 會帶領您了解有關數據庫參數調優的其他信息。最後,您應當記錄下 GUI 中顯示的有關您的數據庫的 10 個問題的答案,這樣就可以調度一個任務以便稍後自動執行。
當數據庫運行一個典型的工作負載時,或者當它一旦被用於生產中時,那麼每月使用一個計劃好的任務運行 AUTOCONFIGURE 命令(包含 APPLY NONE 關鍵字)。確保對此命令使用全部 10 個輸入關鍵字,這樣計劃任務就可以提醒您以及其他 DBA 有關這個數據庫的調優情況。由於許多 DBA 默認情況下從其他人那裡繼承數據庫,因此對每個生產數據庫每月運行一次 AUTOCONFIGURE 任務將使這些剛接觸環境的 DBA 有機會了解數據庫的預期任務。這不會對數據庫產生配置修改,但是會提出一組合理的配置建議。查看這些修改並在適當的時刻應用最有益的修改。
在使用該數據庫的應用程序中,將 AUTOCONFIGURE 命令的 ISOLATION 參數設置為任意查詢中使用的最高隔離級別。這將影響與並發性有關的 locklist等配置參數,因此需要謹慎地設置這一項,選擇推薦使用的最高隔離級別。如果 locklist被設置為 AUTOMATIC,那麼 STMM 稍後始終可以調整 locklist 配置參數。
BP_RESIZABLE 參數確定是否允許 AUTOCONFIGURE 命令對緩沖池的大小提出建議。將 BP_RESIZABLE 設置為 YES 將為每個緩沖池建議最佳初始大小。如果這些參數都是被自動設置的話,那麼 STMM 總是可以在稍後調整這些參數。允許 AUTOCONFIGURE 和 STMM 修改您的緩沖池的例外情況就是那些使用 DPF 的數據庫以及 ISV 禁止您作出修改的數據庫。
檢測 DB2 Configuration Advisor
要檢測 Configuration Advisor 是否處於活動狀態(在 DB2 Version 9.1 及以上版本中),查看 DB2_ENABLE_AUTOCONFIG_DEFAULT 注冊表變量。只要 DB2_ENABLE_AUTOCONFIG_DEFAULT 注冊表變量沒有被設置為 NO,那麼在數據庫創建期間將默認調用 Configuration Advisor,即使沒有指定 AUTOCONFIGURE 關鍵字。在腳本中,您可以檢查 AUTOCONFIGURE APPLY NONE,可以在 CREATE DATABASE 命令期間使用它關閉 Configuration Advisor。如果沒有使用該注冊表變量關閉 AUTOCONFIGURE,那麼在腳本中使用 APPLY NONE 運行 AUTOCONFIGURE 實用工具並生成一個推薦報告;然而,並沒有應用參數和緩沖池建議。
如果希望禁用 configuration advisor,可以設置注冊表變量:
db2set DB2_ENABLE_AUTOCONFIG_DEFAULT=NO
或者,在使用 CREATE DATABASE 命令期間,可以指定 “AUTOCONFIGURE APPLY NONE”
db2 CREATE DB db_nameAUTOCONFIGURE APPLY NONE
注意:雖然 STMM 自動調優重要的內存參數,但是它不提供與環境性能有關的所有配置選項。請參考自調優內存一節,進一步了解 STMM。
通過預取程序和頁面清理程序改善緩沖池的使用
預取大小曾被設置為一個固定的默認值,該值可能只適合某個非常具體的環境。從 DB2 Version 8.2 起,預取大小將根據以下算法自動計算:
預取大小 = ( 容器數量 ) X( 每個容器中的物理磁盤的數量 ) X 盤區大小
這可以使面向各種配置的值更加動態和准確。通常沒有必要再進一步進行調優。
在 DB2 Version 9 之前的版本中,您需要手動設置預取程序和頁面清理程序的數量。如果該值設置得過低或過高,性能就會受到影響。
從 DB2 Version 9 開始,預取程序(NUM_iOSERVERS)和頁面清理程序(NUM_IOCLEANERS)的數量將在數據庫激活期間由配置參數 AUTOMATIC 的值自動設置(默認值)。有許多關於預取程序(iOSERVERS)和頁面清理程序(IOCLEANERS)的文檔,因此這裡不會詳細描述這些程序的功能和工作方式。
不需要對這些參數進行復雜的手動調優,NUM_IOCLEANERS 和 NUM_iOSERVERS 的設置遠遠好過默認值。對預取程序和頁面清理程序使用自動設置對於企業成本削減標准是一種不錯的選擇。
檢測預取程序和頁面清理程序自動設置
要檢測預取程序和頁面清理程序的設置,使用 GET DATABASE CONFIGURATION 命令:
db2 get database configuration for db_nameshow detail
在輸出中查找 NUM_IOCLEANERS 和 NUM_iOSERVERS:
…
Number of asynchronous page cleaners (NUM_IOCLEANERS) = AUTOMATIC(1)
Number of I/O servers (NUM_iOSERVERS) = AUTOMATIC(3)
…
當將兩者的值設置為 AUTOMATIC 時,將在數據庫激活時自動選擇預取程序和頁面清理程序的數量。
DB2 Design Advisor
可以使用 DB2 Design Advisor 改善工作負載性能。當為 DB2 Design Advisor 提供工作負載中的一組 SQL 語句時,它將為復雜的工作負載提供有關索引、Materialized Query Tables (MQTs)、集群維度或數據分區的建議。您可以讓 Design Advisor 立即或稍後實現它的推薦設置。
Design Advisor 可用於新數據庫或現有數據庫。對於新數據庫,Design Advisor 可以減少用於設置或改進性能所需的時間。對於現有數據庫,在很多情況下,您可以顯著地改進性能。
如果正在設計一個單分區數據庫,那麼可以使用 Design Advisor 在測試環境中生成更多的設計選擇。還可以使用它來評估已生成的索引、MQT、多維集群(MDC)表,或者數據庫分區策略。
DB2 Design Advisor 使用技巧
使用 Design Advisor 從您的測試系統中創建推薦配置。如果不希望對生產系統運行 Design Advisor,那麼對您的測試系統運行它。Design Advisor 需要三項內容來完成計算:
當前的數據庫結構
針對這些結構運行的工作負載
統計數據
如果您的測試環境包含所有與生產環境相同的數據庫結構,那麼可以對測試環境運行 Design Advisor。然而,由於測試環境通常並沒有全部填滿數據,因此測試統計數據不可能與生產統計數據相同,即使您對測試環境中的所有內容運行了 RUNSTATS。您可以模擬生產統計數據(或者從生產系統中復制它們),然後在測試系統上運行 Design Advisor。為此,使用下面的 DB2LOOK 實用命令來模擬生產統計數據:
db2look -d db_name-a -m -c;
該命令為您提供了合適的 UPDATE 命令來針對測試數據庫中的可更新視圖運行。對視圖進行更新後,對您的測試數據庫運行 Design Advisor。Design Advisor 將給出與在生產數據庫中相同的建議。然後您可以在生產數據庫中實現 Design Advisor 的建議。
這裡有一個例外:需要使用 MDC 建議的測試表。要想使 Design Advisor 能夠給出 MDC 建議,測試表必須具有良好的數據表示,即使您將生產統計數據復制到測試環境中。如果沒有對表數據進行良好的抽樣,那麼就沒有足夠的統計數據來給出可能的 MDC 值。要確保 Design Advisor 可以針對具體的表給出最佳 MDC 建議,嘗試完全填充它們(如果可能的話,使用生產數據)。
獲得 MQT 建議以改善工作負載性能,而不是刷新性能。
Design Advisor 不建議逐步刷新 MQT,因為它沒有將 MQT 的刷新看作是工作負載的一部分。這一情況也適用於 MQT 建議的索引,道理是一樣的。索引用於 MQT 性能以及使用它的工作負載,沒有必要對 MQT 刷新使用它。
必須確定是否希望創建 staging 表來實現逐步 MQT 刷新。還將需要判斷刷新是否會受到建議索引的不利影響。
從 DB2 Version 9.5 開始,Design Advisor 還可以接受來自 DB2 Workload Manager 的輸入。只需使用 COLLECT ACTIVITY DATA WITH DETAILS 或 COLLECT ACTIVITY DATA WITH DETAILS AND VALUES 選項捕捉感興趣的特定工作負載,並使用如下命令將結果加載到 Design Advisor:
db2advis -d db_name-wlm DB2ACTIVITIES
面向分區數據庫的 DB2 Design Advisor
如果正在設計一個分區數據庫,那麼可以使用 Design Advisor 完成下面的任務:
在將數據加載到數據庫之前確定分區策略。
幫助從單分區數據庫遷移到多分區數據庫。
幫助從另一個數據庫產品遷移到 DB2 數據庫。
當設置好數據庫後,可以使用 Design Advisor 完成下面的操作:
幫助改進特定語句或工作負載的性能。
使用樣例工作負載的性能作為標尺,幫助改進數據庫性能。
幫助改進最常執行的查詢的性能,例如,如 Activity Monitor、應用程序快照或應用程序管理視圖所標識的查詢。
確定如何優化新的關鍵查詢的性能。
響應 Health Center 或 Data Studio Administration Console 的建議,這些建議與共享內存實用工具或排序密集型工作負載中的堆排序問題有關。
查找工作負載中沒有使用的對象。
在成本削減標准中包含 Design Advisor,因為它可以幫助您極大地縮短設計數據庫對象所需的時間,並改進工作負載性能。
維護 DB2 系統
本節將描述一些特性和實踐,它們可用於顯著地降低與實例和數據庫的維護和運作相關的成本。
自調優內存管理器
無論您是初級還是高級 DBA,自調優內存管理器(STMM)都可以幫助您節省許多用於調優方面的時間,因為它利用了來自最優秀的 DB2 性能專家的專門技術。
STMM 是行業內最高級的自調優技術之一。與 Configuration Advisor(只能在數據庫創建時或由用戶調用)不同,STMM 可以適應環境中的實際工作負載和修改,並相應地調整 DB2 內存配置。Configuration Advisor 和 STMM 是兩款互補的工具。Configuration Advisor 調優所有與性能有關的參數(包括許多與內存無關的參數),但是只有在收到請求時才這樣做。STMM 對 DB2 數據庫最大的內存區進行調優,並且是持續進行的。但是它不會處理與性能有關的其他參數。
自調優內存對於那些動態的或難於預測的工作負載尤其有用。STMM 的目的始終是改善內存使用,這使您從頻繁的更改以及對調優的密切監視中解放出來。
自調優內存的表現極為出色,因此最近的一些基准測試使用它來幫助調優數據庫以獲得最佳性能。STMM 最初是由 IBM Toronto Lab 的一些頂級性能調優專家設計的。在 DB2 Version 9 中,在默認情況下將為新的單分區數據庫啟用 STMM。對於 DB2 UDB Version 8 升級版,STMM 則繼續保持關閉狀態,除非您手動啟用它。有關在升級後啟用
在分區數據庫環境中,STMM 默認情況下是關閉的。在這類環境中,自調優內存有一些特殊的考慮事項。例如,STMM 將所有數據庫分區都看作是類似的結構。如果所有數據庫分區都是相似的,或者針對一組特定的相似的數據庫分區啟用它,那麼 STMM 將非常高效。
下表展示了 STMM 如何隨著工作負載的變化動態調優 DB2 數據庫,同時將內存保持在一定范圍內。手動執行這種持續的調優是不現實的,這也是自調優內存在節省時間和改進性能方面表現良好的原因。
圖 1. 緩沖池分配
檢測自調優內存管理器
使用 GET DATABASE CONFIGURATION 命令檢測 STMM:
db2 get database configuration for db_name
查找下面的條目:
Self tuning memory (SELF_TUNING_MEM) = ON
此外,兩個或多個 STMM 配置參數必須被設置為 AUTOMATIC,這樣才能夠啟用 STMM。
如果仍然希望手動調優內存,那麼可以在一個工作負載下將 STMM 運行 12 到 24 小時,在關閉它之前作出有關內存參數的最佳推測,然後實現您認為合適的建議。這項實踐有時也應用於分區實例中,以為手動調優環境獲得一個良好的建議配置。
常見問題解答
問題 #1:自調優內存可以用於 AIX Virtualization 嗎?
是的。一些白皮書介紹了這一問題,包括來自 developerWorks 的文章:Implementing System p virtualization with DB2 and WebSphere using IBM Enterprise Workload Management。
問題 #2:STMM 可以用於只有少量內存(4GB或8GB)的系統嗎?
是的,STMM 的設計初衷就是面向各種大型或小型系統。
問題 #3:STMM 在生產環境中的開銷怎麼樣呢?
STMM 的開銷非常小,且通常與顯著的性能增益相抵消。
問題 #4:我一直看到的這些 STMM 診斷日志是什麼?
2008-01-03-10.32.55.634423-300 I27429A459 LEVEL: Event
PID : 798770 TID : 1 PROC : db2stmm (SAMPLE) 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-203 APPID: *LOCAL.DB2.080151576421
AUTHID : WILDING
FUNCTION: DB2 UDB, config/install, sqlfLogUpdateCfgParam, probe:20
CHANGE : STMM CFG DB SAMPLE: "Database_memory" From: "592000"
<automatic> To: "615200" <automatic>
這是在STMM調優系統時自動發生的配置更改。
問題 #5:STMM 可以用於同一個 LPAR 下的多個數據庫嗎?
STMM 是特定於數據庫的,因此可以用於同一台計算機或 LPAR 中的多個數據庫。
自動存儲
存儲是四種關鍵資源(CPU、內存、網絡和存儲)之一,並且是削減成本的重要部分。一個自動存儲數據庫包含完全由 DB2 數據庫管理員管理的表空間。在最基本的層面,針對自動存儲啟用了的數據庫具有一組一個或多個與它們有關的存儲路徑。表空間可以被定義為 MANAGED BY AUTOMATIC STORAGE,並且它們的容器可以由數據服務器根據這些存儲路徑進行指定和分配。在 DB2 Version 9.5 中,自動存儲是非 DPF 系統的默認選項。
對於使用 DB2 9.7 創建的數據庫,可以在任何時候啟用自動存儲。對於已經啟用了自動存儲的數據庫,可以將任何表空間移入到自動存儲池中,從而實現了更多的靈活性。對於 9 . 7 以前的 DB2 版本,必須在數據庫創建期間啟用自動存儲,並且不能將表空間移入到自動存儲池中。
命令行處理器(CLP)提供了一種方式可以在數據庫創建期間禁用自動存儲,即顯式地使用 AUTOMATIC STORAGE NO 子句。如果在 Control Center 中使用創建數據庫向導,那麼可以通過單擊 I want to manage my storage manually 按鈕禁用自動存儲。如果使用的是 Data Studio Administration Console,那麼取消選中 Manage storage automatically with DB2 框。
存儲管理:自動調整大小
您還可以啟用自動存儲表空間來自動調整大小,從而允許數據庫管理員通過添加新的容器帶區集(stripe set)來自動處理所有文件系統環境。
您可以使用 CREATE DATABASE 命令或通過 Control Center Wizard(通過單擊 Let DB2 manage my storage)啟用自動存儲。在 DB2 Version 9 中,數據庫在創建時默認啟用了自動存儲,但是在 DB2 UDB Version 8 中,需要在創建數據庫時指定自動存儲。
下面是一些通過顯式或隱式方式啟用的自動存儲示例:
CREATE DATABASE DB1
CREATE DATABASE DB4 ON D:\PathToStorage DBPATH ON C:
CREATE DATABASE DB2 AUTOMATIC STORAGE YES ON E:
CREATE DATABASE DB3 ON /data/pathA, /data/pathB
檢測針對表空間的自動存儲
要檢測是否對表空間使用了自動存儲,獲取一個快照。該快照將顯示正在使用的自動存儲路徑。
使用下面的命令獲取表空間快照並在命令輸出中查找“Using automatic storage”:
db2 get snapshot for tablespaces on db_name
其中,db_name表示目標數據庫的名稱。例如,在 UNIX 或 Linux 系統上,您可以使用 grep 實用工具來過濾輸出,如下所示:
db2 get snapshot for tablespaces on
db_name| grep 'Tablespace name|Using automatic storage'
查看自動存儲的另一種方式是獲取數據庫快照並查找 “Automatic storage”。
db2 get snapshot for database on
db_name| grep – i ‘ automatic storage ’
Number of automatic storage paths = 1
Automatic storage path = /data/db2/db2inst1
結果顯示自動存儲特性的存儲路徑。
最後,還可以使用 db2pd命令來檢測是否已使用 db2pd – tablespaces命令啟用了自動存儲。具體來講,需要在輸出中查看有關表空間自動調整大小的統計數據。
注意:當對數據庫啟用自動存儲後,不一定要對該數據庫中的每個表空間使用自動存儲。可以通過兩種方式對已創建的表空間使用自動存儲,即在表空間創建期間指定 MANAGED BY AUTOMATIC STORAGE 或去掉 MANAGED BY DATABASE 或 MANAGED BY SYSTEM 關鍵字。
對於 DPF 實例,自動存儲的存儲路徑在默認情況下是類似的。例如,下面的命令在實例中的所有物理系統中使用路徑 /path1、/path2 和 /db1:
CREATE DATABASE mydb ON /path1,/path2, DBPATH ON /db1
要創建類似的路徑,按照如下所示使用 $N 分區標識符:
CREATE DATABASE mydb ON /p$N,/p$N,DBPATH ON /db1
這將采用路徑 /p1、/p2、/p3 等等,其中 1、2、3 表示實際的分區號。
常見問題解答
問題 #1:如何確定 DB2 目錄中的表空間的最大大小?
DB2 Version 9 及更新版本提供了一個可以使用 SQL 進行查詢的管理視圖。
視圖的名稱為 SYSIBMADM.TBSP_UTILIZATION 並且它包含以下列:TBSP_MAX_SIZE、TBSP_INCREASE_SIZE 和 TBSP_LAST_RESIZE_TIME。還可以使用該視圖查看已使用頁面的百分比和當前大小,以確定您與最大大小之間的距離。
問題 #2:如何從 SMS 轉換到 DMS 存儲?
使用 db2look 重新創建用於生成表空間以及其中的表的 DDL。使用 DMS 重新創建表空間(和表),然後使用 db2move 將數據從 SMS 中移動到 DMS 存儲。或者,可以使用 EXPORT 和 IMPORT 移動數據。
注意:還可以使用表空間備份,包含一個重定向的恢復。
問題 #3:當使用自動存儲填充 DMS 文件系統時,應用程序會怎樣?
應用程序將等待(暫停)執行重新調整大小。
問題 #4:當 DB2 數據庫處於等待狀態(直到文件系統變滿)時,如何設置一個有關表空間變滿的警告?
不需要監視 “table space full” 趨勢,而是監視空閒空間並確保對表空間啟用了自動調整大小。使用名為 SYSIBMADM.TBSP_UTILIZATION 的管理視圖來查看已用頁面的百分比。
問題 #5:可以通過增加文件系統下的磁盤空間量來增長存儲池嗎?
可以。根據情況擴展文件系統(或多個文件系統)可以保持對應的容器大小。
自動維護
DB2 數據庫包含一些自動維護特性,可以進一步簡化數據庫管理。這些特性幫助 DBA 管理備份、收集數據庫統計數據,以及處理數據庫重組。
使用自動維護
要查看自動表維護設置,只需要使用以下命令查看數據庫配置參數:
db2 get database configuration
查看以下自動維護條目:
Automatic maintenance (AUTO_MAINT) = ON
Automatic database backup (AUTO_DB_BACKUP) = OFF
Automatic table maintenance (AUTO_TBL_MAINT) = ON
Automatic runstats (AUTO_RUNSTATS) = ON
Automatic statement statistics (AUTO_STMT_STATS) = OFF
Automatic statistics profiling (AUTO_STATS_PROF) = OFF
Automatic profile updates (AUTO_PROF_UPD) = OFF
Automatic reorganization (AUTO_REORG) = OFF
如以上條目的縮進格式所示,配置參數存在一個層次結構。AUTO_MAINT 配置參數設置最高一層,而 AUTO_TBL_MAINT 配置參數涵蓋了表維護選項。
注意:自動備份和自動重組通常應用於較小的系統和實例,特別是那些需要高度自動化的系統和實例。對於企業用戶,更好的選擇是按需執行 REORG 並通過其他途徑實現自動化備份。我們將關注自動 RUNSTATS 和實時統計。
使用自動 RUNSTATS 和實時統計維護統計數據
DB2 優化器使用分類統計數據為任何給定的查詢確定最有效的訪問計劃。准確、完整的統計數據對於實現有效的數據訪問和最優工作負載性能至關重要。可以使用 DB2 自動統計數據收集特性來更新和維護相關數據庫統計數據。對於在單一處理器上運行單一數據庫分區的環境,可以有選擇地增強這一功能,方法就是收集查詢數據和統計數據概要文件,這些內容可以幫助 DB2 數據服務器自動收集工作負載所需的精確統計數據集。
自動統計數據收集按照您設置的刷新間隔對所需的表調用 RUNSTATS 實用工具。自動完成統計數據收集後,RUNSTATS 實用工具將自動更新有關某個表、其相關索引或統計視圖的統計數據。更新後的信息包括記錄的數量、頁面的數量,以及對象的平均記錄長度。優化器隨後使用這些信息來確定最佳數據訪問路徑。
自動 RUNSTATS 可以很好地保持統計數據的時效性,但是有些時候需要更實時的統計數據。在 DB2 Version 9.5 中引入了實時統計數據收集功能,它可以同步地收集統計數據(即在查詢運行時開始收集)。實時統計數據收集通過動態配置參數 AUTO_STMT_STATS 啟用。其中有一個查詢敏感度分析,可以確定某個特殊的語句是否需要更實時的統計數據。
對用於收集統計數據的時間有一個限制;默認值為 5 秒。如果收集時間長於這個值,一個異步統計數據收集將作為後台請求啟動。
如果當前的統計數據不可用,那麼優化器可能會根據不太准確的默認統計數據選擇一個低效的訪問計劃。
您應當:
對查詢有可能訪問的所有表和索引執行自動化統計數據收集。
對具有顯著更新行為或自上一次更新統計數據後創建了新索引的表執行自動化統計數據收集。
在更新完統計數據或修改配置參數後重新綁定應用程序(並有選擇地重新解釋它們的語句)。如果出現新的統計數據或配置值更改,查詢優化器可能會選擇一個不同的訪問計劃。
遵循這些實踐將為優化器提供最准確的信息,這些信息可以幫助確定最佳訪問計劃。
要加快統計數據更新(並節省用於存儲統計數據的磁盤空間),考慮只指定那些需要為其收集數據分布統計數據的列。
如果手動執行統計數據收集的話,確保索引統計數據與表同步,在同一時間更新表和索引統計數據。如果自上一次收集表統計數據後對表進行了大量的修改,那麼只對該表收集索引統計數據將使兩組統計數據無法實現同步。
從 DB2 Version 9 開始,自動統計數據在默認情況下是啟用的。您應當將自動統計數據更新作為成本削減過程的一部分,因為更准確的統計數據可以幫助優化器為查詢和應用程序選擇最佳的可用數據訪問路徑。
要啟用自動統計數據收集,使用 Configure Automatic Maintenance 工具或命令行來配置您的數據庫實例:
要使用 Configure Automatic Maintenance 工具:
a. 打開該工具,通過右鍵單擊數據庫對象從 Control Center 中打開或者通過右鍵單擊數據庫實例從 Health Center 中打開。
b. 從彈出窗口選擇 Configure Automatic Maintenance。在工具內部,可以啟用自動統計數據收集,指定對哪個表收集統計數據,以及用於統計數據更新的維護窗口。
要使用命令行,使用 UPDATE DATABASE CONFIGURATION 命令將以下每一個數據庫配置參數設置為 ON:
DB2 UPDATE DB CFG FOR db_nameUSING AUTO_MAINT ON
DB2 UPDATE DB CFG FOR db_nameUSING AUTO_TBL_MAINT ON
DB2 UPDATE DB CFG FOR db_nameUSING AUTO_RUNSTATS ON
要通過命令行設置策略,使用提供的存儲過程 AUTOMAINT_GET_POLICY、AUTOMAINT_GET_POLICYFILE、AUTOMAINT_SET_POLICY 和 AUTOMAINT_SET_POLICYFILE。如果已經使用 Configure Automatic Maintenance 工具成功配置了數據庫並且對配置很滿意,那麼通過一個命令行方法使用這些存儲過程對所有其他類似的數據庫設置相同的策略。
可選:如果希望啟用自動統計數據概要文件生成功能,那麼將 AUTO_STATS_PROF 和 AUTO_PROF_UPD 數據庫配置參數設置為 ON。
可選:如果您希望啟用實時統計數據收集功能,那麼將 AUTO_STMT_STATS 數據庫配置參數設置為 ON。該配置參數被設置為 ON 之後,不管何時需要用表統計數據優化查詢,都會在語句編譯時對其進行自動編譯。
注意:自動統計數據收集功能在分區數據庫環境、某些聯合環境或啟用了分區內並行性(parallelism)的環境下是不可用的。在這些環境中,您應當手動調用 RUNSTATS 來定期地更新統計數據(還可以從 ADMIN_CMD 過程調用 RUNSTATS)。
當在一個分區數據庫環境中收集表統計數據時,RUNSTATS 將只對在其中執行收集的數據庫分區中的表收集統計數據。由這個數據庫分區產生的 RUNSTATS 將被推廣到其他數據庫分區。如果在其中執行 RUNSTATS 的數據庫分區沒有包含某個特定表的一部分,那麼請求將被發送給數據庫分區組中第一個包含這個表部分的數據庫分區。
由於 RUNSTATS 只對單一數據庫分區收集統計數據,因此如果數據在所有數據庫分區之間的分布不一致的話,那麼統計數據的准確性就會降低。如果懷疑出現了不一致的數據分布,那麼可能需要在執行 RUNSTATS 命令之前使用 REDISTRIBUTE DATABASE PARTITION GROUP 命令在數據庫分區之間重新分布數據。
在高活躍度期間對生產系統手動調用 RUNSTATS 可能會對生產工作負載的性能產生負面影響。可以控制 RUNSTATS 實用工具以限制 RUNSTATS 的執行在數據庫活躍期間產生的性能影響。
檢測自動統計數據更新
要檢測是否啟用了自動統計數據收集,使用 GET DATABASE CONFIGURATION 命令:
db2 get database configuration for db_name
該命令將返回如下所示的信息:
Automatic maintenance (AUTO_MAINT) = ON
Automatic table maintenance(AUTO_TBL_MAINT) = ON
Automatic runstats (AUTO_RUNSTATS) = ON
如果您使用了自動統計概要文件生成功能,您還會看到下面的內容:
Automatic statistics profiling (AUTO_STATS_PROF) = OFF
Automatic profile updates (AUTO_PROF_UPD) = OFF
要關閉自動統計數據收集,使用 UPDATE DATABASE CONFIGURATION 命令來關閉 AUTO_TBL_MAINT 和 AUTO_RUNSTATS。
硬件成本削減策略
本節將描述幫助您削減硬件成本的特性和實踐。硬件成本顯然是總擁有成本的一個重要組成部分。好的一面是硬件正在變得越來越便宜、越來越快速、越來越可靠。當然,這並不表示我們現在不需要進一步削減硬件成本。如下所示的各種最佳實踐有助於進一步降低成本:
DB2 最佳實踐: 編寫並調試查詢語句以優化性能最佳實踐
DB2 最佳實踐: 性能調優和問題診斷最佳實踐
DB2 最佳實踐: 在 DB2 for Linux, Unix, and Windows 中的行壓縮的最佳實踐
DB2 最佳實踐:使用虛擬化來提高數據服務器利用率和對數據服務器的管理
檢驗成本削減策略
取決於具體的平台,有很多極其有用的工具和技術可用於幫助診斷問題。對於 AIX、Solaris 和 HP-UX 操作系統,大部分問題診斷工具都是操作系統附帶的,但是還有一些非常重要的免費工具。它們包括:
lsof:lsof 工具可以列出操作系統(OS)中所有打開的文件。當一個文件打開時,OS 將向進程返回一個數值文件描述符以供使用。該工具將列出 OS 上的所有已打開文件,並顯示它們的進程 ID 和文件描述符。
某種類型的調試器。調試器對於更高級的診斷非常有幫助。
對於 Linux 操作系統,可供使用的強大、免費的故障排除工具有很多。使用這些工具可以防止簡單的問題演變成為長期的、令人痛苦的麻煩,這會影響您的業務和生產力。下面是一些比較有用的診斷工具:
strace:strace 工具跟蹤系統調用、與操作系統交互的特殊函數。可以使用該工具解決多種類型的問題,特別是那些與操作系統有關的問題。
ltrace:ltrace 跟蹤進程調用的函數。這與 strace 類似,但是所調用的函數提供了更多細節。
lsof:lsof 工具可以列出操作系統(OS)中所有打開的文件。當一個文件打開時,OS 將向進程返回一個數值文件描述符以供使用。該工具將列出 OS 上的所有已打開文件,並顯示它們的進程 ID 和文件描述符。
top:該工具列出正在系統中運行的“頂級”進程。默認情況下,它將按照進程當前使用的 CPU 量排序。
traceroute/tcptraceroute:這些工具可用於跟蹤一個網絡路由(或至少跟蹤網絡路由的一個方向)。
ping:Ping 只是查看某個遠程系統能否響應。有時,防火牆會阻擋 ping 使用的網絡數據包,但是即便如此,ping 工具仍然十分有用。
hexdump(或同類工具):這個工具可以顯示文件的原始內容。
tcpdump(或 ethereal):用於解決網絡問題,這些工具可以顯示網絡流量數據包。
GDB:這是一個功能強大的調試器,可用於解決一些更復雜的問題。
readelf:這款工具可用於讀取和顯示有關 Executable and Linking Format (ELF) 文件的不同方面的信息。
這些工具不一定都用得到,但是將它們全部安裝到機器中會很有用,因為說不准什麼時候會用到它們。有關 Linux 系統一般故障排除的更多細節,請參考本文其中一位作者編著的圖書 “ Self-Service Linux: Mastering the Art of Problem Determination”,ISBN: 013147751X。
Windows 操作系統還提供了一些有價值的診斷工具,包括以下來自 Microsoft TechNet 的工具: TCPVIEw for Windows Operating systems Process Explorer。
務必要了解這些不同的工具,以便在需要時使用它們。可以將這些知識與好的研究實踐相結合,進一步改進研究工作。
結束語
DB2 是一種低成本、高性能的數據庫。它有許多最佳實踐和特性,能夠幫助減少總擁有成本,並且始終領先於行業性能基准。熟悉了各種成本削減技術和策略之後,您就可以節省大量時間和精力,然後將這部分時間和精力重新投入到推動業務發展當中去。