oracle进程什么时候,Oracle LGWR进程跟踪

Oracle LGWR进程跟踪

Oracle LGWR进程在正常情况下有以下条件被唤醒:每三秒,写满logbuffer 1M,log buffer空间写满了三分之一,用户提交和其他进程通知需要写出log buffer(比如 dbwr进程在写出数据库块,都要通知LGWR进程先把对应的redo写出).

基本过程如下:

用户进程发布提交请求=>LGWR进程被唤醒=>LGWR进程发布IO调用写出log buffer=>IO写出成功返回=>LGWR进程通知用户进程可以继续下一步操作.

用户进程实际上是使用semctl这个系统调用去唤醒LGWR进程

我们打开第一个窗口执行一条insert语句,然后再提交

DONGDONGTANG> insert into t1 values(10);

1 row inserted

DONGDONGTANG> commit;

另一个窗口跟踪进程调用

[oracle@localhost ~]$ strace -t -p 22777

18:04:56 semctl(2883584, 17, SETVAL, 0x1) = 0

18:04:56 times(NULL)                    = 439153919

18:04:56 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 86131}, ru_stime={0, 123814}, ...}) = 0

18:04:56 times(NULL)                    = 439153919

18:04:56 times(NULL)                    = 439153919

18:04:56 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 86138}, ru_stime={0, 123823}, ...}) = 0

18:04:56 semtimedop(2883584, {{47, -1, 0}}, 1, {0, 100000000}) = 0

用户进程在semid为2883584设置标志位,然后用户进程调用semtimedop,在2883584上进行睡眠.

系统为oracle分配了三个semphore id

[oracle@localhost ~]$ ipcs -s

------ Semaphore Arrays --------

key        semid      owner      perms      nsems

0xaece40bc 2883584    oracle     640        152

0xaece40bd 2916353    oracle     640        152

0xaece40be 2949122    oracle     640        152

LGWR进程的调用

18:04:55 semtimedop(2883584, {{17, -1, 0}}, 1, {3, 0}) = 0

18:04:56 times(NULL)                    = 439153919

18:04:56 times(NULL)                    = 439153919

18:04:56 pwrite(260, "\1\"\0\0\2158\0\0\17\0\0\0\20\200\331\217H\2\0\0\r\0\0\0=X\33\0\1\0\0\0"..., 1024, 7412224) = 1024

18:04:56 semctl(2883584, 47, SETVAL, 0x1) = 0

18:04:56 times(NULL)                    = 4391

在semid 2883584上被唤醒,通过pwrite调用写出日志文件,260刚好是当前打开的redo文件号.写出1024个字节后通过

过semctl调用返回给用户进程,用户进程接着可以继续下一步操作.

[oracle@localhost ~]$ ll  /proc/22040/fd | grep 260

lrwx------. 1 oracle oinstall 64 May 23 18:19 260 -> /u01/app/oracle/oradata/cdb12/redo03.log

DONGDONGTANG> select group#,status from v$log;

GROUP# STATUS

---------- ----------------

1 INACTIVE

2 INACTIVE

3 CURRENT

所以在这里可以看出几个比较重要影响LGWR进程效率的因素:1,cpu负载,如果cpu负载比较高,而LGWR进程一直

得不到cpu运行,会使log file sync时间变得很长,隐含参数_high_priority_process可以使LGWR进程的PI为-12

而正常的进程运行优先级为20.(VKTM,LMS进程默认为-2);2,io系统的性能,在影响LGWR的效率占主要因素,IO越快

那么LGWR进程对应也能越快返回; 3,使用sem效率的问题,当一个系统中大量用户进程提交时,使用sem单次操作的

最大限制受kernel.semopm限制.在后续的版本中引入了adaptive log fie sync机制,当达到一定值时,使用polling

机制.

阅读(2832) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值