ITPub博客

首页 > 数据库 > Oracle > [20230307]如何知道启用IMU.txt

[20230307]如何知道启用IMU.txt

原创 Oracle 作者:lfree 时间:2023-03-10 20:45:21 0 删除 编辑

[20230307]如何知道启用IMU.txt

--//上个星期对生产系统redo做了一个转储,主要是想分析为什么这套系统每天产生的日志有点大。
--//我当时认为这套系统单机应该使用开启IMU。实际上的情况该系统打开附加日志,不可能工作在IMU下。
--//那么如何知道数据库启用IMU呢?对于相关知识有点生疏,复习一下。

--//首先有几种情况oracle不会启用IMU。
1.rac环境。
2.数据库开启flashback。
3.打开附加日志。
4.当然一种情况比较特殊就是如果写满IMU缓存,系统也会切换到传统模式。
5.当然如果切换日志,也会导致IMU信息写盘。alert会出现Private Strand Flush Not Complete之类的提示。
6.如果执行alter system checkpoint也会导致IMU信息写盘,但是我以前遇到的情况是不确定,有时写有时不写。
  具体细节我一直不是很清楚..

--//如何知道当前数据库启用IMU呢,自己做一些总结:
1.环境:
SCOTT@book> @ver1
PORT_STRING         VERSION    BANNER
------------------- ---------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.首先不能简单通过隐含参数_in_memory_undo确定。
SYS@book> alter database flashback on;
Database altered.

SYS@book> @ hide  _in_memory_undo
NAME            DESCRIPTION                                    DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
--------------- ---------------------------------------------- ------------- ------------- ------------ ----- ---------
_in_memory_undo Make in memory undo for top level transactions TRUE          TRUE          TRUE         TRUE  IMMEDIATE
--//我设置数据库flashback on;,但是_in_memory_undo并不会自动设置false。
--//当然如果你发现_in_memory_undo=false,那么一定关闭IMU。

3.最简单方法就是查看v$sysstat视图:
select * from v$sysstat where name like '%IMU%';
select name,value from v$sysstat where name like '%commits%';
--//select * from v$sgastat where name='KTI-UNDO';
--//你可以等一小段时间再次执行看看是否变化来确定IMU的启用。
--//注意如果IMU commits的值有变化说明启用了IMU,因为数据库可能在运行过程打开flashback或者附加日志.这样就关闭IMU.
SYS@book> alter database flashback on;
Database altered.

SYS@book> select name,value from v$sysstat where name like '%commits%';
NAME         VALUE
------------ -----
user commits 13824
IMU commits  10727

--//执行一些小的dml操作并提交!!.

SYS@book> select name,value from v$sysstat where name like '%commits%';
NAME         VALUE
------------ -----
user commits 13826
IMU commits  10727
--//数据库目前打开flashback on,IMU commits的值没有发生了变化!!

SYS@book> alter database flashback off;
Database altered.

SYS@book> select name,value from v$sysstat where name like '%commits%';
NAME         VALUE
------------ -----
user commits 13828
IMU commits  10727

--//执行一些小的dml操作并提交!!.

SYS@book> select name,value from v$sysstat where name like '%commits%';
NAME         VALUE
------------ -----
user commits 13834
IMU commits  10733
--//可以发现IMU commits的值增加,说明开启IMU.这样可以快速判断.感觉这是最简单的方法!!

4.其它方法:
$ cat imu.sql
SELECT INDX
      ,FIRST_BUF_KCRFA
      ,last_buf_kcrfa
      ,PNEXT_BUF_KCRFA_CLN nxtbufadr
      ,NEXT_BUF_NUM_KCRFA_CLN nxtbuf#
      ,BYTES_IN_BUF_KCRFA_CLN "B/buf"
      ,PVT_STRAND_STATE_KCRFA_CLN state
      ,STRAND_NUM_ORDINAL_KCRFA_CLN strand#
      ,PTR_KCRF_PVT_STRAND stradr
      ,INDEX_KCRF_PVT_STRAND stridx
      ,SPACE_KCRF_PVT_STRAND strspc
      ,TXN_KCRF_PVT_STRAND txn
      ,TOTAL_BUFS_KCRFA totbufs#
      ,STRAND_SIZE_KCRFA strsz
  FROM X$KCRFSTRAND ;

--//通过查询X$KCRFSTRAND视图,如果PTR_KCRF_PVT_STRAND=00(也就是stradr=00),基本可以判断没有使用IMU.

$ cat imuz.sql
SELECT
    indx
    ,inst_id
    ,ktifpno
    ,ktifpxcb tx_addr
    ,ktifpupb undo_begin
    ,ktifpupc undo_cur
    ,ktifpupe undo_end
    ,ktifprpb redo_begin
    ,ktifprpc redo_cur
    ,ktifprpe redo_end
    ,TO_NUMBER (ktifpupc, 'XXXXXXXXXXXXXXXX') - TO_NUMBER (ktifpupb, 'XXXXXXXXXXXXXXXX') undo_usage
    ,TO_NUMBER (ktifpupe, 'XXXXXXXXXXXXXXXX') - TO_NUMBER (ktifpupb, 'XXXXXXXXXXXXXXXX') undo_size
    ,TO_NUMBER (ktifprpc, 'XXXXXXXXXXXXXXXX') - TO_NUMBER (ktifprpb, 'XXXXXXXXXXXXXXXX') redo_usage
    ,TO_NUMBER (ktifprpe, 'XXXXXXXXXXXXXXXX') - TO_NUMBER (ktifprpb, 'XXXXXXXXXXXXXXXX') redo_size
    ,KTIFPPSI
    ,KTIFPRBS
    ,KTIFPTCN
    ,KTIFPFLC
    ,KTIFPOPC
    ,ktifptxflg
  FROM x$ktifp
where
    TO_NUMBER (ktifprpe, 'XXXXXXXXXXXXXXXX') - TO_NUMBER (ktifprpb, 'XXXXXXXXXXXXXXXX') !=0
;

--//如果一个业务繁忙的系统,执行以上有输出,可以确定启用IMU,测试环境也很容易模拟,执行一些小的dml不提交,再执行以上命令有
--//输出,可以确定启用IMU。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2939164/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970383