如何在Oracle中查找存储过程的成本并对其进行优化

ram*_*esh 0 oracle performance plsql stored-procedures query-optimization

有没有人让我知道是否有任何方法可以找出Oracle中存储过程的成本?如果没有直接的方式,我想知道任何替代品.
我发现成本的方式是对存储过程中使用的所有查询进行自动跟踪,然后根据查询执行的频率估算proc成本.
除此之外,我想建议优化我的存储过程,尤其是下面给出的查询.
过程的逻辑:
下面是在我的存储过程中用作游标的动态sql查询.此游标在循环内打开并获取.我获取信息并将它们放入varray中,计算数据然后将其插入表中.
我的目标是找出proc的成本以及优化sp.

SELECT DISTINCT acct_no    
FROM raw
WHERE 1=1
AND code = ''' || code ||
''' AND qty       < 0  
AND acct_no 
IN (SELECT acct_no FROM ' || table_name || ' WHERE counter = 
(SELECT MAX(counter) FROM ' || table_name || '))
Run Code Online (Sandbox Code Playgroud)

Vin*_*rat 5

分析SQL和PLSQL性能的最佳工具之一是本机SQL跟踪.

  1. 在会话中启用跟踪:

    SQL> alter session set SQL_TRACE=TRUE;
    
    Session altered
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行你的程序

  3. 退出会话

  4. 导航到您的服务器udump目录并找到您的跟踪文件(通常是最新的)

  5. 运行tkprof

这将生成一个文件,其中包含包含大量信息的所有语句的列表,包括每个语句的执行次数,查询计划和统计信息.这比为每个选择手动运行计划更加详细和精确.

如果要优化过程的性能,通常需要按执行(使用sort=EXEELA)或获取SQL 所花费的时间对跟踪文件进行排序,并尝试优化最有效的查询.

您还可以在步骤1中使用以下命令创建跟踪文件日志等待事件:

ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
Run Code Online (Sandbox Code Playgroud)