繁体   English   中英

SQL Developer中流水线函数的性能很差

[英]Performance is poor of pipelined function in SQL Developer

我有一个管道表功能,例如

FUNCTION FOO
(
    <PARAMETERS_LIST>
) RETURN T_TAB PIPELINED
AS
BEGIN
FOR rec IN
(<A LITTLE BIT COMPLEX QUERY WITH PARAMETERS_LIST>)
  LOOP
    PIPE row(T_WF(<COLUMN_LIST>));
  END LOOP;
  RETURN;
END FOO;

我在SQL Developer中通过select * from TABLE(FOO(<PARAMETERS_LIST>)) WHERE ROWNUM <= 200测试查询。 SQL Developer需要9秒钟才能返回数据。

直接在SQL Developer中运行<A LITTLE BIT COMPLEX QUERY WITH PARAMETERS_LIST>需要花费0.9秒的时间。

为什么流水线功能这么慢?

在不知道数据库或实际功能的情况下很难说,可能是一系列事情,例如缺少索引。

您可以做的是看看oracle用于执行查询的计划:

explain plan for select * from TABLE(FOO(<PARAMETERS_LIST>)) WHERE ROWNUM <= 200

SELECT * 
FROM   TABLE(DBMS_XPLAN.DISPLAY);

可能会为您提供瓶颈位置的线索。

顺便说一下,您正在函数中使用循环,这可能会导致上下文切换,这肯定会降低性能(很多)。 如果可以的话,尝试阻止它。 有关上下文切换的更多信息: http : //rajiboracle.blogspot.nl/2014/06/context-switches-and-performance-issue.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM