Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

7

主题
1#
发表于 2013-8-22 14:16:13 | 查看: 4268| 回复: 5
本帖最后由 sunjt888@qq.com 于 2013-8-22 14:16 编辑

Count 的执行计划
  1. SQL>
  2. SQL> SELECT count(1)
  3.   2    FROM
  4.   3         BIDW.DW_STORE_D      T46342 ,
  5.   4         BIDW.DW_ITEM_HIER_DH T47577 ,
  6.   5         BIDW.DW_ITEM_D       T47190 ,
  7.   6         BIDW.DW_DAY_D        T46412 ,
  8.   7         BIDW.DW_SALES_F      T46230
  9.   8   WHERE (T46230.ITEM_WID = T47190.ROW_WID AND
  10.   9         T46230.ORG_WID = T46342.ROW_WID AND
  11. 10         T46230.SALE_DATE_WID = T46412.DAY_WID AND
  12. 11         T47190.HIER1_WID = T47577.ROW_WID AND
  13. 12         T46412.FIN_MONTH_NAME = '2013年07月');


  14. 执行计划
  15. ----------------------------------------------------------
  16. Plan hash value: 3967282546

  17. ----------------------------------------------------------------------------------------------------------------------------
  18. | Id  | Operation                     | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
  19. ----------------------------------------------------------------------------------------------------------------------------
  20. |   0 | SELECT STATEMENT              |                    |     1 |    79 |       |   448K  (1)| 01:29:46 |       |       |
  21. |   1 |  SORT AGGREGATE               |                    |     1 |    79 |       |            |          |       |       |
  22. |*  2 |   HASH JOIN                   |                    |    98M|  7391M|       |   448K  (1)| 01:29:46 |       |       |
  23. |   3 |    INDEX FAST FULL SCAN       | DW_STORE_D_PK      |  4770 | 23850 |       |     6   (0)| 00:00:01 |       |       |
  24. |*  4 |    HASH JOIN                  |                    |    98M|  6923M|       |   448K  (1)| 01:29:40 |       |       |
  25. |   5 |     INDEX FAST FULL SCAN      | DW_ITEM_HIER_DH_PK | 22227 |   108K|       |    14   (0)| 00:00:01 |       |       |
  26. |*  6 |     HASH JOIN                 |                    |    98M|  6456M|    10M|   447K  (1)| 01:29:34 |       |       |
  27. |   7 |      TABLE ACCESS FULL        | DW_ITEM_D          |   490K|  5273K|       |  8837   (1)| 00:01:47 |       |       |
  28. |*  8 |      HASH JOIN                |                    |    98M|  5426M|       |   112K  (2)| 00:22:34 |       |       |
  29. |*  9 |       TABLE ACCESS FULL       | DW_DAY_D           |    30 |   570 |       |   102   (0)| 00:00:02 |       |       |
  30. |  10 |       PARTITION RANGE SUBQUERY|                    |   159M|  5926M|       |   111K  (2)| 00:22:24 |KEY(SQ)|KEY(SQ)|
  31. |  11 |        INDEX FAST FULL SCAN   | DW_SALES_F_N06     |   159M|  5926M|       |   111K  (2)| 00:22:24 |KEY(SQ)|KEY(SQ)|
  32. ----------------------------------------------------------------------------------------------------------------------------

  33. Predicate Information (identified by operation id):
  34. ---------------------------------------------------

  35.    2 - access("T46230"."ORG_WID"="T46342"."ROW_WID")
  36.    4 - access("T47190"."HIER1_WID"="T47577"."ROW_WID")
  37.    6 - access("T46230"."ITEM_WID"="T47190"."ROW_WID")
  38.    8 - access("T46230"."SALE_DATE_WID"="T46412"."DAY_WID")
  39.    9 - filter("T46412"."FIN_MONTH_NAME"='2013年07月')

  40. Note
  41. -----
  42.    - dynamic sampling used for this statement (level=2)


  43. 统计信息
  44. ----------------------------------------------------------
  45.           4  recursive calls
  46.           0  db block gets
  47.       59177  consistent gets
  48.       58481  physical reads
  49.           0  redo size
  50.         537  bytes sent via SQL*Net to client
  51.         524  bytes received via SQL*Net from client
  52.           2  SQL*Net roundtrips to/from client
  53.           1  sorts (memory)
  54.           0  sorts (disk)
  55.           1  rows processed

  56. SQL>
复制代码
SUM的执行计划
  1. SQL>
  2. SQL>
  3. SQL> SELECT SUM(T46230.SALES_QTY)
  4.   2    FROM
  5.   3         BIDW.DW_STORE_D      T46342 ,
  6.   4         BIDW.DW_ITEM_HIER_DH T47577 ,
  7.   5         BIDW.DW_ITEM_D       T47190 ,
  8.   6         BIDW.DW_DAY_D        T46412 ,
  9.   7         BIDW.DW_SALES_F      T46230
  10.   8   WHERE (T46230.ITEM_WID = T47190.ROW_WID AND
  11.   9         T46230.ORG_WID = T46342.ROW_WID AND
  12. 10         T46230.SALE_DATE_WID = T46412.DAY_WID AND
  13. 11         T47190.HIER1_WID = T47577.ROW_WID AND
  14. 12         T46412.FIN_MONTH_NAME = '2013年07月');

  15. 执行计划
  16. ----------------------------------------------------------
  17. Plan hash value: 3293842530

  18. -------------------------------------------------------------------------------------------------------------------------------------
  19. | Id  | Operation                              | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
  20. -------------------------------------------------------------------------------------------------------------------------------------
  21. |   0 | SELECT STATEMENT                       |                    |     1 |    92 |       |   653K  (1)| 02:10:40 |       |       |
  22. |   1 |  SORT AGGREGATE                        |                    |     1 |    92 |       |            |          |       |       |
  23. |*  2 |   HASH JOIN                            |                    |    98M|  8608M|       |   653K  (1)| 02:10:40 |       |       |
  24. |   3 |    INDEX FAST FULL SCAN                | DW_STORE_D_PK      |  4770 | 23850 |       |     6   (0)| 00:00:01 |       |       |
  25. |*  4 |    HASH JOIN                           |                    |    98M|  8140M|       |   652K  (1)| 02:10:35 |       |       |
  26. |   5 |     INDEX FAST FULL SCAN               | DW_ITEM_HIER_DH_PK | 22227 |   108K|       |    14   (0)| 00:00:01 |       |       |
  27. |*  6 |     HASH JOIN                          |                    |    98M|  7672M|    10M|   652K  (1)| 02:10:29 |       |       |
  28. |   7 |      TABLE ACCESS FULL                 | DW_ITEM_D          |   490K|  5273K|       |  8837   (1)| 00:01:47 |       |       |
  29. |   8 |      NESTED LOOPS                      |                    |       |       |       |            |          |       |       |
  30. |   9 |       NESTED LOOPS                     |                    |    98M|  6643M|       |   257K  (1)| 00:51:25 |       |       |
  31. |* 10 |        TABLE ACCESS FULL               | DW_DAY_D           |    30 |   570 |       |   102   (0)| 00:00:02 |       |       |
  32. |  11 |        PARTITION RANGE ITERATOR        |                    |  3252K|       |       |   568   (7)| 00:00:07 |   KEY |   KEY |
  33. |* 12 |         INDEX RANGE SCAN               | DW_SALES_F_N01     |  3252K|       |       |   568   (7)| 00:00:07 |   KEY |   KEY |
  34. |  13 |       TABLE ACCESS BY LOCAL INDEX ROWID| DW_SALES_F         |  3252K|   161M|       |   240K  (1)| 00:48:06 |     1 |     1 |
  35. -------------------------------------------------------------------------------------------------------------------------------------

  36. Predicate Information (identified by operation id):
  37. ---------------------------------------------------

  38.    2 - access("T46230"."ORG_WID"="T46342"."ROW_WID")
  39.    4 - access("T47190"."HIER1_WID"="T47577"."ROW_WID")
  40.    6 - access("T46230"."ITEM_WID"="T47190"."ROW_WID")
  41.   10 - filter("T46412"."FIN_MONTH_NAME"='2013年07月')
  42.   12 - access("T46230"."SALE_DATE_WID"="T46412"."DAY_WID")

  43. Note
  44. -----
  45.    - dynamic sampling used for this statement (level=2)

  46. SQL>
复制代码
DW_SALES_F 表 2亿条数据
计算Count时间是:0.7秒,用的索引:DW_SALES_F_N06
计算SUM的时间:20分钟,用的索引:DW_SALES_F_N01

怎么相差这么大呢,计算SUM为什么不走DW_SALES_F_N06?

Index.png (30.09 KB, 下载次数: 237)

Index

Index

2#
发表于 2013-8-22 14:28:31

一个好的问题 的基本要素:一个好的标题、 完整的版本信息、 完整的日志信息、 报错信息
请使用 sql health check 脚本 分析该SQL 然后上传HTML
http://www.oracledatabase12g.com ... h-check-script.html

回复 只看该作者 道具 举报

3#
发表于 2013-8-22 14:48:38
附件是使用 sql health check 脚本 分析该SQL 生成的HTML。下次一定吸取建议

sqlhc_DWH_bidb1_11.2.0.3.0_dj09tb24g5gqp_20130822143916.html

25.66 KB, 下载次数: 472

回复 只看该作者 道具 举报

4#
发表于 2013-8-22 14:54:55
SELECT COUNT(1)
  FROM
       DW_STORE_D      T46342 ,
       DW_ITEM_HIER_DH T47577 ,
       DW_ITEM_D       T47190 ,
       DW_DAY_D        T46412 ,
       DW_SALES_F      T46230
WHERE (T46230.ITEM_WID = T47190.ROW_WID AND
       T46230.ORG_WID = T46342.ROW_WID AND
       T46230.SALE_DATE_WID = T46412.DAY_WID AND
       T47190.HIER1_WID = T47577.ROW_WID AND
       T46412.FIN_MONTH_NAME = '2013年07月')

sqlhc_DWH_bidb1_11.2.0.3.0_f88znaahg0dta_20130822144551.html

26.14 KB, 下载次数: 432

回复 只看该作者 道具 举报

5#
发表于 2013-8-22 15:01:05
SELECT count(1)
  FROM BIDW.DW_STORE_D      T46342,
       BIDW.DW_ITEM_HIER_DH T47577,
       BIDW.DW_ITEM_D       T47190,
       BIDW.DW_DAY_D        T46412,
       BIDW.DW_SALES_F      T46230
WHERE (T46230.ITEM_WID = T47190.ROW_WID AND
       T46230.ORG_WID = T46342.ROW_WID AND
       T46230.SALE_DATE_WID = T46412.DAY_WID AND
       T47190.HIER1_WID = T47577.ROW_WID AND
       T46412.FIN_MONTH_NAME = '2013年07月');



DW_SALES_F   T46230       DW_SALES_F    没有驱动谓词

T46230.ITEM_WID = T47190.ROW_WID AND
T46230.ORG_WID = T46342.ROW_WID AND
T46230.SALE_DATE_WID = T46412.DAY_WID




DW_SALES_F_N01      索引


COUNT(1)==>  任意一个 主键 或者非空索引均可以满足 其需求

SUM(T46230.SALES_QTY) ==》 如果没有对应的索引 则必须 访问表TABLE ACCESS BY LOCAL INDEX ROWID| DW_SALES_F   

在IX_SEL 不佳的情况下, 这样做是很慢的。

回复 只看该作者 道具 举报

6#
发表于 2013-8-22 15:02:55
action plan:

set linesize 200 pagesize 2000
@?/rdbms/admin/sqltrpt


输入dj09tb24g5gqp

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-6-1 19:54 , Processed in 0.056648 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569