重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3555|回复: 0
打印 上一主题 下一主题

[转载] 在Linux下使用strace窥视Oracle LGWR进程

[复制链接]
跳转到指定楼层
楼主
发表于 2018-9-13 17:29:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

               

               
                       
      Linux下的strace可以帮助我们跟踪一下程序的系统调用;LGWR是Oracle中的一个重要进程,专门负责将redo写入online redo log中。
  
      我们试一下用strace窥视一下LGWR的行为。
  
      首先找出LGWR的进程号:
  
1

2

[oracle@test02 ~]$ ps -ef | grep $ORACLE_SID | grep lgwr

oracle    5140     1  0 Nov09 ?        00:00:12 ora_lgwr_mydb




      在一个终端中执行命令,我们比较关心LGWR对文件的打开操作:
1

[oracle@test02 ~]$ strace -p 5140 2>&1 | grep -i open




      在sqlplus中执行以下语句,用于添加一组新的online redo log:
1

2

3

ALTER DATABASE ADD LOGFILE ('/u02/oradata/mydb/redolog/group04/redo05a.log',

                            '/u02/oradata/mydb/redolog/group04/redo05b.log')

      SIZE 50m;




      然后多次切换logfile:
1

2

3

4

5

6

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 这边就有输出了:
1

2

3

4

5

6

7

8

9

10

11

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命令来模拟一下:
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

[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




      可以看到文件系统的缓存表面上大大增加了吞吐能力,但是如果一旦断电就有可能产生数据丢失的情况。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-27 11:52 , Processed in 0.083497 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表