Oracle中的附加提示

but5z9lq  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(165)

我在包中使用insert into使用select语句将大量记录从一个表插入到另一个表中。我在select语句中使用了多线程。我应该在insert语句中使用/*+ APPEND NOLOGGING */ hint吗?在oracle中对全局临时表创建索引真的能提高性能吗?

ds97pgxw

ds97pgxw1#

APPEND提示的性能改进可能是巨大的,原因有很多。启用直接路径写入允许Oracle避免写入数据的多个副本,例如重做、撤消和归档日志。直接路径写入还可以启用压缩、自动统计信息收集和其他优化。但是要注意直接路径写入的重要缺点:更改 * 不可 * 恢复,直到下一次备份,并且表被完全锁定,直到COMMIT
如果您已经在读操作中使用了多线程,那么您也可以使用带有INSERT /*+ APPEND PARALLEL(8) */ ...这样的提示的多线程写操作。但您可能需要使用ENABLE_PARALLEL_DML提示或在会话级别启用并行DML。
APPEND提示很有可能不会在最初提高性能,因为直接路径写入有很多限制,例如没有日志属性(如果数据库处于archivelog模式)、触发器、外键等。(注意LOGGING * 不是 * 一个提示,它是一个对象属性。
仔细查看您的执行计划,以确保您获得的是直接路径写入。您应该看到名为LOAD AS SELECT而不是LOAD TABLE CONVENTIONAL的操作,以确保使用直接路径写入。您应该在想要并行化的任何操作之前看到PX ...操作。
如果您使用的是Oracle的现代版本,执行计划的Note部分可能会告诉您为什么没有获得直接路径写入或并行性。SQL监视器报告(通过DBMS_SQLTUNE.REPORT_SQL_MONITOR生成)可以帮助您识别并行度问题和其他性能问题。
在许多系统上,您可以将INSERT的性能提高100倍或更多,但这可能需要付出很大的努力。

相关问题