【问题标题】:Improve query performance in Oracle with tuning通过调优提高 Oracle 中的查询性能
【发布时间】:2021-12-27 21:19:39
【问题描述】:

我正在使用包含 1 亿条记录的表进行 ETL,我从 TERADATA 捕获信息并将其导入 ORACLE。 该过程花费的时间太长,我想知道是否有任何方法可以通过一些调整来提高我的查询性能。
MERGE INTO TABLE_A TB USING (
  select t.COLUMN_A as COLUMN_A_OLD
  from TABLE_B t
  left outer join STAGE s
  on s.COLUMN_B = t.COLUMN_B
  and s.COLUMN_C  = t.COLUMN_C
  and s.COLUMN_D = t.COLUMN_D
  and s.COLUMN_E = t.COLUMN_E
  and s.COLUMN_F = to_date('yyyy-mm-dd 00:00:00','yyyy-mm-dd hh24:mi:ss')
  where t.COLUMN_F = to_date('2100-12-31 00:00:00','yyyy-mm-dd hh24:mi:ss')
  and s.COLUMN_C is null
) stg
on ( stg.COLUMN_A_OLD = tb.COLUMN_A )
WHEN MATCHED THEN
UPDATE SET
  TB.COLUMN_F = sysdate,
  TB.COLUMN_G = $$PARAMETER ,
  TB.COLUMN_H = sysdate;
commit;


谢谢。

【问题讨论】:

  • 您能否先发布查询计划、大致数据量、可用索引以及在这种情况下“太长”对您意味着什么? table_a 有 100 M 行吗? table_b? staging?上述所有的?您是否运行过一次此查询?还是多次?您执行的 ETL 过程似乎很奇怪,它只将两列更新为 sysdate,并将第三列更新为您传入的静态值。
  • 如果您所做的只是更新,那么您为什么要使用合并?对我来说似乎有点矫枉过正
  • 如果您期望 meaningfull 反馈,请检查发布here 的最少信息。还要澄清所有表都在同一个 Oracle 数据库中,而不是在 Teradata 中...

标签: sql oracle performance query-optimization


【解决方案1】:

你尝试过这样的事情吗?


alter session enable parallel dml;

 merge /*+ parallel(10) */ into ….

PARALLEL 提示将启用读并行,但要同时启用写并行,您需要运行上述 ALTER SESSION 命令或使用提示 /*+ ENABLE_PARALLEL_DML */。

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多