首先,这是Oracle。如果我这样做......
execute my_package.sp_execute_my_procedure('...', '...');
它似乎无限期地运行(我让它过夜)。
但是,如果我从存储过程中获取代码,将其打到pl / sql匿名块中,将declare关键字放在我的单个游标上并运行它,它会在10分钟内完成。这需要多长时间。
如果没有发布所有代码,至少马上就可以了,有没有人见过这样的东西?
更新:好的,所以我注意到当我从v $ session中选择时,在运行proc时我得到的是一个“UNKNOWN”blocking_session_status,其中包含“direct path write temp”事件。
到目前为止,我无法用谷歌搜索到目前为止这意味着什么。
答案 0 :(得分:3)
在它甚至可以运行代码之前,可能存在阻塞会话的包对象的某种争用。
当execute
命令挂起时,请查询V$SESSION
以查看该会话正在等待的内容。
答案 1 :(得分:0)
您的PL / SQL代码是否使用绑定变量,而您的DECLARE块在其中使用了文字?这可能导致不同的计划,从而产生不同的性能。
答案 2 :(得分:0)
但是,如果我从存储过程中获取代码,请将其打成pl / sql匿名 阻止,将declare关键字放在我的单个游标上并运行它,它以10完成 分钟。
...
它基本上有一个很大的选择,然后对于select中的每一行它做了一大堆 插入。
您是否包含插页?