My Oracle Support Banner

パーティション・プルーニングを行う副問合せのコストが全パーティションにアクセスする場合と変わらない (Doc ID 2678388.1)

Last updated on SEPTEMBER 28, 2020

適用範囲:

Oracle Database - Enterprise Edition - バージョン 10.2.0.4 以降
この文書の内容はすべてのプラットフォームに適用されます。
This problem can occur on any platform.


現象

パーティション表に対する問合せを実行する時、副問合せプルーニングで排除されるパーティションの数がコストに影響しません。その結果、ディメンジョン・ベースの副問合せプルーニングを使用したより良いアクセス・パスが選択されない可能性があります。

実行例:

1パーティションしかアクセスしない場合:

次の実行計画では、DIMENSIONに対する 2008年12月 -> 2009年1月 の条件により、PARTITIONED_TAB の1パーティションにのみアクセスします。

----------------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name             | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                  |   111 |  4551 |  1861K  (5)| 03:44:09 |       |       |
|   1 |  HASH GROUP BY              |                  |   111 |  4551 |  1861K  (5)| 03:44:09 |       |       |
|*  2 |   HASH JOIN                 |                  |  3275K|   128M|  1860K  (5)| 03:44:02 |       |       |
|   3 |    TABLE ACCESS FULL        | ANOTHER_TABLE    |    28 |   168 |     2   (0)| 00:00:01 |       |       |
|*  4 |    HASH JOIN                |                  |  3275K|   109M|  1860K  (5)| 03:44:02 |       |       |
|*  5 |     TABLE ACCESS FULL       | DIMENSION        |   274 |  3562 |    16   (0)| 00:00:01 |       |       |
|   6 |     PARTITION RANGE SUBQUERY|                  |    18M|   388M|  1859K  (5)| 03:43:58 |KEY(SQ)|KEY(SQ)|
|*  7 |      TABLE ACCESS FULL      | PARTITIONED_TAB  |    18M|   388M|  1859K  (5)| 03:43:58 |KEY(SQ)|KEY(SQ)|
----------------------------------------------------------------------------------------------------------------

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

   5 - filter("A13"."WEEK">=200812 AND "A13"."WEEK"<=200901)


12パーティションにアクセスする場合:

次の実行計画では、DIMENSIONに対する 2007年1月 -> 2009年1月 の条件により、PARTITIONED_TAB の12パーティションにアクセスします。


----------------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name             | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                  |   292 | 11972 |  1863K  (5)| 03:44:22 |       |       |
|   1 |  HASH GROUP BY              |                  |   292 | 11972 |  1863K  (5)| 03:44:22 |       |       |
|   2 |   HASH JOIN                 |                  |  8619K|   337M|  1860K  (5)| 03:44:03 |       |       |
|   3 |    TABLE ACCESS FULL        | ANOTHER_TABLE    |    28 |   168 |     2   (0)| 00:00:01 |       |       |
|   4 |    HASH JOIN                |                  |  8619K|   287M|  1860K  (5)| 03:44:02 |       |       |
|*  5 |     TABLE ACCESS FULL       | DIMENSION        |   722 |  9386 |    16   (0)| 00:00:01 |       |       |
|   6 |     PARTITION RANGE SUBQUERY|                  |    18M|   388M|  1859K  (5)| 03:43:58 |KEY(SQ)|KEY(SQ)|
|   7 |      TABLE ACCESS FULL      | PARTITIONED_TAB  |    18M|   388M|  1859K  (5)| 03:43:58 |KEY(SQ)|KEY(SQ)|
----------------------------------------------------------------------------------------------------------------

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

   5 - filter("A13"."WEEK">=200701 AND "A13"."WEEK"<=200901)



全パーティションにアクセスする場合:
次の実行計画では、DIMENSIONに対する 2006年 -> 2009年 の条件により、PARTITIONED_TAB の全パーティションにアクセスします。

-----------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name             | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |                  |   447 | 18327 |  1864K  (5)| 03:44:33 |       |       |
|   1 |  HASH GROUP BY         |                  |   447 | 18327 |  1864K  (5)| 03:44:33 |       |       |
|*  2 |   HASH JOIN            |                  |    13M|   515M|  1860K  (5)| 03:44:04 |       |       |
|   3 |    TABLE ACCESS FULL   | ANOTHER_TABLE    |    28 |   168 |     2   (0)| 00:00:01 |       |       |
|*  4 |    HASH JOIN           |                  |    13M|   440M|  1860K  (5)| 03:44:02 |       |       |
|*  5 |     TABLE ACCESS FULL  | DIMENSION        |  1105 | 14365 |    16   (0)| 00:00:01 |       |       |
|   6 |     PARTITION RANGE ALL|                  |    18M|   388M|  1859K  (5)| 03:43:58 |     1 |    52 |
|*  7 |      TABLE ACCESS FULL | PARTITIONED_TAB  |    18M|   388M|  1859K  (5)| 03:43:58 |     1 |    52 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   5 - filter("A13"."WEEK">=200601 AND "A13"."WEEK"<=200901)


PARTITONED_TAB に対するアクセスのコストが、実行時に実際にアクセスすることになるパーティションの数に関係なく、すべてのケースで同じ値になっています。

原因

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


本書の内容
現象
原因
解決策
参照情報

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.