+ -
当前位置:首页 → 问答吧 → 预先分配extent减少插入时间

预先分配extent减少插入时间

时间:2011-08-24

来源:互联网

预先分配extent减少插入时间

======================
--在aa表空间中创建空表
[email=an@DB10]an@DB10[/email]> create table a_ob1 tablespace aa as select * from an_objects where 1=2;
表已创建。
--清除内存,减少干扰因素
[email=an@DB10]an@DB10[/email]> set timing on
[email=an@DB10]an@DB10[/email]> alter system flush buffer_cache;
系统已更改。
已用时间:  00: 00: 04.50
[email=an@DB10]an@DB10[/email]> alter system flush shared_pool;
系统已更改。
已用时间:  00: 00: 02.43
--插入数据,用时46.71秒
[email=an@DB10]an@DB10[/email]> insert into a_ob1 select * from an_objects;
已创建800736行。
已用时间:  00: 00: 46.71
[email=an@DB10]an@DB10[/email]> commit;
提交完成。
已用时间:  00: 00: 00.01
--确认表空间使用情况
[email=an@DB10]an@DB10[/email]> SET WRAP OFF
[email=an@DB10]an@DB10[/email]> SET LINESIZE 158
[email=an@DB10]an@DB10[/email]> COL ts_name FOR A30
[email=an@DB10]an@DB10[/email]> select * from(
  2  SELECT
  3  dtp.tablespace_name ts_name,
  4  NVL(ts.bytes,0)/1024/1024 size_m,
  5  NVL(ts.bytes - NVL(f.bytes,0),0)/1024/1024 used_m,
  6  ROUND((NVL(ts.bytes - NVL(f.bytes,0),0) /NVL(ts.bytes,0)*100),2) used
  7  FROM
  8  sys.DBA_TABLESPACES dtp,
  9  (SELECT tablespace_name,SUM(bytes) bytes FROM DBA_DATA_FILES GROUP BY tablespace_name) ts,
10  (SELECT tablespace_name,SUM(bytes) bytes FROM DBA_FREE_SPACE GROUP BY tablespace_name) f
11  WHERE dtp.tablespace_name = ts.tablespace_name(+) AND
12  dtp.tablespace_name = f.tablespace_name(+)
13  AND NOT (dtp.CONTENTS LIKE 'TEMPORARY')
14  UNION ALL
15  SELECT
16  dtp.tablespace_name ts_name,
17  NVL(a.bytes,0)/1024/1024 size_m,
18  NVL(t.bytes,0)/1024/1024 used_m,
19  ROUND(NVL(t.bytes,0)/NVL(a.bytes,0)*100,2) used
20  FROM
21  sys.DBA_TABLESPACES dtp,
22  (SELECT tablespace_name,SUM(bytes) bytes FROM DBA_TEMP_FILES GROUP BY tablespace_name) a,
23  (SELECT ss.tablespace_name ,SUM((ss.used_blocks*ts.blocksize)) bytes FROM gv$sort_segment ss,sys.ts$ ts WHERE
blespace_name) t
24  WHERE dtp.tablespace_name = a.tablespace_name (+) AND
25  dtp.tablespace_name = t.tablespace_name (+) AND
26  dtp.CONTENTS LIKE 'TEMPORARY') pp
27  order by pp.used desc
28  ;
TS_NAME                            SIZE_M     USED_M       USED
------------------------------ ---------- ---------- ----------
SYSAUX                                250        250        100
AA                               176.0625   176.0625        100
SYSTEM                                480   476.0625      99.18
USERS                               437.5      414.5      94.74
UNDOTBS1                              200        174         87
A_5                                    10      .0625        .63
TEMP                                   20          0          0
已选择7行。
--创建第二个测试表
已用时间:  00: 00: 00.21
[email=an@DB10]an@DB10[/email]> create table a_ob2 tablespace aa as select * from an_objects where 1=2;
表已创建。
--清除内存中数据,减少干扰因素
已用时间:  00: 00: 00.82
[email=an@DB10]an@DB10[/email]>  alter system flush buffer_cache;
系统已更改。
已用时间:  00: 00: 06.67
[email=an@DB10]an@DB10[/email]> alter system flush shared_pool;
系统已更改。
--预分配100m的段空间
已用时间:  00: 00: 00.00
[email=an@DB10]an@DB10[/email]> alter table a_ob2 allocate extent (size 100m);
表已更改。

--插入数据,耗时15.71秒
已用时间:  00: 00: 10.48
[email=an@DB10]an@DB10[/email]>  insert into a_ob2 select * from an_objects;
已创建800736行。
已用时间:  00: 00: 15.71

通过预分配空间减少了数据插入的时间消耗

作者: 安佰胜   发布时间: 2011-08-24

alter table a_ob2 allocate extent (size 100m);
这步花了多少时间?也要计算进去的

作者: bluemoon0083   发布时间: 2011-09-06

说的好~还有就是每次插入的数据有多少MB你如何准备估计呢?

作者: iori809   发布时间: 2011-09-06

100M?如果是1G可能效果会更明显。

作者: 我上面有人   发布时间: 2011-09-06

热门下载

更多