暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle性能优化:SQL优化思路之六——日志与直接路径读

oracleEDU 2017-11-01
505

oracle提供两种类型的插入语句:常规插入(conventional insert)和直接路径插入(direct-path insert),直接路径插入的目的是为了高效地加载大量的数据,它以牺牲部分功能为代价,直接路径方式并没有对数据进行缓存共享,所以当插完数据想读取该表时则需重新从磁盘读到内存data_buffer里。所以读取相对较慢,插入较快。

关闭日志对数据库性能的影响,如果表大,能一定程度缩短时间消耗,如果表小,效果并不明显。

如果性能是首要目标,可以考虑直接路径插入配合使用最小日志模式(nologging)

直接路径读方式

示例:

构造一个记录有100万左右的表

drop table t purge;

create table t   as select * from dba_objects;

insert into t  select * from t;

insert into t  select * from t;

insert into t  select * from t;

insert into t  select * from t;

commit;

测试普通插入:

SQL> drop table test;

SQL> create table test  as select * from dba_objects where 1=2;

SQL> set timing on

SQL> insert into test select * from t;

已创建1166096行。

已用时间:  00: 00: 06.78

SQL> commit;

普通方式插入test表后输出的物理读(首次执行,看physical reads

SQL> set autotrace traceonly

SQL> select count(*) from test;

测试直接路径读方式:

SQL> drop table test;

SQL> create table test as select * from dba_objects where 1=2;

SQL> set timing on

SQL> insert  /*+ append */ into test select * from t;

已创建1166096行。

已用时间:  00: 00: 01.24

SQL> commit;

直接路径方式插入test表试验输出的物理读(首次执行,看physical reads)

SQL> set autotrace traceonly

SQL> select count(*) from test;

直接路径插入的限制

1)一张表同时只能有一个直接路径插入,因此不适合小数据量的插入,只适合大批量的数据加载;
2)在HWM下的空闲空间不会被利用;
3)一张表在做直接路径插入的同时,同一会话不能对其做任何操作(select都不可以);
4)只有insert inot ... select ... 语句、merge语句和使用OCI直接路径接口的应用程序才可以使用。

日志关闭与否对性能的影响

构造环境

建一个约600万条记录的表:

drop table t purge;

create table t as select * from dba_objects;

insert into t  select * from t;

insert into t  select * from t;

insert into t  select * from t;

insert into t  select * from t;

--多插入几次,让数据大一点

insert into t  select * from t;

insert into t  select * from t;

commit;

测试nolgging关闭日志+直接路径读方式:

SQL> drop table test;

表已删除。

SQL> create table test  as select * from dba_objects where 1=2;

表已创建。

SQL> alter table test nologging;

表已更改。

SQL> set timing on

SQL> insert  /*+ append */ into test select * from t;

已创建4664384行。

已用时间:  00: 00: 04.39

经过测试,关闭日志确实减少了时间的消耗,但是如果数据量少,那么并不明显。

最后修改时间:2021-04-28 20:22:05
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论