知识大全 小议Oracle11g的自治事务(六)

Posted 过程

篇首语:月缺不改光,箭折不改钢。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 小议Oracle11g的自治事务(六)相关的知识,希望对你有一定的参考价值。

小议Oracle11g的自治事务(六)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  自治事务提供了很方便的事务控制功能 使得用户可以在不影响当前事务的情况下 提交或回滚对数据库的修改 那么Oracle为了实现这个功能是否付出了很多的代价呢 下面对比一下自治事务和普通事务的统计信息

   SQL> CREATE GLOBAL TEMPORARY TABLE T_SESSION_STAT     (ID NUMBER  NAME VARCHAR ( )  VALUE NUMBER)     ON MIT PRESERVE ROWS;

  表已创建  

   SQL> CREATE TABLE T_RECORD (ID NUMBER  NAME VARCHAR ( ));

  表已创建   

   SQL> CREATE OR REPLACE PROCEDURE P_TEST AS     BEGIN     INSERT INTO T_RECORD VALUES (   TEST );     MIT;     END;     /

  过程已创建  

   SQL> CREATE OR REPLACE PROCEDURE P_TEST_AUTO AS     PRAGMA AUTONOMOUS_TRANSACTION;     BEGIN     INSERT INTO T_RECORD VALUES (   TEST );     MIT;     END;     /

  过程已创建  

   SQL> SET SERVEROUT OFF   SQL> BEGIN        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST_AUTO;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        FOR C IN     (     SELECT *     FROM     (     SELECT A NAME  C VALUE + A VALUE     * B VALUE VALUE     FROM     T_SESSION_STAT A     T_SESSION_STAT B     T_SESSION_STAT C     WHERE A NAME = B NAME     AND A NAME = C NAME     AND A ID =      AND B ID =      AND C ID =      )     WHERE ABS(VALUE) >      ) LOOP     DBMS_OUTPUT PUT_LINE(RPAD(C NAME       ) || C VALUE);     END LOOP;        END;     /   PL/SQL 过程已成功完成   SQL> TRUNCATE TABLE T_SESSION_STAT;

  表被截断  

   SQL> SET SERVEROUT ON   SQL> BEGIN        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST_AUTO;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        FOR C IN     (     SELECT *     FROM     (     SELECT A NAME  C VALUE + A VALUE     * B VALUE VALUE     FROM     T_SESSION_STAT A     T_SESSION_STAT B     T_SESSION_STAT C     WHERE A NAME = B NAME     AND A NAME = C NAME     AND A ID =      AND B ID =      AND C ID =      )     WHERE ABS(VALUE) >      ) LOOP     DBMS_OUTPUT PUT_LINE(RPAD(C NAME       ) || C VALUE);     END LOOP;        END;     /

  recursive cpu usage

  session logical reads

  CPU used by this session

  enqueue releases

  db block gets

  db block gets from cache

  consistent gets

  consistent gets from cache

  consistent gets examination

  db block changes

  consistent changes

  mit cleanout failures: block lost

  mit cleanouts

  calls to kcmgcs

  calls to get snapshot scn: kcmgss

  redo size

  undo change vector size

  mit txn count during cleanout

  IMU mits

  IMU Flushes

  IMU undo allocation size

  PL/SQL 过程已成功完成

  由于第一次调用匿名块和过程会产生会导致递归调用信息 而这些可能干扰统计信息的结果 因此执行两次匿名块 取第二次的结果为最终结果

  从二者的差异可以看到 自治事务产生的redo和undo都比普通事务要大一些 这时可以理解的 不过现在只是插入一条记录 不能说明什么问题 关键看这种差异随事务的增大成比例增长还是基本维持原状

  下面修改两个存储过程  

   SQL> CREATE OR REPLACE PROCEDURE P_TEST AS     BEGIN     FOR I IN   LOOP     INSERT INTO T_RECORD VALUES (   TEST );     END LOOP;     MIT;     END;     /

  过程已创建  

   SQL> CREATE OR REPLACE PROCEDURE P_TEST_AUTO AS     PRAGMA AUTONOMOUS_TRANSACTION;     BEGIN     FOR I IN   LOOP     INSERT INTO T_RECORD VALUES (   TEST );     END LOOP;     MIT;     END;     /

  过程已创建

   SQL> EXEC P_TEST

  PL/SQL 过程已成功完成

   SQL> EXEC P_TEST_AUTO

  PL/SQL 过程已成功完成

   SQL> TRUNCATE TABLE T_SESSION_STAT;

  表被截断

   SQL> DELETE T_RECORD;

  已删除 行

   SQL> MIT;

  提交完成  

   SQL> BEGIN        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST_AUTO;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        FOR C IN     (     SELECT *     FROM     (     SELECT A NAME  C VALUE + A VALUE     * B VALUE VALUE     FROM     T_SESSION_STAT A     T_SESSION_STAT B     T_SESSION_STAT C     WHERE A NAME = B NAME     AND A NAME = C NAME     AND A ID =      AND B ID =      AND C ID =      )     WHERE ABS(VALUE) >      ) LOOP     DBMS_OUTPUT PUT_LINE(RPAD(C NAME       ) || C VALUE);     END LOOP;        END;     /

  opened cursors cumulative

  recursive calls

  recursive cpu usage

  session logical reads

  CPU used by this session

  enqueue requests

  enqueue releases

  db block gets

  db block gets from cache

  consistent gets

  consistent gets from cache

  consistent gets examination

  db block changes

  consistent changes

  change write time

  free buffer requested

  mit cleanout failures: block lost

  mit cleanouts

  mit cleanouts successfully pleted

  calls to kcmgcs

  calls to kcmgas

  calls to get snapshot scn: kcmgss

  redo entries

  redo size

  redo ordering marks

  undo change vector size

  no work consistent read gets

  deferred (CURRENT) block cleanout applications

  mit txn count during cleanout

  active txn count during cleanout

  cleanout number of ktugct calls

  IMU undo allocation size

  IMU Redo allocation size

  table scans (short tables)

  table scan rows gotten

  table scan blocks gotten

  cluster key scans

  cluster key scan block gets

  index fetch by key

  heap block press

  session cursor cache hits

  buffer is not pinned count

  parse count (total)

  execute count

  PL/SQL 过程已成功完成

  IMU是 g的IN MEMORY UNDO的缩写 这个值比较大主要是由于前面进行了DELETE 后面又插入相同的数据 因此Oracle采用了IMU操作 抛去这个因素 其他的差异于事务本身代价相比就小得多了

   SQL> TRUNCATE TABLE T_SESSION_STAT;

  表被截断

  

   SQL> BEGIN        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        P_TEST_AUTO;        INSERT INTO T_SESSION_STAT SELECT   NAME  VALUE     FROM V$SESSTAT A  V$STATNAME B     WHERE A STATISTIC# = B STATISTIC#     AND A SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM =  );        FOR C IN     (     SELECT *     FROM     (     SELECT A NAME  B VALUE   A VALUE VALUE     FROM     T_SESSION_STAT A     T_SESSION_STAT B     WHERE A NAME = B NAME     AND A ID =      AND B ID =      )     WHERE ABS(VALUE) >      ) LOOP     DBMS_OUTPUT PUT_LINE(RPAD(C NAME       ) || C VALUE);     END LOOP;        END;     /

  recursive calls

  session logical reads

  db block gets

  db block gets from cache

  db block changes

  redo entries

  redo size

  undo change vector size

  IMU undo allocation size

  IMU Redo allocation size

  execute count

  PL/SQL 过程已成功完成

cha138/Article/program/Oracle/201311/17919

相关参考

知识大全 小议Oracle11g的自治事务(三)

小议Oracle11g的自治事务(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  上一篇文章

知识大全 小议Oracle11g的自治事务(一)

小议Oracle11g的自治事务(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这两天看了

知识大全 小议Oracle11g的自治事务(四)

小议Oracle11g的自治事务(四)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!上一篇文章描述

知识大全 小议Oracle外键约束修改行为(一)

小议Oracle外键约束修改行为(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracl

知识大全 Oracle内存数据库11g和高速缓存11g上市

Oracle内存数据库11g和高速缓存11g上市  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!北京

知识大全 Oracle9i数据库WITH查询语法小议

Oracle9i数据库WITH查询语法小议  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ora

知识大全 Oracle11g默认目录结构

Oracle11g默认目录结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracleg主流

知识大全 Oracle 11g安装图文攻略

Oracle11g安装图文攻略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  呵呵花了一个多小时

知识大全 Oracle11g备份恢复功能增强

Oracle11g备份恢复功能增强  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracleg

知识大全 oracle11G空表默认不导出解决

oracle11G空表默认不导出解决  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE