LOG FILE SYNC概述(第五篇)
其他組建的調優
log file sync問題的解決是一個系統工程,除了上面一節描述的調優方式,我們看看對於其他組建是否也需要調優。例如commit本身作為一個redo record也是需要被複製進log buffer的,如果此時log buffer太小沒有了空間,那麼豈不是也會在一定程度上影響提交的效率,再如,Lgwr在重新整理日誌前,需要確認所有分配過空間的buffer都已經複製結束,如果發現還有程式在持有redo copy latch就說明還有程式正在往log buffer複製日誌,那麼這個時候也會導致提交變慢。
LOG BUFFER 的調優
10G以後,LOG BUFFER一般情況下已經比較大,一般為1到多個granules大小,除非你看到了比較多的log buffer space等待事件,否則不需要調整log buffer的大小。
redo相關latch的調優
l redo copy latch:僅僅用來跟蹤是否有程式正在往log buffer裡複製資料。lgwr在真正開始寫之前,必須等待相關的程式複製完畢,在此期間,lgwr會等待LGWR wait for redo copy等待。可以同時向log buffer裡進行複製的程式的數量由_log_simultaneous_copies決定。除非觀察到明顯的redo copy latch等待,否則保持預設值。
l redo allocation latch:保護程式在redo buffer裡分配空間時使用,保證各個程式間彼此分配的空間不重疊。9.2版本以前由於redo allocation latch只有一把,因此比較容易引起此latch的真用,9.2版本以後,根據主機CPU的多少,log buffer已經被拆分成多個子LOG BUFFER,每個子buffer 都有有對應的redo allocation latch,很大程度上緩解了redo allocatoin latch的爭用,除非看到了明顯的redo allocation latch的爭用,否則不用調整log buffer的數量。10G以後,私有redo和IMU的出現,每一個私有redo都由一個私有的redo allocation latch保護,進一步降低了redo allocation latch的爭用。
redo writing latch:這個latch保護的是一個標誌位,程式獲取這個latch後,修改標誌位,比如把0改為1,代表lgwr正在寫,這樣後續的提交程式,獲得這個latch後讀取標誌位,就知道當前LGWR是不是正在寫了,避免了很多不需要的重複通知。
一般是不需要的,除非他們相關的等待已經引起了你的注意,而且ORACLE各個版本也一直在最佳化相關的latch的獲取和釋放,比如redo allocation latch,這一塊已經做的非常高效了。
新的調優手段
10G之前,在事務做提交的時候,必須等待Lgwr刷日誌完成才能繼續做其它事,也就是說必須符合事務持久化的條件,可能學過其他資料庫的同學學ORACLE的時候怪怪的,因為像MYSQL、MONGODB等資料庫都支援對日誌的非同步重新整理,我想之所以ORACLE這麼晚才推出這一功能,主要還是使用ORACLE的客戶都是金融、證券等行業巨多,這些行業對於資料的丟失是零容忍的,因此他們對此並無需求,直到10GR1,ORACLE公司才默默的推出了一個引數:commit_logging,這個引數可以實現讓事務在提交時,並不同步重新整理日誌,而是在合適的時候去觸發,這個引數可以有四種組合:
commit write [batch|immediate][wait|nowait]
10GR2版本釋出的時候,這個引數被拆成了2個引數,commit_logging,commit_write,個人認為10GR2拆分後的引數,更能準確表達引數的意圖。我們先著重的看下commit_write這個引數,它的引數值可以為wait/nowait,代表:前臺程式在進行事務提交的時候,通不通知LGWR去重新整理日誌。wait為通知,前臺程式會等待log file sync。nowait為不通知,僅僅等待其他操作觸發lgwr去寫日誌(如3秒,1M大小,1/3滿)。如果你的業務對資料的一致性的要求不高,對ACID的D沒有要求,為了提高事務數、提高效能,你可以選擇commit_write為nowait方式。而在10G以前,ACID的D是必須滿足的,也就是說,前臺程式在提交的時候,必須要等待LOG FILE SYNC,等待LGWR重新整理日誌到磁碟。我們再來看下commit_logging引數,引數可以選擇的值有batch/immediate,這個引數極其容易引起人的誤解,讓人誤以為batch的含義是,控制著事務是否以group commit的方式打包提交,而immediate含義是讓事務一個個的提交,一次提交重新整理一次log buffer,但實時不是這樣的!
immediate與batch相比,commit的改變向量(修改回滾段頭的事務槽)將作為stand alone(單獨的)的redo record產生,跟9I的commit記錄日誌的方式是一樣的。batch 模式下commit改變向量的記錄方式是合併進事務產生的change vector裡,作為一個redo record,這個batch模式依賴是否使用私有redo和IMU,如果私有redo和IMU被關閉的情況下,batch的設定也就沒了作用。
我們對insert into a values(1111);commit;來進行dump log file,闡述一下batch/immediate方式的區別 :
DUMP LOG FILE:啟用私有redo和IMU,設定commit_logging為immediate,commit的日誌作為單獨的redo record產生,一共2條redo record,第二個redo record為commit產生的,見加粗部分(OP:5.4,代表為UNDO段頭的修改)
REDO RECORD - Thread:1 RBA: 0x00044d.00000002.0010 LEN: 0x0230 VLD: 0x05 |
DUMP LOG FILE:啟用私有redo和imu,設定commit_logging為batch,commit作為一個改變向量合併進了事務的redo record裡,作為一條redo record,change #3為commit產生的。
REDO RECORD - Thread:1 RBA: 0x00044d.00000002.0010 LEN: 0x0230 VLD: 0x05 |
個人感覺commit_logging引數的作用不大,可能有助於減少ACID的異常時間,對日誌量的size在batch模式下有輕微的減少。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-2153226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LOG FILE SYNC概述(第四篇)
- LOG FILE SYNC概述(第一篇)
- 【等待事件】log file sync事件
- log file sync等待事件事件
- log file sync等待事件處理思路事件
- 【WAIT】 log file sync等待事件說明AI事件
- Script to Collect Log File Sync Diagnostic Information (lfsdiag.sql)ORMSQL
- [20201204]關於等待事件Log File Sync.txt事件
- 【TUNE_ORACLE】等待事件之日誌等待“log file sync”Oracle事件
- 一個os thread startup、log file sync等待的故障回顧thread
- Oracle資料庫由dataguard備庫引起的log file sync等待Oracle資料庫
- Resource is out of sync with the file system
- log file switch
- Eclipse:Resource is out of sync with the file systemEclipse
- redo log file 最佳化
- How to Dump Redo Log File Information --metalinkORM
- go tool compile 報錯 could not import sync (file not found)GoCompileImport
- 關於log file switch and checkpoint機制
- 【ASK_ORACLE】Linux從6升級到7導致Oracle產生大量Log file sync等待事件處理辦法OracleLinux事件
- ssserver -c /etc/shadowsocks.json --log-file /var/log/shadowsocks.log -d start啟動失敗ServerJSON
- 【MySQL】五、sync_binlog innodb_flush_log_at_trx_commit 淺析MySqlMIT
- 如何選擇配置 MySQL innodb_log_file_sizeMySql
- Oracle RAC+DG 調整redo/standby log fileOracle
- IO流-File類的概述和構造方法構造方法
- log_archive_dest與log_archive_dest_n與USE_DB_RECOVERY_FILE_DESTHive
- 【TUNE_ORACLE】等待事件之日誌等待“log file parallel write”Oracle事件Parallel
- 更改online redo log file 提示 ORA-01511 ORA-01141
- 測試中出現ERROR StatusLogger No log4j2 configuration fileError
- Visual Studio Code Active File in StatusBar 擴充套件以及 Extension API 概述套件API
- Linux 下高階日誌檔案檢視器Log File NavigatorLinux
- MATLAB 寫log file自動輸出計算資料等操作Matlab
- [20211013]Oracle 19c新特性Listener自動清理(Network Log File Segmentation).txtOracleSegmentation
- Oracle-真實環境的丟失current redo log file的故障恢復Oracle
- [第五篇]——Docker 映象加速Docker
- SpringBoot第五篇:整合MybatisSpring BootMyBatis
- Adaptive Cursor Sharing(第五篇)APT
- React 教程第五篇 —— stateReact
- 電競顯示器G-sync和Free-sync區別對比:G-SYNC和Free Sync有什麼優缺點?