Oracle 歸檔日志性能優(yōu)化指南
歸檔日志性能是 Oracle 數據庫高并發(fā)場景下最容易被忽視但影響最嚴重的性能瓶頸之一。歸檔慢會直接導致日志切換阻塞,所有 DML 操作暫停,數據庫完全掛起,在電商大促、銀行交易高峰期等場景下會造成災難性后果。
1、基本概念
1.1、歸檔日志性能優(yōu)化
歸檔日志性能優(yōu)化是通過優(yōu)化存儲 IO、日志配置、進程參數和網絡傳輸,讓歸檔進程(ARCn)能夠以最快的速度完成在線重做日志的歸檔,確保 LGWR 進程永遠不會因為等待歸檔而阻塞。
1.2、性能問題的典型表現
- 出現大量
log file switch (archiving needed)等待事件(最致命) - 執(zhí)行
ALTER SYSTEM SWITCH LOGFILE;命令卡住 - 數據庫 TPS 急劇下降,所有寫操作變慢
- 告警日志中出現
ARCn: Archival not started或Archiver stuck錯誤 - 在線重做日志切換頻率異常(如每分鐘切換多次)
1.3、性能瓶頸分布
歸檔性能瓶頸按出現頻率從高到低排序:
- 存儲 IO 瓶頸(70%):歸檔存儲讀寫速度不足
- 日志配置不合理(15%):日志文件太小、日志組太少
- 歸檔進程不足(10%):ARCn 進程數量不夠
- 網絡瓶頸(5%):遠程歸檔或 Data Guard 環(huán)境下網絡帶寬不足
2、存儲層優(yōu)化
歸檔是純 IO 密集型操作,存儲性能直接決定了歸檔速度。
2.1、存儲分離原則
歸檔日志必須存儲在獨立于數據文件和在線重做日志的專用存儲上:
- 數據文件:隨機讀寫為主
- 在線重做日志:順序寫為主
- 歸檔日志:順序寫為主
如果三者共享同一存儲,會產生嚴重的 IO 競爭,導致所有組件性能下降。
2.2、ASM 磁盤組優(yōu)化
2.2.1、創(chuàng)建專用歸檔磁盤組
-- 創(chuàng)建專用歸檔磁盤組,使用NORMAL冗余,AU_SIZE=4M(適合大文件順序寫) CREATE DISKGROUP ARCH NORMAL REDUNDANCY FAILGROUP CONTROLLER1 DISK '/dev/asm-arch1', '/dev/asm-arch2' FAILGROUP CONTROLLER2 DISK '/dev/asm-arch3', '/dev/asm-arch4' ATTRIBUTE 'compatible.asm'='19.0.0.0', 'compatible.rdbms'='19.0.0.0', 'au_size'='4M', 'disk_repair_time'='4.5h';
2.2.2、ASM 優(yōu)化要點
- AU_SIZE 設置為 4M:歸檔日志是大文件,大 AU_SIZE 可以減少元數據開銷,提高順序寫性能
- 使用 NORMAL 冗余:平衡性能和可靠性,避免使用 HIGH 冗余(寫性能下降 50%)
- 使用 SSD/NVMe 存儲:歸檔順序寫性能比機械硬盤高 5-10 倍
- 在線動態(tài)擴容:ASM 支持在線添加磁盤,無需停機
- 在線添加磁盤,重平衡并行度設為8
- ALTER DISKGROUP ARCH ADD DISK '/dev/asm-arch5' REBALANCE POWER 8 WAIT;
2.2.3、文件系統優(yōu)化
如果使用文件系統存儲歸檔日志:
啟用異步IO和直接IO(大幅提升文件系統IO性能):
ALTER SYSTEM SET filesystemio_options=SETALL SCOPE=SPFILE;
啟用磁盤異步IO(默認已啟用):
ALTER SYSTEM SET disk_asynch_io=TRUE SCOPE=SPFILE;
2.2.4、存儲性能測試
測試歸檔目錄寫入速度(1GB文件,直接IO):
dd if=/dev/zero of=/archive/testfile bs=1M count=1024 conv=fdatasync oflag=direct
監(jiān)控存儲IO性能:
iostat -dxm 2 | grep -E 'Device|sd|nvme'
3、在線重做日志優(yōu)化
在線重做日志的配置直接影響日志切換頻率和歸檔壓力。
3.1、合理設置日志文件大小
日志文件大小原則:日志切換頻率控制在每 15-30 分鐘一次。
| 業(yè)務場景 | 推薦日志文件大小 |
|---|---|
| 低并發(fā)系統 | 1GB |
| 中并發(fā)系統 | 2-4GB |
| 高并發(fā)核心系統 | 8-16GB |
錯誤做法:日志文件太小(如 100MB),導致每分鐘切換多次,歸檔進程無法跟上。
3.2、合理設置日志組數量
日志組數量原則:至少配置 4 組在線重做日志,高并發(fā)系統配置 6-8 組。
-- 添加日志組
ALTER DATABASE ADD LOGFILE GROUP 4 ('+DATA/redo04.log') SIZE 8G;
ALTER DATABASE ADD LOGFILE GROUP 5 ('+DATA/redo05.log') SIZE 8G;
ALTER DATABASE ADD LOGFILE GROUP 6 ('+DATA/redo06.log') SIZE 8G;
-- 刪除過小的日志組
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;3.3、多路復用在線日志
每個日志組至少配置 2 個成員,分別存儲在不同的存儲設備上,防止單點故障:
ALTER DATABASE ADD LOGFILE MEMBER '+ARCH/redo04b.log' TO GROUP 4; ALTER DATABASE ADD LOGFILE MEMBER '+ARCH/redo05b.log' TO GROUP 5; ALTER DATABASE ADD LOGFILE MEMBER '+ARCH/redo06b.log' TO GROUP 6;
4、歸檔進程優(yōu)化
4.1、調整歸檔進程數量
Oracle 會根據負載自動調整歸檔進程數量,但在高并發(fā)場景下,需要手動設置最大值:
-- 查看當前歸檔進程數量 SELECT process, status FROM v$archive_processes; -- 設置最大歸檔進程數為6(生產推薦值,范圍1-30) ALTER SYSTEM SET log_archive_max_processes=6 SCOPE=BOTH;
最佳實踐:
- 單實例環(huán)境:4-6 個 ARCn 進程
- RAC 環(huán)境:每個節(jié)點 4-6 個 ARCn 進程
- Data Guard 環(huán)境:6-8 個 ARCn 進程
注意:歸檔進程不是越多越好,超過存儲 IO 能力后,增加進程反而會導致 IO 競爭加劇,性能下降。
4.2、啟用并行歸檔
并行歸檔單個日志文件,大幅提高歸檔速度:
-- 啟用并行歸檔,每個日志文件使用2個進程并行歸檔 ALTER SYSTEM SET "_parallel_archive_log"=TRUE SCOPE=SPFILE; ALTER SYSTEM SET "_parallel_archive_log_workers"=2 SCOPE=SPFILE;
到此這篇關于Oracle 歸檔日志性能優(yōu)化的文章就介紹到這了,更多相關Oracle 歸檔日志內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Oracle?ORA-00904:標識符無效解決方法(太坑了!!)
最近執(zhí)行sql時oracle報錯ORA-00904:標識符無效,所以這篇文章主要給大家介紹了關于Oracle?ORA-00904:標識符無效解決方法的相關資料,需要的朋友可以參考下2022-10-10
Oracle中監(jiān)控SQL執(zhí)行時間的常用方法
在 Oracle 數據庫中,監(jiān)控 SQL 語句的執(zhí)行時間是性能調優(yōu)和問題排查的關鍵環(huán)節(jié),Oracle 提供了多種機制來捕獲和分析 SQL 的執(zhí)行耗時,以下是 常用且實用的方法,需要的朋友可以參考下2025-12-12
oracle查看執(zhí)行最慢與查詢次數最多的sql語句
這篇文章主要給大家介紹了oracle查看執(zhí)行最慢與查詢次數最多的sql語句,文中給出完整的示例代碼,相信對大家的學習或者工作具有一定的參考價值,有需要的朋友們下面來一起看看吧。2017-01-01

