Azure NetApp Files 單一磁碟區上的 Oracle 資料庫效能
本文討論以下有關雲端 Oracle 的主題。 這些可能是資料庫管理員、雲端架構設計師或儲存體架構設計人員特別感興趣的主題:
- 當您驅動線上交易處理 (OLTP) 工作負載 (大部分是隨機 I/O) 或線上分析處理 (OLAP) 工作負載 (大部分是循序 I/O) 時,效能看起來會像什麼?
- 一般 Linux 核心 NFS (kNFS) 用戶端與 Oracle 自己的 Direct NFS 用戶端之間的效能有何差異?
- 就頻寬而言,單一 Azure NetApp Files 磁碟區的效能是否足夠?
重要
如需 Oracle dNFS 的正確和最佳部署,請遵循此處所述的修補指導方針。
測試環境和元件
下圖說明用於測試的環境。 為了一致性和簡單起見,會使用 Ansible 劇本來部署測試床的所有元素。
虛擬機器組態
測試會針對虛擬機器使用下列設定:
- 作業系統:
RedHat Enterprise Linux 7.8 (wle-ora01) - 執行個體類型:
測試使用了兩個模型:D32s_v3 和 D64s_v3 - 網路介面計數:
一個 (1) 放在子網路 3 - 磁碟:
Oracle 二進位檔和 OS 放置在單一進階磁碟中
Azure NetApp Files 設定
測試使用下列 Azure NetApp Files 設定:
- 容量集區大小:
已設定各種集區大小:4 TiB、8 TiB、16 TiB、32 TiB - 服務層級:
Ultra (每 1 TiB 的配置磁碟區容量使用每秒 128 MiB 頻寬) - 磁碟區:
已評估一次和兩次磁碟區測試
工作負載產生器
測試使用工作負載產生的 SLOB 2.5.4.2。 SLOB (Silly Little Oracle Benchmark) 是 Oracle 領域眾所周知的工作負載產生器,其設計目的是利用 SGA 緩衝的實體 I/O 工作負載來加壓和測試 I/O 子系統。
SLOB 2.5.4.2 不支援可插式資料庫 (PDB)。 因此,已將變更新增至 setup.sh
和 runit.sh
指令碼,以新增 PDB 支援。
下列各節將說明測試所使用的 SLOB 變數。
工作負載 80% 選取,20% 更新 | 隨機 I/O – slob.conf
變數
UPDATE_PCT=20
SCAN_PCT=0
RUN_TIME=600
WORK_LOOP=0
SCALE=75G
SCAN_TABLE_SZ=50G
WORK_UNIT=64
REDO_STRESS=LITE
LOAD_PARALLEL_DEGREE=12
工作負載 100% 選取 | 循序 I/O – slob.conf
變數
UPDATE_PCT=0
SCAN_PCT=100
RUN_TIME=600
WORK_LOOP=0
SCALE=75G
SCAN_TABLE_SZ=50G
WORK_UNIT=64
REDO_STRESS=LITE
LOAD_PARALLEL_DEGREE=12
Database
用於測試的 Oracle 版本是 Oracle Database Enterprise Edition 19.3.0.0。
Oracle 參數如下所示:
sga_max_size
: 4096Msga_target
: 4096db_writer_processes
: 12awr_pdb_autoflush_enabled
: truefilesystemio_options
: SETALLlog_buffer
: 134217728
已為 SLOB 資料庫建立 PDB。
下圖顯示已建立名為 PERFIO 的資料表空間,其大小為 600 GB (20 個資料檔案,每個檔案 30 GB),用於裝載四個 SLOB 使用者結構描述。 每個使用者結構描述的大小為 125 GB。
效能計量
目標是報告應用程式所經歷的 IO 效能。 因此,本文中的所有圖表都會使用 Oracle 資料庫透過其自動工作負載存放庫 (AWR) 報告所回報的計量。 圖表中使用的計量如下所示:
- 平均 IO 要求數/秒
對應至負載設定檔區段中平均讀取 IO 要求數/秒和平均寫入 IO 要求數/秒的總和 - 平均 IO MB/秒
對應至負載設定檔區段中平均讀取 IO MB/秒和平均寫入 IO MB/秒的總和 - 讀取延遲的平均值
對應至 Oracle Wait 事件「db 檔案循序讀取」的平均延遲時間,以微秒為單位 - 執行緒數目/結構描述
對應至每個使用者結構描述的 SLOB 執行緒數目
效能測量結果
本節說明效能測量的結果。
Linux kNFS 用戶端與Oracle Direct NFS
此案例執行的是 Azure VM Standard_D32s_v3 (Intel E5-2673 v4 @ 2.30 GHz)。 工作負載為 75% 選取 和 25% 更新,大部分是隨機 I/O,且資料庫緩衝區叫用率約 7.5%。
如下圖所示,Oracle DNFS 用戶端傳遞的輸送量是一般 Linux kNFS 用戶端輸送量 2.8 倍以上:
下圖顯示讀取作業的延遲曲線。 在此內容中,kNFS 用戶端的瓶頸是在用戶端與 NFS 伺服器 (Azure NetApp Files 磁碟區) 之間建立的單一 NFS TCP 通訊端連線。
因為 DNFS 用戶端可以建立數百個 TCP 通訊端連線,因此利用平行處理原則,就能推送更多 IO 要求數/秒。 如 Azure NetApp Files 設定所述,配置的容量每多一 TiB 就可以讓頻寬增加 128MiB/秒。 DNFS 的最高輸送量為 1 GiB/秒,這是選擇 8-TiB 容量所帶來的限制。 假設有更多容量,則會驅動更多輸送量。
輸送量只是其中一個考量。 另一個考量是延遲,會對使用者體驗造成主要影響。 如下圖所示,相較於 DNFS,預期 kNFS 的延遲時間增加速度更快。
長條圖提供資料庫延遲時間的絕佳見解。 下圖從記錄的「db 檔案循序讀取」觀點提供完整的檢視,同時在最高並行資料點上使用 DNFS (32 個執行緒/結構描述)。 如下圖所示,所有讀取作業中有 47% 在 512 微秒到 1000 微秒之間完成,而 90% 的讀取作業在延遲低於 2 毫秒時處理。
總之,若要提升 NFS 上 Oracle 資料庫執行個體的效能,顯然 DNFS 是必要條件。
單一磁碟區效能限制
本節說明具有隨機 I/O 和循序 I/O 的單一磁碟區效能限制。
隨機 I/O
DNFS 可以取用的頻寬遠比 8 TB Azure NetApp Files 效能配額所提供的還多。 藉由將 Azure NetApp Files 磁碟區容量增加至 16 TiB (這是瞬間變更),磁碟區頻寬數量會從 1024 MiB/秒增加 2 倍到 2048 MiB/秒。
下圖顯示 80% 選取和 20% 更新工作負載的設定,以及資料庫緩衝區叫用率為 8%。 SLOB 可以將單一磁碟區推動至每秒 200,000 個 NFS I/O 要求。 考慮到每個作業都是 8 KiB 大小,受測系統可以傳遞每秒約 200,000 個 IO 要求或每秒 1600 MiB。
下列讀取延遲曲線圖顯示,當讀取輸送量增加時,延遲會在 1 毫秒線以下緩慢增加,並在平均讀取延遲約 1.3 毫秒、每秒平均讀取 IO 要求數約 165,000 處觸及曲線折角。 這個值是一個不可思議的延遲值,Azure 雲端幾乎沒有任何其他技術可以達成這樣的 I/O 率。
循序 I/O
如下圖所示,並非所有 I/O 在本質上都是隨機性,請考慮 RMAN 備份或完整資料表掃描,舉例來說,當工作負載需要頻寬越多越好時。 使用先前所述的相同設定,但磁碟區大小調整為 32 TiB,下圖會顯示單一 Oracle DB 執行個體可以向上驅動每秒 3,900 MB 的輸送量,非常接近 Azure NetApp Files 磁碟區的效能配額 32 TB (128 MB/秒 * 32 = 4096 MB/秒)。
總而言之,Azure NetApp Files 可協助您將 Oracle 資料庫移轉到雲端。 它會在資料庫需要時提供效能。 您可以隨時以動態且非中斷方式調整磁碟區配額的大小。