gpt4 book ai didi

Oracle 多插入语句

转载 作者:行者123 更新时间:2023-12-02 09:50:04 27 4
gpt4 key购买 nike

在我的应用程序中,我必须添加许多记录。我正在使用以下结构:

   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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com