簡介
您是否需要詳細分析關鍵的性能因素,以便控制和調優 DB2 和 DB2 應用程序的性能?您是否需要前瞻性地診斷性能和可用性問題?您是否遇到過 DB2 服務器的操作問題,但又無法使用現有快照確定問題的原因,並希望擁有歷史監控數據?
IBM DB2 Performance Expert 是一個能夠通過提供在線監控、異常處理以及短期和長期歷史監控功能來幫助完成上述所有任務的工具。本系列的 第 1 部分 介紹了 DB2 PE 並舉例說明了其組件。第 2 部分 對該產品進行了深入介紹,並演示了各種實際使用場景,例如:
確定索引是否會提高性能
審查排序性能
檢查重新組織表的必要性
確保具有足夠的 DB2 代理來處理工作負載
解決鎖沖突問題
檢查來自包緩存的常用 SQL 語句
分析緩沖池
監控系統運行狀況
第 3 部分比較詳細地闡述了 Performance Warehouse(PWH),它是 DB2 PE 的組件,用於保存較長一段時間的歷史監控數據(長期歷史),並提供了數據分析工具,這些數據包括報告、查詢和經驗法則。在 PWH 中分析數據有助於識別潛在的性能問題或趨勢,以及確定改變 DB2 配置值的效果。存儲在 PWH 中的數據由 DB2 快照數據、DB2 事件監控數據和 DB2 配置數據組成。
Performance Warehouse
在監控任何系統的性能時,都應跨較長的幾個時間段查看性能數據,這樣才能真實了解系統問題。短期監控對於診斷某一即時問題(例如響應時間變長)比較有用,但不對系統變更的長期效果提供洞察,也不能幫助制定未來的容量計劃。通過捕獲短期性能快照和配置數據,並將其保存到一個長期 Performance Warehouse,DB2 PE 可以滿足這種需要。此外,如果必要,DB2 語句事件監視器所捕獲的數據也可以保存到 PWH 中。盡管 DB2 PE 的歷史數據只保留較短的時間(幾小時或幾天),但是一旦數據被保存在 PWH 中,這些數據便可在很長的時間內用於報告和趨勢分析。
以下是可以通過分析 PWH 中的數據來回答的一些問題:
哪些 SQL 語句消耗的 CPU、排序和執行時間最多?
執行頻率最高的 SQL 語句有哪些?
異步讀取比率和緩沖池命中率在高峰或正常時間是否總是超過警告和問題阈值?
數據庫管理器或數據庫配置中的變更是否是產生瓶頸(比如排序溢出)的原因?
編目緩存和包緩存的大小是否適合於在高峰和正常時間處理工作負載?
在使用當前這組索引的情況下,SQL 語句的運行是否正常?
圖 1 介紹了 Performance Warehouse 的組件。PWH 由一組控件和駐留在性能數據庫中的數據表組成,並且對於通過 DB2 PE 來監控的每一個 DB2 實例都是可用的。數據表中包含了下列活動的實際的長期性能數據:
緩沖池活動,包括基於 DB2 快照數據的表空間和表信息
基於 DB2 快照數據的數據庫活動
數據庫和數據庫管理器配置
基於 DB2 語句事件監視器的 SQL 活動
控制表用於保存用於收集、加載和分析數據的定義。
PWH 中包含了一個工作流引擎,它由用於收集和加載數據並用所加載的數據創建報告的過程組成。通過按照您所希望收集和接收報告的時間來安排這些過程,可以自動化這些過程的執行。例如,您可能想在每周一早上獲得上一周數據庫活動的報告。
此外,PWH 還起著數據倉庫的作用。提取、轉換和加載(ETL)過程用於將數據收集和加載到 PWH 表中:
提取:從短期歷史表讀取快照和配置數據。從語句事件監視器所寫的文件讀取 SQL 活動數據。
轉換:在一段時間內匯總快照數據。將 SQL 活動數據轉換成一種關系格式。
加載:將快照、配置和 SQL 活動數據插入 PWH 數據表。
報告等分析工具、預定義和用戶定義的查詢以及經驗法則有助於深入分析數據。
圖 1. Performance Warehouse 概覽
將數據導入 Performance Warehouse
性能數據導入 PWH 的方式有兩種:
短期歷史快照和配置數據的 ETL
SQL 活動跟蹤事件監視器數據的 ETL
短期歷史快照和配置數據的 ETL
為了收集短期歷史數據,DB2 PE 以用戶指定的時間間隔(即記錄時間間隔)制作系統活動的定期快照。在默認情況下,該時間間隔設置為 5 分鐘,用於收集數據庫、緩沖池、表空間、表或配置數據的統計數據,但該值也可以調整為其他值。歷史數據存儲在性能數據庫中,並在以歷史模式在任意的在線監視器屏幕上顯示數據時使用這些數據。DB2 PE 在歷史表中保存歷史數據的默認時間為 50 小時;50 小時過後,這些數據便被自動刪除。該時間范圍可以修改。
捕獲的短期歷史數據以用戶配置的時間間隔,通過 ETL 過程遷移到 PWH 表中。在轉換步驟中將匯總這些數據,也就是說將在若干個時間間隔內收集的短期歷史數據匯總為一個時間間隔,以減少 PWH 中包含的數據量。最小的匯總時間間隔為 15 分鐘。
例如,如果指定每 5 分鐘收集一次統計計數器上的短期歷史數據,然後在這些歷史數據遷移到 PWH 中時將其匯總到 15 分鐘組中,那麼每一行 PWH 數據將有 3 行短期歷史數據。
PWH 匯總方法
收集到的 DB2 快照數據由以下 3 類監視器元素組成:
水位標志 監視器元素指示在監視啟動後某元素曾達到的最高(最大)或最低(最小)值。
測量 監視器元素指示某項的當前值。測量值可能上升和下降。
計數器 顯示到取樣時為止所累積的信息。計數器計算增加的值,比如死鎖數。一旦終止或重新啟動實例或數據庫,計數器便會復位。
在 DB2 PE 將歷史數據匯總到 PWH 中時,它會對各監視器元素類型進行不同的處理。
對於水位標志,使用最高(最大)或最低(最小)值。
對於測量值,計算平均值,因為它們可能隨數據庫活動的變化而增大或減小。
對於計數器值,計算匯總時間間隔上的增量值。
例如,以 5 分鐘的時間間隔收集短期歷史數據,並以 15 分鐘的時間間隔進行匯總,則會看到以下結果:
對於水位標志,直到最後 15 分鐘時間間隔期間所達到的最高或最低值。
對於測量,會在 15 分鐘時間間隔內的七八行歷史數據上求平均值。
對於計數器,為 3 行歷史數據中最後一行和第一行值的差。
配置數據(數據庫管理器配置和數據庫配置數據)匯總到 PWH 與其他元素略有不同,因為這些數據不是水位標志、測量或計數器類型。這些數據是信息元素,並且只要某一值從一個時間間隔變為下一個時間間隔,它們就會遷移到 PHW 中。若配置參數很少變更,那麼在相應的 PWH 表中將只有不多的幾行。
包含快照和配置數據的 PWH 數據表
匯總後,數據被加載到下列數據表中:
PWH.BUFFERPOOL 針對緩沖池快照數據
PWH.TABLESPACE 針對表空間快照數據
PWH.TABLE 針對表快照數據
PWH.DATABASE 針對數據庫快照數據
PWH.DBMCFG 針對數據庫管理器配置數據
PWH.DBCFG 針對數據庫配置數據
SQL 活動跟蹤事件監視數據的 ETL
存儲在 Performance Warehouse 中的其他類型的數據是指那些由可以從 DB2 PE 內部運行的語句事件監視器所收集的數據。可以從 Application Summary 面板運行 SQL 活動跟蹤,這樣將只跟蹤一個特定的應用程序,也可以將 SQL 活動跟蹤 作為 PWH 中的一個過程來運行,這樣可以跟蹤一個數據庫的所有應用程序或篩選出來的某些應用程序。SQL 活動跟蹤 可以預先排定,也可以隨需運行。當運行 SQL 活動跟蹤 時,DB2 PE 將創建一個語句事件監視器,令其依用戶所設置的時間運行,然後終止並將事件跟蹤數據從平面文件加載到 PWH 表中。根據請求類型,它也可以生成報告。
包含 SQL 活動跟蹤數據的 PWH 數據表
SQL 活動跟蹤數據加載到下列數據表中:
PWH.EVM_HEADER 針對事件監視器、數據庫和實例信息
PWH.EVM_CONNECTION_HEADER 針對各應用程序的連接信息
PWH.EVM_STMT_IDENTIFIER 針對語句信息,如包、 創建者或游標
PWH.EVM_STMT_TEXTS 針對語句文本數據
PWH.EVM_STMT_SUMMARY 針對摘要信息,如准備、警告、錯誤或執行
PWH.EVM_STMT_OperaTIONS 針對語句操作
使用 Performance Warehouse 過程和創建報告
過程用於收集報告數據(CRD)、將這些數據加載到 PWH 表中和創建報告。過程最多由三步(CRD、加載、報告)組成。在執行過程時並非所有步驟都有必要執行。例如,若想創建數據庫活動報告,並且因為數據已經從短期歷史表遷移到 PWH 表中,所以只執行報告步驟。
過程被組織在過程組中。現有的過程組 Public 中包含了過程模板,用戶可以隨需或按計劃將其復制到自己的過程組中,並進行配置和執行。圖 2 所示為 Performance Warehouse 過程屏幕。在該樹中可以看到 Public 組中的過程模板列表和 pedemo 組中所復制的過程列表。SQL 活動摘要報告 過程由三步(CRD、加載、報告)組成,各步可以單獨配置。
圖 2. Performance Warehouse 過程
對於創建緩沖池和數據庫活動報告的過程來說,只有報告步驟可用。若要配置報告步驟,請指定下列參數:
數據庫名
過濾條件,如緩沖池名、表空間名、表名
報告時間間隔
對於 DPF 環境:分區編號或 global,這意味著數據在所有分區上進行匯總。
對於創建 SQL 活動報告的過程來說,這三個步驟都是可用的。若要配置這些步驟,請指定下列參數:
數據庫名
過濾條件,如應用程序標識、應用程序名稱或授權標識
事件監視器運行耗費的時間
事件監視器文件的最大文件長度
對於 DPF 環境:分區編號
以下幾節內容詳細描述了這些報告:
數據庫活動報告
緩沖池活動報告
SQL 活動報告
數據庫活動報告
數據庫活動報告中包含了 DB2 數據庫快照 API 所提供的監視器元素,但它們是隨著時間的推移逐漸收集並匯總的,因此可以查看系統整體的長期行為。這些類型的報告對於趨勢分析和未來的容量計劃非常重要。
數據庫活動報告對於在測試環境中記錄新的或變更的應用程序很有用。例如,可以在一系列測試周期內收集性能數據,保存每一周期的數據,並在以後對這些數據進行比較。可以將測試結果與後來的生產結果進行對比,通過這種方式來驗證所作的預測並針對將來作出改進。若在所使用的嚴格測試過程中可以在每一測試開始前將環境重置回“零狀態”,則 PWH 數據在驗證某一測試的重復結果中可能非常有價值。
數據庫活動報告由報告塊 組成,每一塊報告一組不同的監視器元素。數據庫活動報告有 19 個報告塊:
Configuration
OvervIEw
SQL statistics
Row statistics
Sorts
Hash joins
Internal DB Statistics / Counts - Logging
Internal DB Statistics / Counts - Locking
Internal DB Statistics / Counts - Catalog Cache
Internal DB Statistics / Counts - Package Cache
Internal DB Statistics / Counts - Shared Workspace
Internal DB Statistics / Counts - Private Workspace
Bufferpools / IO Statistics - Non-bufferred I/O Activity
Bufferpools / IO Statistics - Data section
Bufferpools / IO Statistics - Index section
Bufferpools / IO Statistics - Times
Bufferpools / IO Statistics - Extended Storage Section
Bufferpools / IO Statistics - Page Cleaner Section
Applications
圖 3 所示為某示例數據庫活動報告的 OvervIEw 和 SQL statisics 報告塊。
圖 3. 某示例數據庫活動報告的一部分
緩沖池活動報告
緩沖池報告的布局和格式類似於上節所述的數據庫活動報告,每一部分信息都存放在報告塊中,其中包含了特定元素組的匯總快照數據。緩沖池報告塊有:
Buffer pool
Tables pace
Table
SQL 活動報告
SQL 活動報告包含 DB2 語句事件監視器所捕獲的關於運行在數據庫上的應用程序的信息。SQL 活動跟蹤報告 以應用程序執行 SQL 活動的順序列出 SQL 活動。SQL 活動摘要報告 包含每個應用程序的每個語句的摘要信息:
Total number of executions
Total execution time
Total sort time
Number of warnings and errors
Total number of rows read from table
Total number of rows changed in table
Total preparation time
等等
該摘要信息使用戶能夠確定應用程序中的關鍵 SQL 語句。
若應用程序執行靜態 SQL 語句,則 SQL 活動報告同樣顯示它們,以及摘要或操作信息。
圖 4 所示為某示例 SQL 活動摘要報告 的一部分。第一個表列出了每條語句的摘要信息。利用報告中的超鏈接,可以鑽取每條語句的細節,包括每條執行語句的語句文本和操作信息。
圖 4. SQL 活動摘要報告的一部分
使用 Performance Warehouse 查詢
查詢用於分析 PWH 中數據的不同方面。這些查詢是標准的 SQL select 語句,它們基於 PWH 表執行。可以使用預定義的查詢或使用標准的 SQL 自己創建查詢。DB2 PE 在查詢生成器中提供了一個列輔助特性,因此用戶可以從一個列表中選擇表和列。若用戶並不是對所有的 PWH 表都非常熟悉,則該特性便會派上用場,但這並不是說必須使用該特性。如果使用 SQL 比較順手,則可手工編寫查詢。PWH 查詢的一個非常精妙的特性是將變量插入查詢的能力,用戶可以在運行時對變量進行替代。
與過程類似,查詢是在查詢組中組織的。現有查詢組 Public 包含所有預定義的查詢。可以直接從該 Public 組執行查詢,但若想在執行前更改某一查詢,則必須將該查詢復制到自己的查詢組中,然後再更改和執行它。用戶自己的查詢也是在自己的查詢組中定義的。
圖 5 給出了預定義的查詢列表。預定義的查詢分為三個不同的組:
問題查詢:這些查詢只返回超過重要性能計數器阈值的行,例如緩沖池命中率不到 90% 的行。名稱以 DB2 PM.Buffer pool、DB2 PM.DATABASE、DB2 PM.TABLE space 打頭的預定義查詢屬於這一組。
報告查詢:這些查詢返回包含在 PWH 表中的不同方面的數據。可以使用這些查詢定義自己的報告。名稱以 DB2 PM.Report 打頭的預定義查詢屬於這一組。
高命中率查詢:這些查詢對已經存儲了 DB2 語句事件監視器所收集的數據的 PWH 表進行操作。它們返回高命中率 SQL 語句,例如耗用排序時間最多的語句。名稱以 DB2 PM.SQL Activity 打頭的預定義查詢屬於這一組。
圖 5. Performance Warehouse 查詢
圖 6 給出了所執行的預定義問題查詢的示例查詢結果。該查詢只返回命中率低於 90% 的緩沖池。此外,它還返回命中率低時的時間間隔。可以在浏覽器中打開該查詢結果,也可以將它們保存起來供以後分析使用。
圖 6. Performance Warehouse 查詢結果
下面幾節將介紹可能比較有用的一些查詢。它們不屬於預定義查詢。它們舉例說明了可以從 PWH 表獲得的不同類型的信息。
說明哪些表空間使用哪些緩沖池
隨時間的推移將數據庫配置值與監視器元素關聯起來
識別日志使用趨勢
比較 AVG_APPLS 和緩沖池命中率
說明哪些表空間使用哪些緩沖池
下面的查詢 清單 1 說明了哪些表空間使用哪些緩沖池。可以從課程的系統編目中得到該清單,但若用在這兩個表(例如緩沖池命中率)中同樣可用的快照數據擴展該查詢,則可全面了解表空間和緩沖池中的活動。結果可能會將某一表空間分配給不同的緩沖池。
清單 1. 說明哪些表空間使用哪些緩沖池
SELECT DISTINCT
T1.DB_NAME
, T1.BP_NAME
, T2.TABLESPACE_NAME
FROM PWH.BUFFERPOOL T1
, PWH.TABLESPACE T2
WHERE T1.BUFFERPOOL_ID = T2.TABLESPACE_CUR_POOL_ID
AND T1.DB_NAME = T2.DB_NAME
AND T1.MEMBER_ID = T2.MEMBER_ID
AND T1.INTERVAL_TO = T2.INTERVAL_TO
AND T1.INTERVAL_FROM = T2.INTERVAL_FROM
隨時間的推移將 DB CFG 值與監視器元素關聯起來
下面的查詢 清單 2 說明如何將特定的監視器元素(在本例中為與排序相關的元素)與相應的數據庫或數據庫管理器配置值(在本例中為 SORTHEAP )關聯在一起。該方法對於評估趨勢和了解更改某一配置值後的結果非常有價值。請注意,PWH 存儲 DB 和 DBM CFG 值,但某值發生變化時只插入一行。這些表都將配置值作為表中的一列。PWH.DBCFG 和 PWH.DBMCFG 表中的 INTERVAL_TO 列中包含的時間與其他 PWH 表中的 INTERVAL_TO 列包含的時間不同。這就是我們在下面的例子中使用附加謂詞的原因。在比較配置值與統計值的查詢中始終都應包含該謂詞。
清單 2. 從 db 統計顯示排序行為以及 DB CFG SORTHEAP
SELECT
T1.INTERVAL_FROM AS DB_INTERVAL_FROM
, T1.INTERVAL_TO as DB_INTERVAL_TO
, T2.INTERVAL_TO as DBCFG_INTERVAL_TO
, T1.DB_NAME
, T1.TOTAL_SORT_TIME
, T1.SORT_OVERFLOWS
, T1.ACTIVE_SORTS
, T2.SORTHEAP as DBCFG_SORTHEAP
FROM PWH.DBase T1
LEFT OUTER JOIN PWH.DBCFG T2
ON
T2.INTERVAL_TO < T1.INTERVAL_TO and T2.INTERVAL_TO >= T1.INTERVAL_FROM
AND T1.DB_NAME = T2.DB_NAME
AND T1.MEMBER_ID = T2.MEMBER_ID
WHERE
T2.DB_NAME = ':db_name'
AND DATE(T1.INTERVAL_TO) BETWEEN ':from_date' AND ':to_date'
ORDER BY T1.DB_NAME