首页 > Oracle > Oracle使用dbms_parallel_execute包执行DML并行插入
2014
10-07

Oracle使用dbms_parallel_execute包执行DML并行插入

在工作中使用并行可以极大的提高工作效率。可以Object,session.hint级别引入并行。可以使大量的数据处理更加高效。比如现在有一个表 t 有1000万行,如果想以这个表为基础,把数据选择性的插入另外一个表t2,使用Insert into t2 select *from t;使用并行来处理也没有问题,但是如果使用dbms_parallel_execute也是一种很不错的选择。使用dbms_parallel_execute的实现方式和parallel还有一定的差别。
这个包在11g开始引入,可能初次接触的时候会被它大量的功能所淹没,不知道从何开始。
举个例子来说明一下。我们创建一个表 t,限于环境的情况,目前做一个百万级别的数据dml操作,使用dbms_parallel_execute来完成。

1. 创建表t.

2. 创建表t2,我们专门专门多加了一个字段。session_id。到时候会有用处。

3. 使用如下的存储过程来模拟一个dml的处理过程。传入的参数,是根据rowid来处理。

4. 使用dbms_parallel_execute来创建一个Job,以1万条数据分单位进行数据的rowid切分。

5. 通过dba_parallel_execute_chunks可以查看到切分后的rowid情况。

查看切分后的情况,我们可以把切分后的每一个子块称为chunk。可以通过这个语句来简单的监控进度。

6. 可以使用如下的部分来开始处理数据。启用了4个并行,并行度可以情况来提高。:start_id,:end_id是上面对应的rowid.

数据处理的进度可以查看得到。

7. 处理完数据之后,就可以删除这个job了。

8. 我们可以在t2的新增列中看到每个对应的parallel处理的数据情况,可以看到数据的处理还是很平均的。

9. 在数据处理的时候。可以看到dbms_parallel_execute后台启用的处理进程和并行还是有一些不同的。
启用了4个并行之后,看到都是j00这样的进程。

10. 如果调高parallel从4到16,可以看到j00的进程相应的增加了。

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL