性能调优技巧-Plsql / sql-Database

时间:2016-08-16 22:05:59

标签: oracle performance sql-tuning database-tuning

我们正面临生产中的性能问题。 Mv referh程序运行了很长时间,差不多13到14个小时。

在MV referh程序中试图引用5 MV。其中一个MV运行时间很长。

以下是运行很长时间的MV脚本。

SELECT rcvt.transaction_id,
    rsh.shipment_num,
    rsh.shipped_date,
    rsh.expected_receipt_date,
    (select rcvt1.transaction_date from rcv_transactions rcvt1
    where rcvt1.po_line_id = rcvt.po_line_id
    AND rcvt1.transaction_type   = 'RETURN TO VENDOR'
    and rcvt1.parent_transaction_id=rcvt.transaction_id
    )transaction_date
  FROM rcv_transactions rcvt,
    rcv_shipment_headers rsh,
    rcv_shipment_lines rsl
  WHERE 1                     =1
  AND rcvt.shipment_header_id =rsl.shipment_header_id
  AND rcvt.shipment_line_id   =rsl.shipment_line_id
  AND rsl.shipment_header_id  =rsh.shipment_header_id
  AND rcvt.transaction_type   = 'RECEIVE';

发货表包含数百万条记录,而上述查询正在尝试提取近60%至70%的数据。我们怀疑数据加载是原因。 我们正在尝试改进上述脚本的性能。所以我们添加了日期过滤器来限制数据。

SELECT rcvt.transaction_id,
    rsh.shipment_num,
    rsh.shipped_date,
    rsh.expected_receipt_date,
    (select rcvt1.transaction_date from rcv_transactions rcvt1
    where rcvt1.po_line_id = rcvt.po_line_id
    AND rcvt1.transaction_type   = 'RETURN TO VENDOR'
    and rcvt1.parent_transaction_id=rcvt.transaction_id
    )transaction_date
  FROM rcv_transactions rcvt,
    rcv_shipment_headers rsh,
    rcv_shipment_lines rsl
  WHERE 1                     =1
  AND rcvt.shipment_header_id =rsl.shipment_header_id
  AND rcvt.shipment_line_id   =rsl.shipment_line_id
  AND rsl.shipment_header_id  =rsh.shipment_header_id
  AND rcvt.transaction_type   = 'RECEIVE'
    AND TRUNC(rsh.creation_date)  >=  NVL(TRUNC((sysdate - profile_value),'MM'),TRUNC(rsh.creation_date) );

对于1年的个人资料,它显示出一些改善,但如果我们给出2年的范围,则比以前的查询更糟糕。

任何改善表现的建议。

请帮忙

1 个答案:

答案 0 :(得分:1)

我将该标量子查询拉出到常规外连接中。

标量子查询的成本核算可以是ManyConnectorsExample,并且你强迫它进行大量单记录查找(可能是通过索引),而不是给它其他选项。

"主查询在选择列表中有一个标量子查询。

因此,Oracle在计划表中显示了两个独立的计划。一个用于驱动查询 - 成本为2,一个用于标量子查询,每次执行时的成本为2083.

但是Oracle并不“知道”标量子查询将运行多少次(即使在很多情况下它可以预测最坏情况),并且不会在执行总成本时为其执行任何成本补贴。查询。"