Oracle 歸檔日志性能優(yōu)化指南
歸檔日志性能是 Oracle 數(shù)據(jù)庫(kù)高并發(fā)場(chǎng)景下最容易被忽視但影響最嚴(yán)重的性能瓶頸之一。歸檔慢會(huì)直接導(dǎo)致日志切換阻塞,所有 DML 操作暫停,數(shù)據(jù)庫(kù)完全掛起,在電商大促、銀行交易高峰期等場(chǎng)景下會(huì)造成災(zāi)難性后果。
1、基本概念
1.1、歸檔日志性能優(yōu)化
歸檔日志性能優(yōu)化是通過(guò)優(yōu)化存儲(chǔ) IO、日志配置、進(jìn)程參數(shù)和網(wǎng)絡(luò)傳輸,讓歸檔進(jìn)程(ARCn)能夠以最快的速度完成在線重做日志的歸檔,確保 LGWR 進(jìn)程永遠(yuǎn)不會(huì)因?yàn)榈却龤w檔而阻塞。
1.2、性能問(wèn)題的典型表現(xiàn)
- 出現(xiàn)大量
log file switch (archiving needed)等待事件(最致命) - 執(zhí)行
ALTER SYSTEM SWITCH LOGFILE;命令卡住 - 數(shù)據(jù)庫(kù) TPS 急劇下降,所有寫(xiě)操作變慢
- 告警日志中出現(xiàn)
ARCn: Archival not started或Archiver stuck錯(cuò)誤 - 在線重做日志切換頻率異常(如每分鐘切換多次)
1.3、性能瓶頸分布
歸檔性能瓶頸按出現(xiàn)頻率從高到低排序:
- 存儲(chǔ) IO 瓶頸(70%):歸檔存儲(chǔ)讀寫(xiě)速度不足
- 日志配置不合理(15%):日志文件太小、日志組太少
- 歸檔進(jìn)程不足(10%):ARCn 進(jìn)程數(shù)量不夠
- 網(wǎng)絡(luò)瓶頸(5%):遠(yuǎn)程歸檔或 Data Guard 環(huán)境下網(wǎng)絡(luò)帶寬不足
2、存儲(chǔ)層優(yōu)化
歸檔是純 IO 密集型操作,存儲(chǔ)性能直接決定了歸檔速度。
2.1、存儲(chǔ)分離原則
歸檔日志必須存儲(chǔ)在獨(dú)立于數(shù)據(jù)文件和在線重做日志的專(zhuān)用存儲(chǔ)上:
- 數(shù)據(jù)文件:隨機(jī)讀寫(xiě)為主
- 在線重做日志:順序?qū)憺橹?/li>
- 歸檔日志:順序?qū)憺橹?/li>
如果三者共享同一存儲(chǔ),會(huì)產(chǎn)生嚴(yán)重的 IO 競(jìng)爭(zhēng),導(dǎo)致所有組件性能下降。
2.2、ASM 磁盤(pán)組優(yōu)化
2.2.1、創(chuàng)建專(zhuān)用歸檔磁盤(pán)組
-- 創(chuàng)建專(zhuān)用歸檔磁盤(pán)組,使用NORMAL冗余,AU_SIZE=4M(適合大文件順序?qū)懀? 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)化要點(diǎn)
- AU_SIZE 設(shè)置為 4M:歸檔日志是大文件,大 AU_SIZE 可以減少元數(shù)據(jù)開(kāi)銷(xiāo),提高順序?qū)懶阅?/li>
- 使用 NORMAL 冗余:平衡性能和可靠性,避免使用 HIGH 冗余(寫(xiě)性能下降 50%)
- 使用 SSD/NVMe 存儲(chǔ):歸檔順序?qū)懶阅鼙葯C(jī)械硬盤(pán)高 5-10 倍
- 在線動(dòng)態(tài)擴(kuò)容:ASM 支持在線添加磁盤(pán),無(wú)需停機(jī)
- 在線添加磁盤(pán),重平衡并行度設(shè)為8
- ALTER DISKGROUP ARCH ADD DISK '/dev/asm-arch5' REBALANCE POWER 8 WAIT;
2.2.3、文件系統(tǒng)優(yōu)化
如果使用文件系統(tǒng)存儲(chǔ)歸檔日志:
啟用異步IO和直接IO(大幅提升文件系統(tǒng)IO性能):
ALTER SYSTEM SET filesystemio_options=SETALL SCOPE=SPFILE;
啟用磁盤(pán)異步IO(默認(rèn)已啟用):
ALTER SYSTEM SET disk_asynch_io=TRUE SCOPE=SPFILE;
2.2.4、存儲(chǔ)性能測(cè)試
測(cè)試歸檔目錄寫(xiě)入速度(1GB文件,直接IO):
dd if=/dev/zero of=/archive/testfile bs=1M count=1024 conv=fdatasync oflag=direct
監(jiān)控存儲(chǔ)IO性能:
iostat -dxm 2 | grep -E 'Device|sd|nvme'
3、在線重做日志優(yōu)化
在線重做日志的配置直接影響日志切換頻率和歸檔壓力。
3.1、合理設(shè)置日志文件大小
日志文件大小原則:日志切換頻率控制在每 15-30 分鐘一次。
| 業(yè)務(wù)場(chǎng)景 | 推薦日志文件大小 |
|---|---|
| 低并發(fā)系統(tǒng) | 1GB |
| 中并發(fā)系統(tǒng) | 2-4GB |
| 高并發(fā)核心系統(tǒng) | 8-16GB |
錯(cuò)誤做法:日志文件太?。ㄈ?100MB),導(dǎo)致每分鐘切換多次,歸檔進(jìn)程無(wú)法跟上。
3.2、合理設(shè)置日志組數(shù)量
日志組數(shù)量原則:至少配置 4 組在線重做日志,高并發(fā)系統(tǒng)配置 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;
-- 刪除過(guò)小的日志組
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;3.3、多路復(fù)用在線日志
每個(gè)日志組至少配置 2 個(gè)成員,分別存儲(chǔ)在不同的存儲(chǔ)設(shè)備上,防止單點(diǎn)故障:
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、歸檔進(jìn)程優(yōu)化
4.1、調(diào)整歸檔進(jìn)程數(shù)量
Oracle 會(huì)根據(jù)負(fù)載自動(dòng)調(diào)整歸檔進(jìn)程數(shù)量,但在高并發(fā)場(chǎng)景下,需要手動(dòng)設(shè)置最大值:
-- 查看當(dāng)前歸檔進(jìn)程數(shù)量 SELECT process, status FROM v$archive_processes; -- 設(shè)置最大歸檔進(jìn)程數(shù)為6(生產(chǎn)推薦值,范圍1-30) ALTER SYSTEM SET log_archive_max_processes=6 SCOPE=BOTH;
最佳實(shí)踐:
- 單實(shí)例環(huán)境:4-6 個(gè) ARCn 進(jìn)程
- RAC 環(huán)境:每個(gè)節(jié)點(diǎn) 4-6 個(gè) ARCn 進(jìn)程
- Data Guard 環(huán)境:6-8 個(gè) ARCn 進(jìn)程
注意:歸檔進(jìn)程不是越多越好,超過(guò)存儲(chǔ) IO 能力后,增加進(jìn)程反而會(huì)導(dǎo)致 IO 競(jìng)爭(zhēng)加劇,性能下降。
4.2、啟用并行歸檔
并行歸檔單個(gè)日志文件,大幅提高歸檔速度:
-- 啟用并行歸檔,每個(gè)日志文件使用2個(gè)進(jìn)程并行歸檔 ALTER SYSTEM SET "_parallel_archive_log"=TRUE SCOPE=SPFILE; ALTER SYSTEM SET "_parallel_archive_log_workers"=2 SCOPE=SPFILE;
到此這篇關(guān)于Oracle 歸檔日志性能優(yōu)化的文章就介紹到這了,更多相關(guān)Oracle 歸檔日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Oracle中的歸檔日志文件詳解
- Oracle歸檔日志文件(查看、配置、刪除)
- Oracle數(shù)據(jù)庫(kù)如何刪除歸檔日志文件
- Oracle刪除歸檔日志及添加定時(shí)任務(wù)
- 解決Oracle數(shù)據(jù)庫(kù)歸檔日志占滿(mǎn)磁盤(pán)空間問(wèn)題
- Oracle查詢(xún)最近幾天每小時(shí)歸檔日志產(chǎn)生數(shù)量的腳本寫(xiě)法
- 解決Oracle RMAN刪除歸檔日志不釋放問(wèn)題的方法
- Oracle歸檔日志寫(xiě)滿(mǎn)(ora-00257)了怎么辦
- oracle的歸檔模式 ORACLE數(shù)據(jù)庫(kù)歸檔日志常用命令
相關(guān)文章
oracle行轉(zhuǎn)列與列轉(zhuǎn)行的幾種方式匯總
最近項(xiàng)目需要進(jìn)行行轉(zhuǎn)列,經(jīng)過(guò)上網(wǎng)查找到了一些解決方法,分享給大家,這篇文章主要給大家介紹了關(guān)于oracle行轉(zhuǎn)列與列轉(zhuǎn)行的幾種方式,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Oracle?ORA-00904:標(biāo)識(shí)符無(wú)效解決方法(太坑了!!)
最近執(zhí)行sql時(shí)oracle報(bào)錯(cuò)ORA-00904:標(biāo)識(shí)符無(wú)效,所以這篇文章主要給大家介紹了關(guān)于Oracle?ORA-00904:標(biāo)識(shí)符無(wú)效解決方法的相關(guān)資料,需要的朋友可以參考下2022-10-10
Oracle中監(jiān)控SQL執(zhí)行時(shí)間的常用方法
在 Oracle 數(shù)據(jù)庫(kù)中,監(jiān)控 SQL 語(yǔ)句的執(zhí)行時(shí)間是性能調(diào)優(yōu)和問(wèn)題排查的關(guān)鍵環(huán)節(jié),Oracle 提供了多種機(jī)制來(lái)捕獲和分析 SQL 的執(zhí)行耗時(shí),以下是 常用且實(shí)用的方法,需要的朋友可以參考下2025-12-12
Oracle數(shù)據(jù)庫(kù)表被鎖如何查詢(xún)和解鎖詳解
作為一個(gè)IT技術(shù)人員,可能經(jīng)常遇到在使用Oracle數(shù)據(jù)時(shí),由于操作不當(dāng)導(dǎo)致數(shù)據(jù)庫(kù)鎖表,從而影響項(xiàng)目正常使用,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)表被鎖如何查詢(xún)和解鎖的相關(guān)資料,需要的朋友可以參考下2023-03-03
直接拷貝數(shù)據(jù)文件實(shí)現(xiàn)Oracle數(shù)據(jù)遷移
Oracle 數(shù)據(jù)遷移是比較麻煩的,對(duì)菜鳥(niǎo)來(lái)說(shuō)更是如此。最近由于更換服務(wù)器,需要將Oracle遷移到另外一臺(tái)機(jī)器,在兩個(gè)服務(wù)器環(huán)境相同,以及 Oracle版本相同的前提下,通過(guò)直接拷貝數(shù)據(jù)文件到新服務(wù)器,就可以直接遷移成功。這里記錄一下遷移步驟。需要的朋友可以參考。2017-01-01
oracle中如何獲得數(shù)據(jù)庫(kù)的DBID信息
在進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)的過(guò)程中,很多時(shí)候我們需要知道Oracle數(shù)據(jù)庫(kù)的DBID,通常有以下幾種方法可以獲得數(shù)據(jù)庫(kù)的DBID2013-09-09
oracle查看執(zhí)行最慢與查詢(xún)次數(shù)最多的sql語(yǔ)句
這篇文章主要給大家介紹了oracle查看執(zhí)行最慢與查詢(xún)次數(shù)最多的sql語(yǔ)句,文中給出完整的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-01-01

