Rub*_*bio 0 sql-standard oracle-12c
我们正在从 Oracle 12c 执行大量 ETL 负载。Oracle 优化器时不时地决定为之前运行良好的 SQL 语句创建一个新的执行计划。通常这会导致 10 倍的性能下降。当我询问客户 DBA 和 Oracle 顾问(客户是金牌合作伙伴)时,他们通常会要求我们将 ANSI 连接转换为传统的 Oracle 连接。通常这有帮助。我的问题是,Oracle 是否承认对 ANSI 连接的支持不佳?Oracle 是否建议使用传统连接?(我读过 Oracle 的书,说明正好相反。)
Oracle 的“Ask TOM”团队的 Chris Saxon已经回答了这个问题,他解释了为什么 ANSI 连接比旧的 Oracle 语法更可取:
这是因为有许多限制适用于 (+) 运算符,但不适用于“外连接”子句。点击链接获取完整列表。
文章确实承认在某些情况下可能需要旧的 Oracle 语法(物化视图不支持 ANSI - 在他看来应该“修复” - 暗示这是一个错误)。
Oracle 建议您使用 FROM 子句 OUTER JOIN 语法而不是 Oracle 连接运算符。使用 Oracle 连接运算符 (+) 的外连接查询受以下规则和限制的约束,这些规则和限制不适用于 FROM 子句 OUTER JOIN 语法:
(排除规则 - 按照链接)
在您的情况下,您可能需要仔细查看计划管理(以前称为计划稳定性 -此处为不错的 Oracle 白皮书)。该站点 ( oracle-base ) 是 Oracle 所有事物的绝佳站点 - 无论我在做什么(开发、测试、生产...),我都会将它排在我的前 5 名之列。
最大的好处是,当计划从一种优化倾斜到另一种优化时,性能不会出现重大波动 - 您为此付出的代价是您也不会看到性能改进!如果您确实实施了计划管理,那么您应该不时重新审视那些管理计划(在开发/测试中)以确保它们仍然是最佳的(或至少令人满意)。
归档时间: |
|
查看次数: |
924 次 |
最近记录: |