作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我必须添加许多记录。我正在使用以下结构:
INSERT /*+ append parallel(t1, 4) parallel(t2, 4) */ ALL
INTO t1 (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
INTO t2 (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
INTO t2 (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
.
.
.
SELECT 1 FROM DUAL;
我还使用 APPEND 和 PARALLEL 提示。请注意,我正在两个不同的表中插入数据。并行似乎被忽略了(DBA 告诉我的)。那么我如何知道它是否正在被使用呢?是否可以在此类构造中使用 PARALLEL 提示?有效果吗?
最佳答案
这可能足以让它工作:
alter session enable parallel dml;
您可以使用如下查询检查实际并行度:
select px_servers_executions, v$sql.*
from v$sql where lower(sql_text) like '%insert%parallel%' order by last_load_time desc;
如果您仍然没有获得并行性,可能有很多原因。首先,查看这些参数:
select * from v$parameter where name like 'parallel%'
但是您可能不希望插入语句具有并行性。并行性会产生大量开销,通常只有在处理数千或数百万条记录时才有用。
我猜你真正的问题是解析大型 SQL 语句的时间。多表插入尤其糟糕。如果您尝试插入超过几百行,您的查询将花费很多秒来进行解析。根据您的 Oracle 版本,如果您尝试使用 501 表,它将永远挂起。运行多个较小的查询比运行一个大型查询要快得多。例如,5 次插入 100 行的运行速度比 1 次插入 500 行的运行速度快得多。 (一般来说,这与如何调整 Oracle 的性能完全相反。这是一个特殊情况,因为与解析大型 SQL 语句相关的错误。)
关于Oracle 多插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6035924/
我是一名优秀的程序员,十分优秀!