Oracle 10g数据库优化

时间:2013-10-31 14:30:41

标签: oracle optimization

抱歉我的英文。 我在Oracle 10g上拥有如此庞大的数据库。 我有查询,执行速度很慢。例如,我有查询: 115559行 - 102秒

执行计划:

Plan hash value: 3664903106

------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name                | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------------------------------------------------------------------------------
|   1 |  SORT ORDER BY                      |                     |      1 |  30503 |     50 |00:00:09.33 |    3989 |    33M|  2065K|   29M (0)|
|*  2 |   HASH JOIN RIGHT OUTER             |                     |      1 |  30503 |    115K|00:00:05.71 |    3989 |   862K|   862K| 1186K (0)|
|   3 |    INDEX FAST FULL SCAN             | IX2_SLCND           |      1 |   1387 |   1387 |00:00:00.01 |      17 |       |       |          |
|*  4 |    HASH JOIN RIGHT OUTER            |                     |      1 |  30503 |    115K|00:00:05.47 |    3972 |   785K|   785K| 1145K (0)|
|   5 |     TABLE ACCESS FULL               | DISC                |      1 |     90 |     90 |00:00:00.01 |       7 |       |       |          |
|*  6 |     HASH JOIN RIGHT OUTER           |                     |      1 |  30503 |    115K|00:00:05.24 |    3965 |   776K|   776K|  403K (0)|
|   7 |      VIEW                           | index$_join$_030    |      1 |      2 |      2 |00:00:00.01 |       6 |       |       |          |
|*  8 |       HASH JOIN                     |                     |      1 |        |      2 |00:00:00.01 |       6 |   760K|   760K|  464K (0)|
|   9 |        INDEX FAST FULL SCAN         | IX_CMP_NAME         |      1 |      2 |      2 |00:00:00.01 |       3 |       |       |          |
|  10 |        INDEX FAST FULL SCAN         | PK_CMP              |      1 |      2 |      2 |00:00:00.01 |       3 |       |       |          |
|* 11 |      HASH JOIN RIGHT OUTER          |                     |      1 |  30503 |    115K|00:00:05.01 |    3959 |   756K|   756K| 1066K (0)|
|  12 |       TABLE ACCESS FULL             | TTYPE               |      1 |     26 |     27 |00:00:00.01 |       7 |       |       |          |
|* 13 |       HASH JOIN RIGHT OUTER         |                     |      1 |  30503 |    115K|00:00:04.78 |    3952 |   767K|   767K|  416K (0)|
|  14 |        TABLE ACCESS FULL            | COMMTCOMP           |      1 |      2 |      2 |00:00:00.01 |       7 |       |       |          |
|* 15 |        HASH JOIN RIGHT OUTER        |                     |      1 |  30503 |    115K|00:00:04.54 |    3945 |   760K|   760K| 1037K (0)|
|  16 |         TABLE ACCESS FULL           | TTYPE               |      1 |     26 |     27 |00:00:00.01 |       7 |       |       |          |
|* 17 |         HASH JOIN RIGHT OUTER       |                     |      1 |  30503 |    115K|00:00:04.31 |    3938 |   842K|   842K| 1267K (0)|
|  18 |          TABLE ACCESS FULL          | SLRSSEASONTC        |      1 |   2885 |   2974 |00:00:00.01 |      53 |       |       |          |
|* 19 |          HASH JOIN RIGHT OUTER      |                     |      1 |  30503 |    115K|00:00:04.07 |    3885 |   909K|   909K| 1178K (0)|
|  20 |           TABLE ACCESS FULL         | CAR                 |      1 |    976 |    976 |00:00:00.01 |      16 |       |       |          |
|* 21 |           HASH JOIN RIGHT OUTER     |                     |      1 |  30503 |    115K|00:00:03.84 |    3869 |  1036K|  1036K| 1169K (0)|
|  22 |            INDEX FULL SCAN          | PK_STP              |      1 |    258 |    258 |00:00:00.01 |       1 |       |       |          |
|* 23 |            HASH JOIN                |                     |      1 |  30503 |    115K|00:00:03.60 |    3868 |   778K|   778K| 1165K (0)|
|  24 |             TABLE ACCESS FULL       | WKST                |      1 |     83 |     83 |00:00:00.01 |       7 |       |       |          |
|* 25 |             HASH JOIN               |                     |      1 |  61027 |    115K|00:00:03.37 |    3861 |   804K|   804K|  924K (0)|
|  26 |              VIEW                   | index$_join$_014    |      1 |     12 |     12 |00:00:00.01 |       6 |       |       |          |
|* 27 |               HASH JOIN             |                     |      1 |        |     12 |00:00:00.01 |       6 |   783K|   783K|  919K (0)|
|  28 |                INDEX FAST FULL SCAN | IX_BRANCH_NAME      |      1 |     12 |     12 |00:00:00.01 |       3 |       |       |          |
|  29 |                INDEX FAST FULL SCAN | PK_BRANCH           |      1 |     12 |     12 |00:00:00.01 |       3 |       |       |          |
|* 30 |              HASH JOIN              |                     |      1 |  61027 |    115K|00:00:03.13 |    3855 |   808K|   808K| 1166K (0)|
|  31 |               TABLE ACCESS FULL     | USERS               |      1 |     96 |     96 |00:00:00.01 |      16 |       |       |          |
|  32 |               MERGE JOIN            |                     |      1 |    115K|    115K|00:00:02.90 |    3839 |       |       |          |
|* 33 |                HASH JOIN RIGHT OUTER|                     |      1 |    115K|    115K|00:00:02.32 |    3838 |   848K|   848K| 1169K (0)|
|  34 |                 TABLE ACCESS FULL   | STP                 |      1 |    258 |    258 |00:00:00.01 |       7 |       |       |          |
|* 35 |                 HASH JOIN           |                     |      1 |    115K|    115K|00:00:01.95 |    3831 |   848K|   848K| 1169K (0)|
|  36 |                  TABLE ACCESS FULL  | STP                 |      1 |    258 |    258 |00:00:00.01 |       7 |       |       |          |
|* 37 |                  HASH JOIN          |                     |      1 |    115K|    115K|00:00:01.52 |    3824 |   848K|   848K| 1169K (0)|
|  38 |                   TABLE ACCESS FULL | STP                 |      1 |    258 |    258 |00:00:00.01 |       7 |       |       |          |
|* 39 |                   HASH JOIN         |                     |      1 |    115K|    115K|00:00:01.09 |    3817 |    10M|  1956K|   12M (0)|
|* 40 |                    TABLE ACCESS FULL| SL                  |      1 |    116K|    120K|00:00:00.01 |    2115 |       |       |          |
|* 41 |                    TABLE ACCESS FULL| SLTC                |      1 |    114K|    115K|00:00:00.19 |    1702 |       |       |          |
|* 42 |                SORT JOIN            |                     |    115K|      1 |    115K|00:00:00.27 |       1 | 73728 | 73728 |          |
|* 43 |                 INDEX UNIQUE SCAN   | PK_CMP              |      1 |      1 |      1 |00:00:00.01 |       1 |       |       |          |
------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("SLCND"."ID"="SL"."ID")
   4 - access("SL"."DISC_ID"="DISC"."ID")
   6 - access("CARI"."ID"="SLTC"."CARI_ID")
   8 - access(ROWID=ROWID)
  11 - access("TTYPE"."ID"="SLTC"."TTYPE_ID")
  13 - access("CTC"."ID"="SLRSSEASONTC "."ID_COMMTCOMP")
  15 - access("RS"."ID"="SLRSSEASONTC "."COMMTTYPE_ID")
  17 - access("SLRSSEASONTC "."ID"="SLTC"."ID")
  19 - access("CAR"."ID"="SLTC"."CAR_ID")
  21 - access("STP"."ID"="WKST"."DEF_STP_ID")
  23 - access("SL"."POS_WKST_ID"="WKST"."ID")
  25 - access("USERS"."BRANCH_ID"="BRANCH"."ID")
  27 - access(ROWID=ROWID)
  30 - access("SL"."USR_CAS_ID"="USERS"."ID")
  33 - access("SLTC"."THSTP_ID"="THSTP"."ID")
  35 - access("SLTC"."TSTP_ID"="TSTP"."ID")
  37 - access("SLTC"."FSTP_ID"="FSTP"."ID")
  39 - access("SLTC"."ID"="SL"."ID")
  40 - filter(("SL"."WHEN_DATE">=TO_DATE('2001-10-29 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND "SL"."SCOMP_ID"=1 AND 
              "SL"."WHEN_DATE"<=TO_DATE('2013-10-29 23:59:59', 'yyyy-mm-dd hh24:mi:ss')))
  41 - filter("SLTC"."MANUAL"='N')
  42 - access("SL"."SCOMP_ID"="CMP"."ID")
       filter("SL"."SCOMP_ID"="CMP"."ID")
  43 - access("CMP"."ID"=1)

我需要一些想法让db更快。 谢谢你!

P.S。 我是数据库的新手

1 个答案:

答案 0 :(得分:0)

所以是的,你在那里有一个非常可怕的执行计划。

要优化查询,我们也需要查询,但我会尝试使用您的执行计划输出给您一些提示。

查看所有TABLE ACCESS FULL?这通常需要时间!尝试在表上使用索引,似乎这里使用的索引太少(可能因为没有其他索引存在)。根据执行计划,这里有一些可能有效的简单索引,您可以尝试一下:

CREATE INDEX ix_sltc_id ON sltc(ID);
CREATE INDEX ix_sl_id ON sl(ID);
CREATE INDEX ix_sltc_manual ON sltc(manual);
CREATE INDEX ix_sl_scomp_id ON sl(SCOMP_ID);
CREATE INDEX ix_sl_pos_wkst_id ON sl(POS_WKST_ID);
CREATE INDEX ix_sltc_thstp_id ON sltc(THSTP_ID)
CREATE INDEX ix_sltc_thstp_id ON sltc(THSTP_ID);
CREATE INDEX ix_sltc_tstp_id ON sltc(TSTP_ID);
CREATE INDEX ix_sltc_fstp_id ON sltc(FSTP_ID);

如果没有查询本身,我们在这里非常有限,可能会遗漏大部分图片。使用该查询,我们可以尝试创建更有效的复合索引。

更重要的是,您似乎不在表上使用PRIMARY KEY,因为在具有谓词“ID”的表上有很多TABLE ACCESS FULL操作。确保所有“ID”列都被索引(或者如果确实是主键,则定义为PRIMARY KEY)。

另外,我们发现优化器没有正确的统计信息,请尝试手动刷新架构的统计信息:

EXEC DBMS_STATS.delete_schema_stats('SCOTT');

作为旁注:无论是谁设计了这个模式,都要教育这个人进行数据库设计!

更高级读者的另一个旁注:虽然TABLE ACCESS FULL并不总是坏的(有很多情况下全表扫描比通过索引访问更快),但它通常表示缺少索引。因此,设置索引和刷新统计信息应该可以提高性能。