【发布时间】:2012-06-20 19:28:34
【问题描述】:
我在 Oracle 10g 中有一个 INSERT 查询卡在“来自 dblink 的 SQL*Net 消息”事件上。它看起来像:
INSERT INTO my_table (A, B, C, ...)
SELECT A, B, C, ... FROM link_table@other_system;
我没有看到my_table 上的任何锁,除了我正在尝试执行的 INSERT 中的锁。 link_table@other_system 上的 SELECT 查询在单独运行时可以顺利完成。我只有在尝试进行 INSERT 时才会遇到这个问题。
有人知道这里会发生什么吗?
更新 单独运行时,SELECT 在约 1.5 分钟内返回 4857 行。在我决定杀死它之前,INSERT 运行了一个多小时并显示此等待消息。
更新 我在我的方法中发现了一个错误。我使用日期范围来限制结果。我仅在测试 SELECT 时使用的日期范围是在最后一次在 link_table 上运行 OraStats 之前,但我在测试 INSERT 时使用的日期范围是在最后一次在 link_table 上运行 OraStats 之后。所以,这误导我相信插入有问题。我这样做不是很科学;我的错。
【问题讨论】:
-
SELECT真的只命中一张没有谓词的表吗?还是在做连接和过滤?独立的SELECT和INSERT ... SELECT的查询计划是否相同? -
你抓住了我。有几个连接,但都在同一个 dblink 上。如何查看查询计划?
标签: sql oracle insert oracle10g