[20121227]dataguard下执行延迟recover的问题.txt

[20121227]dataguard下执行recover managed standby database disconnect from session delay 720.txt

recover managed standby database disconnect from session delay 720 ;
alter database recover managed standby database disconnect from session delay 720 ;

100.31机器,从网络流量看,出现一个很奇怪的情况,流量很大。也就是从IP 存储上有大量的物理读(前46week的流量)。
如图:

(我监测的是服务器,绿色标识in bound,对于IP存储出,也就是从IP存储上读取信息)

如果执行alter  database open read only ;,流量下降下来。

我开始以为SGA设置不合理,检查发现:

SQL> show sga
Total System Global Area 2147483648 bytes
Fixed Size                  2085360 bytes
Variable Size             385879568 bytes
Database Buffers         1744830464 bytes
Redo Buffers               14688256 bytes
SQL> show parameter 32k
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----
db_32k_cache_size                    big integer 256M

--应该是正常,也是db_32k_cache_size设置小一点,设置为512M。

recover managed standby database disconnect from session delay 720 ;

top -c 观察,隔一段时间出现在前面:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
19628 oracle    15   0 2221m  37m  16m S  1.0  0.9   0:00.67 ora_mrp0_icarestd

使用strace跟踪发现:
$ strace -p 19628 -t -e pread  -o /tmp/aa1
....
15:05:48 pread(17, "\25\302\0\0\260\3\0\0\35\312\23\0\377\377\1\4\212\245\0"..., 49152, 137101312) = 49152
15:05:48 pread(17, "\25\302\0\0\307\1\0\0\257\311\23\0\377\377\1\4\346\r\0"..., 16384, 126861312) = 16384
15:05:48 pread(18, "\25\302\0\0\310\1\0\0\260\311\23\0\377\377\1\4\303\r\0"..., 16384, 229507072) = 16384
15:05:53 pread(17, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\24\232\0\0\0\0\0\0"..., 16384, 125845504) = 16384
15:05:53 pread(17, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\24\232\0\0\0\0\0\0"..., 16384, 429932544) = 16384
--通过偏移确定读取什么有一些困难。
....
lrwx------  1 oracle oinstall 64 Dec 10 15:07 17 -> /dev/raw/raw1
lrwx------  1 oracle oinstall 64 Dec 10 15:07 18 -> /dev/raw/raw2

$ cut -f1 -d' ' /tmp/aa1 | uniq -c
    212 15:05:48
    164 15:05:53
     48 15:05:54
    212 15:05:59
    212 15:06:04
     69 15:06:09
    143 15:06:10
--基本上间隔5秒,读/dev/raw/raw[12].

--过滤^15:05:59。
$ grep '^15:05:59'  /tmp/aa1  | cut -f2 -d '=' > /tmp/aa2
$ wc -l /tmp/aa2
212 /tmp/aa2

--后面写入211个+,并且加入pq
$ cat /tmp/aa2 | dc
20267008

--读取了 20267008/1024/1024=19.328125M,分摊到5秒的时间内,确实正好4M上下。基本和流量图一致。

#  dstat -n -N eth1,eth0,total 1 100
--net/eth1----net/eth0---net/total-
 recv  send: recv  send: recv  send
   0     0 :   0     0 :   0     0
  20M 5043k:2545k   64k:  22M 5108k
   0     0 :   0     0 :   0     0
  19k   81k:  24k 2168B:  44k   83k
   0     0 :   0     0 :   0     0
5634B  108k:  60k 6982B:  66k  114k
   0     0 :   0     0 :   0     0
  20M  161k:  17k 2524B:  20M  164k
   0     0 :   0     0 :   0     0
  17k   37k: 958B  624B:  18k   38k
   0     0 :   0     0 :   0     0
  11M  109k:  29k 2232B:  11M  111k
   0     0 :   0     0 :   0     0
9227k   89k:4685B  962B:9231k   90k
   0     0 :   0     0 :   0     0
  27k  297k: 144k   12k: 172k  309k
   0     0 :   0     0 :   0     0
  20M  254k:  82k 3384B:  20M  257k
   0     0 :   0     0 :   0     0
  18k   43k:3890B  962B:  22k   43k
   0     0 :   0     0 :   0     0
--基本验证。注意查看eth1网卡的流量。
#  dstat -d -D sda,sdb,total 1 100
--dsk/sda-----dsk/sdb----dsk/total-
 read  writ: read  writ: read  writ
 252B   13k:6134B   11k:6387B   24k
   0     0 :   0    59k:   0    59k
   0     0 :  16k   37k:  16k   37k
   0     0 :   0     0 :   0     0
   0     0 :  19M  481k:  19M  481k
   0   168k:  16k   62k:  16k  230k
   0     0 :   0   108k:   0   108k
   0     0 :   0    18k:   0    18k
   0     0 :  16k   46k:  16k   46k
   0     0 :  16M 9216B:  16M 9216B
   0     0 :3568k   18k:3568k   18k
   0     0 :  16k   58k:  16k   58k
   0     0 :   0  4096B:   0  4096B
   0     0 :   0    14k:   0    14k
   0     0 :  16k   40k:  16k   40k
   0     0 :  19M 5120B:  19M 5120B
   0     0 :   0    40k:   0    40k
   0     0 :  16k   47k:  16k   47k
   0     0 :   0     0 :   0     0
   0     0 :  12M  132k:  12M  132k
   0     0 :  48M   32k:  48M   32k
   0     0 :   0   168k:   0   168k
   0     0 :   0    14k:   0    14k
   0     0 :  16k  180k:  16k  180k
   0    16k:   0  4096B:   0    20k
   0     0 :5776k  153k:5776k  153k
   0     0 :  14M   36k:  14M   36k
   0     0 :   0  5120B:   0  5120B
   0     0 :   0    78k:   0    78k
   0     0 :  16k   80k:  16k   80k
   0     0 :   0   176k:   0   176k

--问题是不知道mrp进程到底读取什么????

 
分析过程:
$ man pread
PREAD(2)  Linux Programmer's Manual                                PREAD(2)

NAME
       pread, pwrite - read from or write to a file descriptor at a given offset

SYNOPSIS
       #define _XOPEN_SOURCE 500

       #include

       ssize_t pread(int fd, void *buf, size_t count, off_t offset);

       ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);

--第1个是句柄,第2个参数缓存地址指针,第3个是读取长度,第4个是偏移量。

单独看两个:

15:05:48 pread(17, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\24\232\0\0\0\0\0\0"..., 16384, 125845504) = 16384
15:05:48 pread(17, "\25\302\0\0\1\0\0\0\0\0\0\0\0\0\1\4\24\232\0\0\0\0\0\0"..., 16384, 429932544) = 16384

125845504/1024/1024=120.015625
429932544/1024/1024=410.015625
0.015625*1024*1024=16384 --??

SQL> column path format a40
SQL> select DISK_NUMBER,GROUP_NUMBER,PATH from v$asm_disk where GROUP_NUMBER=1 and DISK_NUMBER in(1,0);
DISK_NUMBER GROUP_NUMBER PATH
----------- ------------ ----------------------------------------
          0            1 /dev/raw/raw1
          1            1 /dev/raw/raw2

--可以确定文件句柄对应的是17对应的DISK_NUMBER=0.

SQL> SELECT disk_kffxp, au_kffxp, xnum_kffxp,GROUP_KFFXP,NUMBER_KFFXP  FROM x$kffxp  WHERE (au_kffxp=120 or  au_kffxp=410) and disk_kffxp=0;
DISK_KFFXP   AU_KFFXP XNUM_KFFXP GROUP_KFFXP NUMBER_KFFXP
---------- ---------- ---------- ----------- ------------
         0        120          0           1         1805
         0        410          0           1         2011

asmcmd看:

ls -l
Type         Redund  Striped  Time             Sys  Name
CONTROLFILE  UNPROT  FINE     DEC 10 08:00:00  Y    current.1805.772818275
CONTROLFILE  UNPROT  FINE     DEC 10 08:00:00  Y    current.2011.772818275
--从这里也可以确定文件号1805,2011.
--做如下查询:

SQL> column type format a12
SQL> select * from v$asm_file where TYPE'ARCHIVELOG' and  TYPE'AUTOBACKUP' and TYPE='CONTROLFILE' order by type;
GROUP_NUMBER FILE_NUMBER COMPOUND_INDEX INCARNATION BLOCK_SIZE     BLOCKS      BYTES      SPACE TYPE         REDUNDANCY   STRIPED      CREATION_DATE       MODIFICATION_DATE   RE
------------ ----------- -------------- ----------- ---------- ---------- ---------- ---------- ------------ ------------ ------------ ------------------- ------------------- --
           1        1805       16779021   772818275      16384       3081   50479104   58720256 CONTROLFILE  UNPROT       FINE         2012-01-17 15:44:34 2012-12-10 08:00:00 U
           1        2011       16779227   772818275      16384       3081   50479104   58720256 CONTROLFILE  UNPROT       FINE         2012-01-17 15:44:35 2012-12-10 08:00:00 U

--再次证明读取的地方是控制文件。

--再拿这个来看看:
15:05:48 pread(18, "\25\302\0\0(\0\0\0)w\35\0\377\377\1\4Iz\0\0\0\0008\0\0"..., 16384, 233832448) = 16384
15:05:48 pread(18, "\25\302\0\0\304\3\0\0\351\310\23\0\377\377\1\4\2537\0\0"..., 16384, 237961216) = 16384

233832448/1024/1024=223
237961216/1024/1024=226.9375

SQL> SELECT disk_kffxp, au_kffxp, xnum_kffxp,GROUP_KFFXP,NUMBER_KFFXP  FROM x$kffxp  WHERE (au_kffxp=223 or  au_kffxp=226) and disk_kffxp=1;

DISK_KFFXP   AU_KFFXP XNUM_KFFXP GROUP_KFFXP NUMBER_KFFXP
---------- ---------- ---------- ----------- ------------
         1        223          5           1         1805
         1        226          8           1         1805

--可以再次确定读取的就是控制文件。

--如果拿一台使用文件系统做dataguard看,也很容易确定读取的就是控制文件。但是如果使用dstat -d -D观察,发现使用文件系统并没
--有读操作。这是由于使用文件系统有一定的缓存,dstat根本监测到磁盘读操作,基本在内存进行。而asm使用裸设备,没有文件系统的
--缓存,导致在这样延迟日志使用的模式下要每隔5秒读取控制文件,出现大量的磁盘读取操作(注:当然一些存储自身带有缓存,也许
--根本没有读取磁盘)。

总结:
可以看出在使用recover managed standby database disconnect from session delay 720 ,会每隔5秒读取控制文件,如果使用的是文件系统,
由于文件系统有一定的缓存。dstat,iostat几乎看不见磁盘读取操作,而使用asm的磁盘就不同了。由于没有文件系统的缓存,基本是直接读取磁
盘设备,读取的大小与congtrol文件保存的东西有关。我们的数据库每次多达19M,这样从cacti流量图看,几乎掩盖了其他磁盘操作,导致看到的
流量图会很平,而且流量很大。

 

snap.jpg

时间: 2024-09-29 03:18:53

[20121227]dataguard下执行延迟recover的问题.txt的相关文章

php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法

  在php命令行下执行.php文件时,执行环境的工作目录(getcwd( ))是php命令程序(php.exe)所在目录,所以如果想在文件内使用相对路径时,要先切换当前的工作目录才行. 小测试程序: 代码如下: $oldpath = getcwd(); // 原始工作目录 php.exe所在目录 $path = dirname(__FILE__); chdir($path); // 切换工作目录为当前文件所在目录 $fpath = "forum/readme.txt"; $fp =

WebBrowser让DocumentCompleted事件执行完毕后再往下执行

Q:WebBrowser如何让DocumentCompleted事件执行完毕后再往下执行? A:使用信号量,等待一下 System.Threading.AutoResetEvent obj = new System.Threading.AutoResetEvent(false); void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) ...{ obj.Set(); } p

C语言输入一个数之后,无法继续往下执行代码,void initial那里,可以帮忙改一下么

问题描述 C语言输入一个数之后,无法继续往下执行代码,void initial那里,可以帮忙改一下么 #include int n=0,time=0; struct PCB { char pname[5]; //进程名 int arrivalTime[5]; //进程提交时间 int pstart[5]; //进程开始运行时间 int pend[5]; //进程完成时间 int runningTime[5]; //进程运行所需时间 int turnaroundTime[5]; //进程周转时间

数据库连接断开后,执行到hibernate语句时,程序不往下执行

问题描述 数据库连接断开后,执行到hibernate语句时,程序不往下执行 程序运行时,如果数据库服务没有开,或者数据库服务关闭后,当执行到hibernate查询数据库等操作时,程序就不往下执行,就会一直卡在hibernate这里,有什么办法解决吗?也不报错误,就不走了,可以设置超时时间吗,谢谢大家 解决方案 怎么会一直卡下去呢,如果数据库关闭,hibernate肯定会在一定时间内做出响应的.上代码 解决方案二: 不报错误?应该会错误才对啊!会报连接超时或者数据库拒绝连接! 解决方案三: 应该会

win 8.1下执行 java -jar出现jdk目录错误

问题描述 win 8.1下执行 java -jar出现jdk目录错误 系统:win 8.1(64位)jdk版本:jdk-7u71-windows-x64.exe描述:jar包安装weblogic时出错,提示jdk主目录错误,环境变量配置如图,执行java,javac,java -version命令都正常.在线等,急~ 解决方案 吧你的classpath的jdk的设置修改下,放到第一个去,再试试呢 解决方案二: 不要放在有空格的目录下.

u盘量产后如何在自动播放,杀软安装的情况下执行autorun.inf中的open所对应的exe文件

问题描述 u盘量产后如何在自动播放,杀软安装的情况下执行autorun.inf中的open所对应的exe文件 u盘量产后如何在自动播放没有打开和杀软安装的情况下执行autorun.inf中的open所对应的exe文件. 不要手动设置计算机操作系统,而是用程序来控制自动播放和杀软,各位大侠帮帮忙,, 解决方案 没有办法,现在都加强这个检测了

desktop entry-linux下的.desktop文件如何从命令行下执行?

问题描述 linux下的.desktop文件如何从命令行下执行? 这个文本用./abc.desktop来执行不好使: 命令行是把它当成脚本一句一句执行的,统统都是: not found 要怎样能执行它,就像在桌面点击的效果一样? 解决方案 desktop文件其实就是一个配置文件 比如: [Desktop Entry] Type=Application Terminal=true Name=unmount-mount Icon=/path/to/icon/icon.svg Exec=/path/t

jbpm-JBPM5 流程在项目重启后,流程走到一半的流程就无法再向下执行了?

问题描述 JBPM5 流程在项目重启后,流程走到一半的流程就无法再向下执行了? 有什么解决办法吗?如果不重启的话一切正常,另外 我想问下怎么通过流程实例的创建人查询流程实例呢? 解决方案 strong text 二位请提供商的发送啊谁跟谁观赏鸽是道嘎

RMAN 提示符下执行SQL语句

       在手动恢复数据库时,有时候需要在SQL*Plus提示符以及操作系统提示符,RMAN提示符下来回切换显得有些繁琐.实际上RMAN为我们提供了命令行下执行一些简单的SQL语句以及PL/SQL的方法,以避免上述情形.本文描述了RMAN提示符下的一些常用命令及其用法.   1.RMAN提示符下执行SQL语句       语法: SQL '<command>' ;           语法比较简单,就是提示符下输入SQL,后接SQL命令,命令用单引号括起来      command 通常为