ITPub博客

首页 > 数据库 > Oracle > oracle 中对于复杂的SQL语句,我们常用以下步骤进行优化

oracle 中对于复杂的SQL语句,我们常用以下步骤进行优化

原创 Oracle 作者:310zhang 时间:2020-07-02 14:37:38 0 删除 编辑
对于非常复杂语句的SQL TUNING 问题,我们都是遵循下面的思路:
1. 先检查之前有没有好的执行计划,如果之前的执行计划是比较好的,那么可以使用 SQL Profile 来固定好的执行计划。

比如可以根据 note 1400903.1 的步骤,类似如下:


a). 我们有两个语句

select ename from scott.emp where ename='MILLER';

它的SQL_ID是 329d885bxvrcr ,plan hash value是 3045807146
select /*+ FULL (EMP) */ ename from scott.emp where ename='MILLER';
它的SQL_ID是 4f74t4ab7rd5y ,plan hash value是 2872589290

我们的目的就是把 4f74t4ab7rd5y 的plan转移给 329d885bxvrcr


b). 调用 coe_load_sql_profile.sql 来转移plan
比如:
SQL> @coe_load_sql_profile.sql
Parameter 1:
ORIGINAL_SQL_ID (required)

Enter value for 1: 329d885bxvrcr =======>此处填写原始的SQL的SQL_ID


Parameter 2:

MODIFIED_SQL_ID (required)

Enter value for 2: 4f74t4ab7rd5y =======>此处填写带hint的SQL的SQL_ID


Parameter 3:

PLAN_HASH_VALUE (required)
Enter value for 3: 2872589290 =======>此处填写带hint的SQL的plan hash value (期望的plan)

此时SQL Profile就产生了


c). 您可以再次验证原来的SQL的plan是否就已经按照我们的期望改变了


2. 如果之前也没有好的执行计划,那么接下来需要收集统计信息;因为优化器是根据统计信息来生成执行计划,所以最新的统计信息经常可以修正不好的执行计划。


3. 如果收集统计信息也没有能够让 SQL 性能变好,那么接下来需要使用 SQL Tuning Advisory 来帮我们优化,看是否可以找到一些建议。

我注意到您实际上已经尝试过这种方式了。


4. 如果上面的方法都不能解决问题,那么接下来就需要从 SQL 语句本身入手。
通过联系应用团队修改 SQL 逻辑来进一步优化了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69902490/viewspace-2701993/,如需转载,请注明出处,否则将追究法律责任。

全部评论

注册时间:2018-12-12

  • 博文量
    6
  • 访问量
    2181