Welcome 微信登录

首页 / 数据库 / MySQL / 在Linux下使用strace窥视Oracle LGWR进程

Linux下的strace可以帮助我们跟踪一下程序的系统调用;LGWR是Oracle中的一个重要进程,专门负责将redo写入online redo log中。       我们试一下用strace窥视一下LGWR的行为。      首先找出LGWR的进程号:
1[oracle@www.linuxidc.com ~]$ ps -ef | grep $ORACLE_SID | grep lgwr
2oracle    5140     1  0 Nov09 ?        00:00:12 ora_lgwr_mydb
      在一个终端中执行命令,我们比较关心LGWR对文件的打开操作: 
1[oracle@www.linuxidc.com ~]$ strace -p 5140 2>&1 | grep -i open
      在sqlplus中执行以下语句,用于添加一组新的online redo log: 
1ALTER DATABASE ADD LOGFILE ("/u02/oradata/mydb/redolog/group04/redo05a.log", 
2                            "/u02/oradata/mydb/redolog/group04/redo05b.log") 
3      SIZE 50m;
      然后多次切换logfile: 
1alter system switch logfile;
2alter system switch logfile;
3alter system switch logfile;
4alter system switch logfile;
5alter system switch logfile;
6alter system switch logfile;
      此时 strace 这边就有输出了: 
01open("/u02/oradata/mydb/redolog/group04/redo05a.log", O_RDONLY) = 60
02open("/u02/oradata/mydb/redolog/group04/redo05a.log", O_RDWR|O_SYNC) = 60
03open("/u02/oradata/mydb/redolog/group04/redo05b.log", O_RDONLY) = 61
04open("/u02/oradata/mydb/redolog/group04/redo05b.log", O_RDWR|O_SYNC) = 61
05open("/proc/5164/stat", O_RDONLY)       = 62
06open("/u01/app/admin/mydb/bdump/alert_mydb.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = 8
07open("/u01/app/admin/mydb/bdump/alert_mydb.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = 8
08open("/u01/app/admin/mydb/bdump/alert_mydb.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = 8
09.......
10.......
11.......
      我们可以看到LGWR对新的一组redo进行了打开操作,后面是一堆对 alert文件的打开并写入操作,可以看到LGWR对online redo log的open操作采用 O_SYNC 标志,从google中得知,该标志用于绕过文件系统的缓存。      我们可以再看看文件系统的缓存的巨大作用,用dd命令来模拟一下: 
01[ora11g@FWDB ~]$ time dd if=/dev/zero of=/tmp/bigfile.bin bs=1048576 count=2048 ; time sync ;   
022048+0 records in
032048+0 records out
042147483648 bytes (2.1 GB) copied, 11.7151 seconds, 183 MB/s
05  
06real    0m11.763s
07user    0m0.002s
08sys     0m5.189s
09  
10real    0m9.671s
11user    0m0.000s
12sys     0m0.561s
13  
14  
15[ora11g@FWDB ~]$ time dd if=/dev/zero of=/tmp/bigfile.bin bs=1048576 count=2048 oflag=sync; time sync ;     
162048+0 records in
172048+0 records out
182147483648 bytes (2.1 GB) copied, 17.3505 seconds, 124 MB/s
19  
20real    0m17.900s
21user    0m0.002s
22sys     0m6.546s
23  
24real    0m0.150s
25user    0m0.000s
26sys     0m0.003s
      可以看到文件系统的缓存表面上大大增加了吞吐能力,但是如果一旦断电就有可能产生数据丢失的情况。复制Oracle Home所需要注意的几个问题给Oracle 11g Interval分区进行重命名相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数