_disable_logging是否会使数据库的数据加载操作速度惊人的增加?

来源:互联网 发布:买卖软件有哪些 编辑:程序博客网 时间:2024/04/29 20:31

  

_disable_logging是否会使数据库的数据加载操作速度惊人的增加?
首先,检查一下当前的_disable_logging参数的设置:
lunar@TSMISC01> show parameter disable_logging
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_disable_logging                     boolean     FALSE
lunar@TSMISC01>
   
接下来,我们创建一个表,并使用直接路径加载的方式插入数据:
lunar@TSMISC01> @big_table 10000000
drop table big_table
           *
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.01
Table created.
Elapsed: 00:00:00.08
Table altered.
Elapsed: 00:00:00.00
old   3:     l_rows number := &1;
new   3:     l_rows number := 10000000;
old   9:         where rownum <= &1;
new   9:         where rownum <= 10000000;
PL/SQL procedure successfully completed.
Elapsed: 00:01:12.86
Table altered.
Elapsed: 00:02:07.28
PL/SQL procedure successfully completed.
Elapsed: 00:03:37.02
 COUNT(*)
----------
 10000000
Elapsed: 00:00:02.25
lunar@TSMISC01>
    这里,我们注意到,插入10000000条数据,需要1分钟13秒,收集统计信息需要3分37秒。
 
现在我们将_disable_logging参数设置为true,再继续观察,同样的创建表,直接路径加载和分析这个大表的时间有什么变化:
lunar@TSMISC01> alter system set "_disable_logging"=true scope=memory;
System altered.
Elapsed: 00:00:00.02
lunar@TSMISC01> show parameter disable_logging
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_disable_logging                     boolean     TRUE
lunar@TSMISC01>
lunar@TSMISC01> @big_table 10000000
Table dropped.
Elapsed: 00:00:01.33
Table created.
Elapsed: 00:00:00.13
Table altered.
Elapsed: 00:00:00.02
old   3:     l_rows number := &1;
new   3:     l_rows number := 10000000;
old   9:         where rownum <= &1;
new   9:         where rownum <= 10000000;
PL/SQL procedure successfully completed.
Elapsed: 00:01:29.89
Table altered.
Elapsed: 00:01:33.17
PL/SQL procedure successfully completed.
Elapsed: 00:03:12.77
 COUNT(*)
----------
 10000000
Elapsed: 00:00:02.05
lunar@TSMISC01>
    现在,插入10000000条数据,需要1分钟30秒,收集统计信息需要3分12秒。
这是一个非归档数据库的例子,由于篇幅的关系,归档数据库的例子就不一一列举了,但是根据数据库的一些操作机制,我们不难推断出来,不管是非归档模式还是归档模式,_disable_logging=true都不一定会使数据库的数据加载操作的速度增加(我猜想oracle说到的提高数据加载速度可能是在某些特殊条件下的)。
另外,如果是一个归档数据库,当数据库量(需要记录到日志文件中的事务向量)多到需要切换到下一个日志来记录,那么数据库就会hang在这个操作中,这个例子会在本文后面的讨论中有所介绍。
 
原创粉丝点击