在Linux下使用strace窺視Oracle LGWR進程
Linux下的strace可以幫助我們跟蹤一下程序的系統調用;LGWR是Oracle中的一個重要進程,專門負責將redo寫入online redo log中。
我們試一下用strace窺視一下LGWR的行為。
首先找出LGWR的進程號:
[oracle@test02 ~]$ ps -ef | grep $ORACLE_SID | grep lgwr oracle 5140 1 0 Nov09 ? 00:00:12 ora_lgwr_mydb
在一個終端中執行命令,我們比較關心LGWR對文件的打開操作:
[oracle@test02 ~]$ strace -p 5140 2>&1 | grep -i open
在sqlplus中執行以下語句,用于添加一組新的online redo log:
ALTER DATABASE ADD LOGFILE ('/u02/oradata/mydb/redolog/group04/redo05a.log',
'/u02/oradata/mydb/redolog/group04/redo05b.log')
SIZE 50m;
然后多次切換logfile:
alter system switch logfile; alter system switch logfile; alter system switch logfile; alter system switch logfile; alter system switch logfile; alter system switch logfile;
此時 strace 這邊就有輸出了:
open("/u02/oradata/mydb/redolog/group04/redo05a.log", O_RDONLY) = 60
open("/u02/oradata/mydb/redolog/group04/redo05a.log", O_RDWR|O_SYNC) = 60
open("/u02/oradata/mydb/redolog/group04/redo05b.log", O_RDONLY) = 61
open("/u02/oradata/mydb/redolog/group04/redo05b.log", O_RDWR|O_SYNC) = 61
open("/proc/5164/stat", O_RDONLY) = 62
open("/u01/app/admin/mydb/bdump/alert_mydb.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = 8
open("/u01/app/admin/mydb/bdump/alert_mydb.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = 8
open("/u01/app/admin/mydb/bdump/alert_mydb.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = 8
.......
.......
.......
我們可以看到LGWR對新的一組redo進行了打開操作,后面是一堆對 alert文件的打開并寫入操作,可以看到LGWR對online redo log的open操作采用 O_SYNC 標志,從google中得知,該標志用于繞過文件系統的緩存。
我們可以再看看文件系統的緩存的巨大作用,用dd命令來模擬一下:
[ora11g@FWDB ~]$ time dd if=/dev/zero of=/tmp/bigfile.bin bs=1048576 count=2048 ; time sync ; 2048+0 records in 2048+0 records out 2147483648 bytes (2.1 GB) copied, 11.7151 seconds, 183 MB/s real 0m11.763s user 0m0.002s sys 0m5.189s real 0m9.671s user 0m0.000s sys 0m0.561s [ora11g@FWDB ~]$ time dd if=/dev/zero of=/tmp/bigfile.bin bs=1048576 count=2048 oflag=sync; time sync ; 2048+0 records in 2048+0 records out 2147483648 bytes (2.1 GB) copied, 17.3505 seconds, 124 MB/s real 0m17.900s user 0m0.002s sys 0m6.546s real 0m0.150s user 0m0.000s sys 0m0.003s
可以看到文件系統的緩存表面上大大增加了吞吐能力,但是如果一旦斷電就有可能產生數據丟失的情況。
浙公網安備 33010602011771號