log file sync 和 log file parallel write
dbsnak在微博裡這樣描述等待事件log file sync和log file parallel write的關係:
前 臺程式a通知LGWR要刷log buffer了,這時候a就開始等待log file sync,LGWR接到a的請求後開始等待OS把log buffer寫回redo log,這時候LGWR就開始等待log file parallel write,OS寫完了通知LGWR,中止log file parallel write等待,接著LGWR通知a,中止log file sync等待 --- 這就是上述兩種等待的區別。
有上面這個形象的例子,可以明白等待事件log file sync和log file parallel write是同時存在的,均是等待LGWR程式將log buffer中的redo entries寫入online redo log的完成。
當 一個前臺程式(或使用者會話)進行提交(commit)或回滾(rollback)時,這個會話的redo資訊就需要被刷入redo log file中。且該回話會通知LGWR將所有需要的redo entries寫入redo log file。當LGWR寫入完成後,又會返回使用者會話一個確認資訊,以表明redo entries已全部安全的寫入到了磁碟。
log file sync的引數有:
P1 = buffer#
在log buffer中,所有變更到這個緩衝號的重做條目都必須被重新整理到磁碟,且保證所有已提交的事務被確認寫入,即使發生instance crash,也不會影響到已提交的事務,因此log file sync等待事件就是等待直到緩衝號為buffer#的redo entries均被寫入到了磁碟。
P2 = Not used
P2 = Not used
通常發生log file sync等待事件是由於LGWR寫入緩慢或者應用程式的提交操作過於頻繁。可以透過如下措施幫助減少log file sync等待:
1、將online redo log file放在最快的磁碟上,例如該磁碟不允許配置RAID 5,因為RAID 5對於頻繁寫入操作效能較差。
2、採用批次提交的方式。
3、
在Oracle 10gR2中,commit命令增加了WRITE子句來控制在commit操作期間,redo寫入redo log
file的方式和程度。WRITE子句的作用只是為了提高效能,安全方面會被降低,因為可能會造成提交的事務卻沒被寫入redo log
file而丟失資料。
Oracle文件中是這樣描述commit語句的write子句的:
COMMIT;
COMMIT
WRITE WAIT; --> The commit command is synchronous. It doesn't return
until the relevant redo information is written to the online redo log.
COMMIT
WRITE NOWAIT; --> The commit command is asynchronous. It can return
before the relevant redo information is written to the online redo log.
COMMIT
WRITE BATCH; --> The commit command is synchronous. It doesn't
return until the relevant redo information is written to the online redo
log.
COMMIT WRITE IMMEDIATE; --> The commit "prods" the LGWR
process by sending a message, so that the redo is written immediately to
the redo logs.
上面這種方式是要透過修改程式程式碼實現的,如果想避免修改程式程式碼,也可以在session級別或system級別透過引數COMMIT_WRITE實現,如:
SQL> alter [system | session] set COMMIT_WRITE=’IMMEDIATE,NOWAIT’;
也可以透過觸發器來監視當某使用者的應用程式執行時進行COMMIT_WRITE引數的設定:
SQL> CREATE OR REPLACE TRIGGER sys.global_commit_session_settings ALTER LOGON ON
BEGIN
execute immediate ‘alter session set COMMIT_WRITE=”IMMEDIATE,NOWAIT”’
END;
/
需要注意的是:如果使用了此選項,一旦資料庫例項失敗(CRASH),儘管是已被提交的事務,也會丟失沒有被寫入到redo log file中的資料,請慎用。
4、使用NOLOGGING或UNRECOVERABLE選項。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27036311/viewspace-768271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redo的等待log file sync和log file parallel write和redo size設定Parallel
- Oracle之 等待事件log file sync + log file parallel write (awr優化)Oracle事件Parallel優化
- log file sync(日誌檔案同步) 與 Log file parallel write 等待事件Parallel事件
- Oracle db file parallel write 和 log file parallel write 等待事件 說明OracleParallel事件
- Log Write Methods can Cause 'log file sync' Waits (文件 ID 1462942.1)AI
- log file sync等待事件事件
- 【等待事件】log file sync事件
- log file sync" 等待事件事件
- db file parallel writeParallel
- _use_adaptive_log_file_sync設定 降低log_file_sync等待APT
- 【TUNE_ORACLE】等待事件之日誌等待“log file parallel write”Oracle事件Parallel
- "log file sync"等待事件-2事件
- "log file sync"等待事件-1事件
- 等待事件 log file sync 小解事件
- _use_adaptive_log_file_syncAPT
- log file sync等待事件總結事件
- control file parallel writeParallel
- log file sync等待事件處理思路事件
- 【WAIT】 log file sync等待事件說明AI事件
- 【RAC】RAC 效能分析 - 'log file sync' 等待事件事件
- 關於log file sync等待事件的描述事件
- control file parallel write等待事件Parallel事件
- Script to Collect Log File Sync Diagnostic Information (lfsdiag.sql)ORMSQL
- Script toCollect Log File Sync Diagnostic Information (lfsdiag.sql)ORMSQL
- control file parallel write事件小記Parallel事件
- 【TUNE_ORACLE】等待事件之日誌等待“log file sync”Oracle事件
- RAC 資料庫中的'log file sync' 等待事件資料庫事件
- oracle core-log file sync-dba enterpriseOracle
- log file sync等待事件的成因及優化方法事件優化
- log file switch
- Could not find first log file name in binary log index fileIndex
- oracle等待事件3構造一個Direct Path write等待事件和構造一個Log File Sync等待事件Oracle事件
- Oracle 11g 遇到log file sync嚴重等待事件Oracle事件
- reduce the database log fileDatabase
- Catalog archivelog from file system to Asmdg;HiveASM
- 【TUNE_ORACLE】等待事件之IO等待“db file parallel write”Oracle事件Parallel
- redo log file 優化優化
- LOG FILE SWITCH等待事件事件