oracle读写速率,Oracle数据库测试数据插入速度

三,用静态改写后的速度:Executed in 19.391 seconds

drop table t purge;

create table t(x int);

/*清空共享池,注意在生产环境中千万不能做这步操作*/

alter system flush shared_pool;

create or replace procedure proc3

as

begin

for i in 1 .. 100000

loop

insert into t values(i);

commit;

end loop;

end;

/

SQL> set timing on;

SQL> exec proc3;

PL/SQL procedure successfully completed

Executed in 19.391 seconds

a1082a435e4229e963306393795151bb.png

从上面可以看出,proc3也实现了绑定变量,而且动态的特点是执行过程中再解析,而静态的SQL的特点是编译的过程是解析好的,所以上面的PRARSE_CALLS是0。注意这个和上面一个图比较,上面的时PARSE_CALLS 是1,而这个是0,所以静态的少了一个执行的时候的解析过程。

我们可以看出上面的三个PROC都是一条语句就commit一次,我们完全没有必要这样做,我们可以一起提交。如下例: commit的时把log_buffer里的信息通过LGWR写到online redo log里,触发LGWR写10万次,而且我们知道LGWR写的太频繁了。

四,批量提交的速度:Executed in 11.42 seconds

drop table t purge;

create table t(x int);

/*清空共享池,注意在生产环境中千万不能做这步操作*/

alter system flush shared_pool;

create or replace procedure proc4

as

begin

for i in 1 .. 100000

loop

insert into t values(i);

end loop;

commit;

end;

/

SQL> set timing on;

SQL> exec proc4;

PL/SQL procedure successfully completed

Executed in 11.42 seconds

可以看出我们用的时间更少了。

五,集合写法的速度:Executed in 0.452 seconds

drop table t purge;

create table t(x int);

/*清空共享池,注意在生产环境中千万不能做这步操作*/

alter system flush shared_pool;

/*下面的语句是由上面的一条一条的插入改为一整批的写进data buffer区里,所以比上面的快,批处理肯定比一个一个的执行快*/

insert into t select rownum from dual connect by level<=100000;

SQL> set timing on;

SQL> insert into t select rownum from dual connect by level<=100000;

100000 rows inserted

Executed in 0.452 seconds

这个是上面的前四种都是一条一条的插入的,我这个集合写法是一整批地写进到DATA BUFFER里,所以比上面的四种情况要快的多。

六,用直接路径写法速度(100万条记录):Executed in 1.514 seconds/*下面用直接路径的方式来操作,速度会比上面更快,所谓直接路径就是数据不经过database buffer,而是直接写到磁盘,少了一步写到数据缓冲区(database buffer)的动作*/

drop table t purge;

alter system flush shared_pool;

SQL> set timing on;

SQL> create table t as select rownum x from dual connect by level<=1000000;

Table created

Executed in 1.514 seconds

注意此时我插入的记录数十上面的10倍,我是插入100万条记录只用了1.514 seconds.

注意:直接路径的写法比集合写法快事因为,insert into select .... 的方式是将数据首先写到data buffer里,然后再刷到磁盘里。而create as t 的方式跳过了数据缓冲区(data buffer), 直接写进磁盘中,这种方式称之为直接路径读写方式。本来是先到内存,在到磁盘,更改为直接到磁盘,少了一个步骤,所以速度快了。

七,并行写法的速度(100万条记录):Executed in 0.733 seconds

/*并行加直接路径,而且是不写日志的,所以速度比上面的更快*/

drop table t purge;

alter system flush shared_pool;

set timing on;

create table t nologging parallel 64 as select rownum x from dual connect by level<=100000;

SQL> set timing on;

SQL> create table t nologging parallel 4 as select rownum x from dual connect by level<=1000000;

Table created

Executed in 0.733 seconds

我上面只用了parallel 4,如果更多的话,还会更快!!!

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值