了解一個使用 DB2® 9 XML、IBM POWER5+、AIX 5.3 和 TotalStorage DS8100 的模擬證券經紀事務處理環境的性能和可伸縮性。這個場景使用了 FIXML 模式,這是一個金融業標準。
簡介
既然 DB2 9 發布了,現在是時候對它的最新特性之一 —— pureXML® 進行測試驅動了。為此,建立了一個模擬的經紀業務環境。這個環境具有以下特征:
請記住,XML 應用程序大致分成以下兩類:
另外,涉及 XML 的數據庫應用程序也是各種各樣的,包括以下情況:
本文在一個基于 XML 的事務處理場景中進行性能度量,這個場景模擬一個面向數據的金融應用程序。測試設備包括最新的 POWER5 服務器(p5 560Q)以及 AIX 5.3 和 TotalStorage DS8100 磁盤系統。
DB2 9 和 XML
DB2 9 中新的 XML 支持包括純 XML 存儲、XML 索引、XQuery、SQL/XML 和高級的 XML 模式處理。“純” 意味著以標注上類型的樹的形式存儲和處理 XML 文檔,這與商業關系數據庫中以前的任何技術都不同。尤其是,pureXML 與將 XML 存儲為大對象(BLOB 或 CLOB)或者將 XML 分解到關系表中的技術有顯著差異。更多的信息請參考以前的文章 “What's new in DB2 Viper” (developerWorks,2006 年 2 月)和 “Native XML Support in DB2 Universal Database”。
![]() ![]() |
![]()
|
測試場景:在線經紀業務
這個測試場景對在線經紀業務進行建模。我們曾經幫助金融公司采用 XML。這些經歷幫助我們理解了他們的數據和處理特征。這個場景有意地進行了簡化,但是在文檔、事務和 XML 模式方面仍然具有代表性。
這個場景中主要的邏輯數據實體如下(見圖 1):
文檔處理和大小因文檔類型而異:
使用 Toxgene 數據生成器為這三個模式生成實例文檔。關于 Toxgene 數據生成器的更多信息,請參考 ToXgene - the ToX XML Data Generator。
![]() ![]() |
![]()
|
測試設備和配置
測試在以下設備上運行:
AIX 配置
在安裝 DB2 期間,會自動執行所有必需的操作系統參數調整。設置了以下的虛擬內存管理參數,從而更好地控制文件系統緩存使用的內存量:
|
另外,為了防止在數據裝載期間試圖緩存輸入文件,在掛裝命令中使用 -o cio
選項,用 JFS2 文件系統的并發 I/O 特性掛裝包含原始 XML 輸入文件的文件系統。
存儲配置
使用 TotalStorage DS8100 的標準默認配置。DS8100 在內部基本上是一個 POWER5 eServer p5 570。與之前的 ESS 使用 SSA 循環不同,DS8100 磁盤互連是一個 Switched Fiber Channel Arbitrated Loop(FC-AL),可以提供更快的數據訪問和高可用性。DS8100 配置了 128 個磁盤,在這些磁盤上創建了 16 個卷。在其中,8 個卷(64 個磁盤)分配給這個 LPAR。4 個卷使用 6+Parity+Spare 設置為 388GB。另外 4 個卷使用 7+Parity 設置為 452GB。創建了一個跨越所有 8 個卷的卷組(VG)。在這個卷組上定義了 DB2 數據庫的所有存儲組件,包括表空間、日志和備份。表 1 總結了配置。
方面 | 配置 |
---|---|
處理器 | 兩個處理器,每個附帶 pSeries POWER5 1.9 GHz 兩路 CEC |
內存(緩存) | 32GB |
磁盤互連 | Switched FC-AL |
磁盤數量 | 128 個(只有 64 個由主機 LPAR 使用) |
磁盤大小/速度 | 73 GB,15000 RPM |
DB2 配置
DB2 9 包含許多新特性,包括新的自治自調整功能。在這個測試中,利用了其中幾種自治功能,包括:
因為啟動了 DB2 的自調整內存管理器(STMM),它會連續調整一系列 DB2 配置參數的設置。在測試運行期間 STMM 管理和調整的一些關鍵的 DB2 配置參數見表 2。要意識到的重要情況是,STMM 會根據正在運行的工作負載類型(比如純插入、純查詢或混合型工作負載)自主地修改這些值。
DB 配置參數名 | 初始設置 |
---|---|
SELF_TUNING_MEM | ON(默認值) |
DATABASE_MEMORY | AUTOMATIC(默認值) |
SORTHEAP | 156 |
SHEAPTHRES_SHR | 10000 |
LOCKLIST | 53000 |
MAXLOCKS | 80 |
PCKCACHESZ | 27000 |
緩沖池名 | 初始設置 |
IBMDEFAULTBP | 1100000 |
CATBP | 4000 |
TEMPBP | 1000 |
DBA 只需要執行很少的數據庫配置任務,見表 3。
方面 | 配置/設置 |
---|---|
數據庫 | Unicode。所有表空間采用自動存儲。DB2 日志在單獨的條帶上 |
內存 | 為所有測試啟用 STMM |
頁面大小 | 16K(表空間和緩沖池) |
表和索引 | 3 個表:CustAcc、order、security。24 個 XML 索引:10 個在 CustAcc 上,5 個在 order 上,9 個在 security 上 |
表空間 | 一共 6 個表空間:3 個表各有一個表空間,每個表的索引各有一個表空間。對所有表空間禁用文件系統緩存 |
緩沖池 | 一共 3 個緩沖池:默認緩沖池、用于編目表空間的緩沖池和用于臨時表空間的緩沖池 |
![]() ![]() |
![]()
|
工作負載
設計、執行并度量了三種 XML 工作負載:
這些工作負載都具有很高的并發性。工作負載由一個 Java 驅動程序執行,這個程序產生一個到 n 個并發線程。每個線程模擬一個用戶,該用戶連接到數據庫并提交一個事務流,而不考慮次數。每個事務流是以加權方式從一系列事務模板中隨機選擇的一系列事務。每個事務被分配一個權重,這個權重決定這個事務在工作負載中的百分比。在運行時,事務中的參數標志替換為具體的值,這些值是從可配置的隨機值分布和輸入列表中提取的。
插入工作負載:只寫
插入工作負載用大約 100GB 的原始 XML 數據填充數據庫:
首先,83 個并發用戶插入所有證券。然后,分階段插入 CustAcc 和訂單文檔,從而檢驗插入性能是可伸縮的。在每個階段使用 100 個并發用戶,見表 4。
階段 | 數據庫中的 CustAcc 文檔數量 | 數據庫中的訂單文檔數量 |
---|---|---|
1 | 100,000 | 500,000 |
2.1 | 200,000 | 1,000,000 |
2.2 | 300,000 | 1,500,000 |
2.3 | 400,000 | 2,000,000 |
2.4 | 500,000 | 2,500,000 |
2.5 | 600,000 | 3,000,000 |
3.1 | 1,000,000 | 5,000,000 |
3.2 | 1,500,000 | 7,500,000 |
3.3 | 2,000,000 | 10,000,000 |
4.1 | 2,500,000 | 12,500,000 |
4.2 | 3,000,000 | 15,000,000 |
4.3 | 3,500,000 | 17,500,000 |
4.4 | 4,000,000 | 20,000,000 |
5.1 | 4,500,000 | 22,500,000 |
5.2 | 5,000,000 | 25,000,000 |
5.3 | 5,500,000 | 27,500,000 |
5.4 | 6,000,000 | 30,000,000 |
查詢工作負載:只讀
在插入負載填充數據庫之后,對數據庫執行一個只讀的工作負載。這個工作負載由 7 個 XML 查詢組成,使用 25、50、75、100、125 和 150 個并發用戶以不同的并發度執行。測試的時間長度是這 6 個測試各運行一個小時。
7 個查詢都具有以下特征:
表 5 顯示這 7 個查詢的特征差異和它們涉及的表。
Q | 查詢名 | CustAcc | Security | Order | 特征 |
---|---|---|---|---|---|
1 | get_order | - | - | X | 返回完整的訂單文檔,但是沒有 FIXML 根元素。 |
2 | get_security | - | X | - | 返回完整的證券文檔。 |
3 | customer_profile | X | - | - | 提取 7 個客戶元素來構造概況文檔。 |
4 | search_securities | - | X | - | 根據 4 個謂詞從一些證券中提取元素。 |
5 | account_summary | X | - | - | 構造一個帳號說明。 |
6 | get_security_price | - | X | - | 提取一種證券的價格。 |
7 | customer_max_order | X | - | X | 聯結 CustAcc 和訂單,尋找一位客戶的最大訂單。 |
混合工作負載:讀/寫
與只讀工作負載相似,混合工作負載針對填充的 600 萬個 CustAcc 文檔和 3000 萬個訂單執行,并使用 25、50、75、100、125 和 150 個并發用戶產生不同的并發度。測試的時間長度是每個測試各運行一個小時。
混合工作負載由以下操作組成:
查詢與上面的只讀工作負載中的查詢完全一樣,下面是定義更新/刪除/插入事務時考慮的情況:
通過考慮這些目標,產生了表 6 所示的事務組合。
# | 名稱 | 類型 | 占總量的百分比 |
---|---|---|---|
1 | get_order | 查詢 | 10 |
2 | get_security | 查詢 | 10 |
3 | customer_profile | 查詢 | 10 |
4 | search_securities | 查詢 | 10 |
5 | account_summary | 查詢 | 10 |
6 | get_security_price | 查詢 | 10 |
7 | customer_max_order | 查詢 | 10 |
8 | upd_custacc | 更新 | 3 |
9 | upd_security | 更新 | 3 |
10 | del_custacc | 刪除 | 2 |
11 | del_order | 刪除 | 10 |
12 | insert_custacc | 插入 | 2 |
13 | Insert_order | 插入 | 10 |
更新事務首先根據一個 XQuery 謂詞讀取一個特定文檔,然后使用它更新數據庫中這個文檔的原副本。在實際情況下,在讀取和更新步驟之間會更新文檔,但是這與本文的目的沒什么關系,因此為了簡化省略了這個步驟。
在執行插入時不進行 XML 模式檢驗。
更新和刪除操作所針對的文檔是在數據庫中隨機選擇的。每個新插入的訂單和 CustAcc 文檔馬上可以被后續的事務更新或刪除。
![]() ![]() |
![]()
|
結果
數據庫設置和所有工作負載不間斷地連續執行。23 小時的不間斷系統測試的結果見表 7。
任務 | 花費的時間(分鐘) | 解釋/說明 |
---|---|---|
創建數據庫和更新數據庫配置 | 1 | - |
插入工作負載 | 160 | 所有階段的總時間 |
在表和索引上運行 stats | 340 | 時間的分布如下: 22 分 - 證券 2 小時 45 分 - CustAcc 2 小時 54 分 - 訂單 |
數據庫備份 | 23 | - |
查詢和混合工作負載 | 825 | 這兩個工作負載都使用 25、50、75、100、125 和 150 個用戶運行 |
數據庫恢復 | 17.5 | - |
其他 | ~15 | 其他各種任務 |
總時間 | ~1380 | 總運行時間為 23 小時 |
插入工作負載的結果
插入 36,020,833 個文檔花費的總時間大約是 160 分鐘,產生的平均吞吐量是每秒 3770 個插入。吞吐量隨文檔的大小而變化:
插入這兩種文檔的數據量速度都是大約每小時 30GB。圖 2 顯示隨著訂單數量增長到 300 萬個文檔,訂單插入的速度幾乎保持不變。
查詢工作負載的結果
查詢工作負載的性能隨著用戶數量的增加和更好地利用 CPU 而增加。正如預期的,隨著 CPU 利用率接近 100%,吞吐量曲線逐漸變平。最好的吞吐量出現在有 150 個用戶的情況下,在 CPU 利用率為 96% 時達到每秒 5480 個查詢,見圖 3。
將用戶數量增加到 175 并不會使吞吐量顯著提高,因為機器已經達到滿負荷了。
混合工作負載的結果
混合工作負載最好的性能也出現在有 150 個并發用戶時,見圖 4。吞吐量是每秒 1980 個事務。正如預期的,混合工作負載的吞吐量比純查詢和純插入工作負載低。
![]() ![]() |
![]()
|
結束語
這次性能研究的目的是,在使用最新的 IBM 服務器硬件、存儲、AIX 操作系統和 DB2 9 軟件的情況下,演示 XML 工作負載的操作性能特征。所有測試都使用 DB2 新的 STMM 和自動存儲特性。
我們覺得,對于包含基于消息的事務處理的 XML 應用程序以及處理大量小 XML 文檔的 Web 服務應用程序,這個工作負載場景是有代表性的。選擇金融業是因為我們在這方面有經驗,而且它采用了一種成熟的標準化的 XML 模式 —— FIXML。
下面對測試的情況做一下總結:
![]() ![]() |
![]()
|
致謝
作者感謝 Sunil Kamath 和 Punit Shah 對這個項目和本文的貢獻。