如何調優數據庫注冊變量DB2_USE_FAST_PREALLOCATION

盡管 DB2 pureScale 以高可用性、無限擴展性和對應用程序的透明性而著稱,性能對于它來說同樣重要。本文是 DB2 pureScale 在 Power 平臺上的性能調優系列的又一個專題,主要關于如何調優數據庫注冊變量 DB2_USE_FAST_PREALLOCATION。

本文首先介紹了文件系統中和性能相關的很多方面,主要包括快速預分配和緩存,然后基于我們在實際試驗中遇到的性能問題,歸納出在 db2 purescale 環境中調優注冊變量 db2_use_fast_preallocation 的最佳實踐。

一方面,DB2 pureScale 基于共享數據 (share everything) 的架構設計,要求運行在 IBM 的 GPFS(General Parallel File System)文件系統之上。同 JFS2(Enhanced Journaled File System) 文件系統一樣,GPFS 也支持快速預分配功能。快速預分配功能可以顯著提高數據庫中諸如數據庫恢復、表空間創建、表空間大小修改等操作的性能。另一方面,DB2 pureScale 要求數據庫中所有的表空間都是自動存儲類型的表空間。對于自動存儲表空間,容器的創建和空間的分配工作都由數據庫管理器來按需進行。

默認情況下,DB2 會在支持 FAST_PREALLOCATION 特性的文件系統上開啟該功能,來提高涉及修改表空間大小的操作的性能。我們在測試中發現,對于運行在 GPFS 上的 DB2 pureScale,開啟快速預分配功能可以顯著提高數據庫恢復的性能,但對于運行時的性能卻有很大影響。本文將詳細闡述我們遇到的問題,分析產生問題的原因,最后給出關于該注冊變量設置的最佳實踐。

文件系統的快速預分配功能

在闡述我們遇到的問題之前,需要先了解一下文件系統的快速預分配功能。很多文件系統,如:JFS2、GPFS,都支持快速預分配功能。文件系統的快速預分配功能指的是:允許在不進行實際空間分配的情況下來改變一個文件的大小,實際空間的分配會在首次對對應新空間進行寫的時候進行。也就是說,應用程序可以讓文件系統承諾預留一定的空間給它,此時文件系統只需給應用程序一個承諾,而無需進行實際空間的分配。這樣,文件大小的改變就會很快完成,而具體的空間分配工作會在后續進行實際寫的時候進行。這種特性對于那些頻繁涉及文件大小操作的應用有很大的好處。

對應到 DB2,默認情況下,DB2 會在支持快速預分配功能的文件系統上啟用該功能,來提高涉及文件大小更改的數據庫操作的性能,如數據庫恢復、表空間創建、表空間大小修改。例如,當 DB2 需要創建一個新的表空間時,文件系統不需要立即進行實際空間的分配,實際空間會在 DB2 對對應空間首次插入數據的時候進行分配。而這種運行時實際空間分配帶來的開銷理論上也是可以忽略的。

文件系統的緩存功能

默認情況下,操作系統會對從磁盤讀取或者要寫入磁盤的數據進行緩存。這就是文件系統緩存的作用。典型的涉及物理磁盤操作的讀過程是:先從磁盤上讀取數據,把它放到文件系統的緩存中,然后再把數據從文件系統的緩存拷貝到應用程序的緩存中,這樣應用程序才能使用這些數據。同樣涉及物理磁盤操作的寫過程是:首先把數據從應用程序緩存拷貝到文件系統緩存,然后再從文件系統緩存寫到物理磁盤上。可見,文件系統的緩存位于應用程序緩存和磁盤之間,是應用程序和磁盤之間進行數據讀寫操作的橋梁。

圖 1. IO 操作流程
如何調優數據庫注冊變量DB2_USE_FAST_PREALLOCATION

對于那些本身沒有緩存功能的應用程序,使用文件系統級別的緩存可以帶來很大的性能提高。通過文件系統緩存的預讀(read-ahead)和延遲寫 (write-behind) 功能,應用程序可以節省很多花費在 IO 等待上時間,從而帶來性能的極大提高。而對于像數據庫這樣的應用,它本身已經維護了自己的緩存池(bufferpool),如果在文件系統級別也啟用緩存的話,將形成雙重緩存的局面,會帶來一些額外的 CPU 開銷。所以為了避免文件系統和數據庫系統重復緩存帶來的額外開銷,我們一般在數據庫場景中會關閉文件系統的緩存功能。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享