`

bug 7716219 hash group by显示消耗大量的temp 表空间

阅读更多
SQL> set autotrace traceonly
SQL> select counter_account,
  2         counter_name,
  3         (transqty - BCCheck) as BCCheck,
  4         TSCheck,
  5         MMCheck,
  6         check_tsid,
  7         Check_Sellthroumanagerid,
  8         city_name_cn
  9    From (select /*+ index(t TRA_SUM_TRANSACTIONDATE_INDEX)*/
 10  mc.counter_account as counter_account,
 11                 mc.counter_name as counter_name,
 12                 sum(t.bccheckqty) as BCCheck,
 13                 sum(case
 14                       when ct.istschecked = 'N' or ct.istschecked is null then
 15                        1
 16                       else
 17                        0
 18                     end) as TSCheck,
 19                 sum(case
 20                       when ct.ismanagerchecked = 'N' or
 21                            ct.ismanagerchecked is null then
 22                        1
 23                       else
 24                        0
 25                     end) as MMCheck,
 26                 ts.user_id as check_tsid,
 27                 sum(t.transactionqty) as transqty,
 28                 mm.user_id as Check_Sellthroumanagerid,
 29                 mct.city_name_cn as city_name_cn
 30            from transaction_summary t
 31            left join css_tsmanagercheck ct on t.counterid = ct.counter_id
 32                                           and ct.check_month = '2010-11'
 33            left join CSS_COUNTER mc on mc.counter_id = t.counterid
 34            left join mst_city mct on mct.city_id = mc.city_id
 35            left join (select c.counter_id, u.user_id
 36                        from CSS_COUNTER      c,
 37                             sec_user_counter uc,
 38                             sec_user         u,
 39                             sec_role         r
 40                       where c.counter_id = uc.counter_id
 41                         and uc.user_id = u.user_id
 42                         and u.role_id = r.role_id
 43                         and r.role_id = '1B0BF35A76EE4247BC86DED761633001') mm on mm.counter_id 
=
 44                                                                                   t.counterid
 45            left join (select c.counter_id, u.user_id
 46                        from CSS_COUNTER      c,
 47                             sec_user_counter uc,
 48                             sec_user         u,
 49                             sec_role         r
 50                       where c.counter_id = uc.counter_id
 51                         and uc.user_id = u.user_id
 52                         and u.role_id = r.role_id
 53                         and r.role_id =
 54                             '95aa7015-c390-47af-8240-72a60aea667a') ts on ts.counter_id =
 55                                                                           t.counterid
 56           WHERE t.transactiondate >= '2010-11-01'
 57             AND t.transactiondate <= '2010-11-30' 
 58           group by t.counterid,
 59                    mc.counter_account,
 60                    mc.counter_name,
 61                    ts.user_id,
 62                    mm.user_id,
 63                    mct.city_name_cn) a
 64  
SQL>  
SQL> 
SQL>  /

----------------------------------------------------------
Plan hash value: 2441329485

----------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                          | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                               |   200M|    82G|       |    25M  (1)| 84:54:35 |
|   1 |  HASH GROUP BY                    |                               |   200M|    82G|   170G|    25M  (1)| 84:54:35 |
|*  2 |   HASH JOIN RIGHT OUTER           |                               |   200M|    82G|       | 10999  (20)| 00:02:12 |
|   3 |    TABLE ACCESS FULL              | MST_CITY                      |  2686 | 53720 |       |     8   (0)| 00:00:01 |
|*  4 |    HASH JOIN RIGHT OUTER          |                               |    48M|    19G|       |  9367   (6)| 00:01:53 |
|   5 |     TABLE ACCESS FULL             | CSS_COUNTER                   |  5252 |   476K|       |    83   (0)| 00:00:02 |
|*  6 |     HASH JOIN RIGHT OUTER         |                               |    10M|  3388M|       |  8890   (2)| 00:01:47 |
|   7 |      VIEW                         |                               |  4805 |   614K|       |   187   (0)| 00:00:03 |
|   8 |       NESTED LOOPS                |                               |  4805 |  1440K|       |   187   (0)| 00:00:03 |
|   9 |        NESTED LOOPS               |                               |   335 | 90115 |       |   187   (0)| 00:00:03 |
|  10 |         NESTED LOOPS              |                               |    92 | 16284 |       |     3   (0)| 00:00:01 |
|* 11 |          INDEX UNIQUE SCAN        | PK2                           |     1 |    55 |       |     0   (0)| 00:00:01 |
|* 12 |          INDEX RANGE SCAN         | SEC_USER_ROLE_ID_IND          |    92 | 11224 |       |     3   (0)| 00:00:01 |
|* 13 |         INDEX RANGE SCAN          | PK_SEC_USER_COUNTER           |     4 |   368 |       |     2   (0)| 00:00:01 |
|* 14 |        INDEX UNIQUE SCAN          | PK_CSS_COUNTER                |    14 |   532 |       |     0   (0)| 00:00:01 |
|* 15 |      HASH JOIN RIGHT OUTER        |                               |  2635K|   495M|  5280K|  8615   (1)| 00:01:44 |
|  16 |       VIEW                        |                               | 37752 |  4829K|       |  1464   (1)| 00:00:18 |
|  17 |        NESTED LOOPS               |                               | 37752 |    11M|       |  1464   (1)| 00:00:18 |
|  18 |         NESTED LOOPS              |                               |  2629 |   690K|       |  1464   (1)| 00:00:18 |
|  19 |          NESTED LOOPS             |                               |   724 |   125K|       |    15   (0)| 00:00:01 |
|* 20 |           INDEX UNIQUE SCAN       | PK2                           |     1 |    55 |       |     0   (0)| 00:00:01 |
|* 21 |           INDEX RANGE SCAN        | SEC_USER_ROLE_ID_IND          |   724 | 88328 |       |    15   (0)| 00:00:01 |
|* 22 |          INDEX RANGE SCAN         | PK_SEC_USER_COUNTER           |     4 |   368 |       |     2   (0)| 00:00:01 |
|* 23 |         INDEX UNIQUE SCAN         | PK_CSS_COUNTER                |    14 |   532 |       |     0   (0)| 00:00:01 |
|* 24 |       HASH JOIN RIGHT OUTER       |                               | 81613 |  5260K|       |  6570   (1)| 00:01:19 |
|* 25 |        TABLE ACCESS FULL          | CSS_TSMANAGERCHECK            |  2662 | 79860 |       |    56   (2)| 00:00:
|  26 |        TABLE ACCESS BY INDEX ROWID| TRANSACTION_SUMMARY           | 81613 |  2869K|       |  6513   (1)
|* 27 |         INDEX RANGE SCAN          | TRA_SUM_TRANSACTIONDATE_INDEX | 81613 |       |       |   253   (1)| 00:00:04 
----------------------------------------------------------------------------------------------------

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

   2 - access("MC"."CITY_ID"=SYS_OP_C2C("MCT"."CITY_ID"(+)))
   4 - access("MC"."COUNTER_ID"(+)=SYS_OP_C2C("T"."COUNTERID"))
   6 - access("MM"."COUNTER_ID"(+)=SYS_OP_C2C("T"."COUNTERID"))
  11 - access("R"."ROLE_ID"=U'1B0BF35A76EE4247BC86DED761633001')
  12 - access("U"."ROLE_ID"=U'1B0BF35A76EE4247BC86DED761633001')
  13 - access("UC"."USER_ID"="U"."USER_ID")
  14 - access("C"."COUNTER_ID"="UC"."COUNTER_ID")
  15 - access("TS"."COUNTER_ID"(+)=SYS_OP_C2C("T"."COUNTERID"))
  20 - access("R"."ROLE_ID"=U'95aa7015-c390-47af-8240-72a60aea667a')
  21 - access("U"."ROLE_ID"=U'95aa7015-c390-47af-8240-72a60aea667a')
  22 - access("UC"."USER_ID"="U"."USER_ID")
  23 - access("C"."COUNTER_ID"="UC"."COUNTER_ID")
  24 - access("T"."COUNTERID"="CT"."COUNTER_ID"(+))
  25 - filter("CT"."CHECK_MONTH"(+)='2010-11')
  27 - access("T"."TRANSACTIONDATE">='2010-11-01' AND "T"."TRANSACTIONDATE"<='2010-11-30')

Note
-----
   - 'PLAN_TABLE' is old version


----------------------------------------------------------
        891  recursive calls
          0  db block gets
      22585  consistent gets
          0  physical reads
          0  redo size
     491828  bytes sent via SQL*Net to client
       3444  bytes received via SQL*Net from client
        193  SQL*Net roundtrips to/from client
         33  sorts (memory)
          0  sorts (disk)
       2880  rows processed

 

oracle 执行计划显示,hash group by消耗了170G的临时表空间,但是此条SQL显示在硬盘上的排序数据为0,不知道是什么原因,metalink 上检查发现一个Bug 7716219  HASH GROUP BY can use excessive TEMP space

具体描述如下:

This note gives a brief overview bug 7716219.
 The content was last updated on: 31-AUG-2010
 Click here for details of each of the sections below.

Affects:

Product (Component) Oracle Server (Rdbms)
Range of versions believed to be affected Versions BELOW 11.2
Versions confirmed as being affected
Platforms affected Generic (all / most platforms affected)

Fixed:

This issue is fixed in

 

Symptoms:

Related To:

Description

<!-- BEGIN BUGTAG DESCRIPTION -->
HASH GROUP BY can use excessive TEMP space.
 
Workaround
  Disable hash group by
  eg: Set "_gby_hash_aggregation_enabled" = false
 
<!-- END BUGTAG DESCRIPTION -->

 

Please note: The above is a summary description only. Actual symptoms can vary. Matching to any symptoms here does not confirm that you are encountering this problem. Always consult with Oracle Support for advice.

 

References

Bug:7716219 (This link will only work for PUBLISHED bugs)
Note:245840.1 Information on the sections in this article

我的数据库版本正好是10.2.0.4,执行计划统计出现问题不知道是不是由于这个 bug引起的,大家看到请帮我解答疑惑,谢谢

分享到:
评论

相关推荐

    释放TEMP表空间占用硬盘空间

    标题与描述概述的知识点主要涉及Oracle数据库中临时表空间(TEMP表空间)的管理与优化,特别是当TEMP表空间占用过多硬盘空间时的处理方法。本文将深入解析这一过程,帮助读者理解并掌握释放TEMP表空间所占用硬盘空间...

    Oracle临时表空间不足和批处理缓慢问题探讨.pdf

    6. Hash Join 的作用:Hash Join 可以提高 SQL 语句的执行效率,但其也可能会消耗大量的临时表空间。 7. Oracle 数据库的性能优化:Oracle 数据库的性能优化需要从多方面入手,包括服务器硬件性能、操作系统设置、...

    转--一次HASH JOIN 临时表空间不足的分析和优化思路

    本文将深入探讨一次Hash JOIN过程中遇到的临时表空间不足的问题,并提供相应的分析和优化思路。 首先,我们需要理解Hash JOIN的基本原理。Hash JOIN是通过在内存中创建一个或两个表的哈希索引来实现两个数据集的...

    oracle分区表之hash分区表的使用及扩展

    Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...

    表空间的过大处理方法.docx

    3. **收缩临时表空间**:当不再需要大量临时空间时,可以进行收缩操作。`SHRINK SPACE` 命令可以释放无用的空间,而 `KEEP` 参数则指定最小保留空间。例如,保持20MB的空间: ``` SQL&gt; ALTER TABLESPACE temp ...

    HASH_hash_stm32hash_stm32hash表_stm32f407_

    4. **高效性**:计算哈希值的过程应该快速且资源消耗低,适合在嵌入式系统中运行。 在STM32F407上实现哈希算法,可能涉及到以下几种常见的哈希算法: - **MD5 (Message-Digest Algorithm 5)**:这是一种较老的哈希...

    hash.rar_HASH算法_fpga hash_hash_zebra85v_哈希表Verilog

    标题中的“hash.rar_HASH算法_fpga hash_hash_zebra85v_哈希表Verilog”揭示了这个压缩包文件的主要内容,它涉及到哈希(Hash)算法在高速Field-Programmable Gate Array(FPGA)上的实现,以及与Zebra85v硬件平台和...

    关于oracle的表空间,分区表,以及索引的总结

    ### Oracle的表空间、分区表及索引的深入解析 #### 表空间(Tablespace)在Oracle中的作用与管理 表空间是Oracle数据库中的逻辑存储单元,它将数据组织成可管理的部分,允许数据库管理员更好地控制数据存储和性能...

    c语言hash表源码

    哈希表(Hash Table)是一种数据结构,它通过计算一个关联数组中的索引来确定一个特定元素的存储位置,使得在平均情况下,查找、插入和删除操作的时间复杂度达到O(1)。C语言中的哈希表实现是程序员常用的数据结构...

    PE导入表-函数列表-HASH值

    当程序加载时,操作系统会解析这个表,将函数地址绑定到程序的内存空间,使得程序能够正确调用这些函数。PE导入表包含以下信息: - 导入库(DLL)的名字 - DLL中导出函数的名字 - 函数的序号(ordinal)或者名称...

    C语言实现的Hash表(代码)

    Hash表是一种数据结构,它通过使用哈希函数将键(key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。在C语言中,我们可以利用结构体和指针来构建一个简单的Hash表。下面将详细介绍Hash表的概念、哈希...

    Hash表模板类

    同时,测试应该包括性能基准测试,以确保哈希表在大量数据时仍能保持预期的性能。 在"hash表模板类"这个压缩包中,你可能找到了一个实现了以上功能的C++源文件。通过阅读和理解代码,你可以学习到自定义哈希表的...

    自己实现的hash表

    在编程领域,哈希表(Hash Table)是一种高效的数据结构,它通过特定的哈希函数将数据映射到一个固定大小的数组中,以实现快速的查找、插入和删除操作。哈希表的关键在于设计良好的哈希函数,该函数能够尽可能均匀地...

    uthash开源的hash函数实现

    UTHASH 是一个开源的 C 语言库,提供了一种简单且高效的哈希表实现,用于在 C 代码中快速查找和管理数据结构。这个库的主要功能是提供一个宏定义的集合,可以方便地将结构体转化为哈希表,进而进行添加、删除、查找...

    hash表的应用

    Hash表应用 (必做) (查找) [问题描述]  设计散列表实现身份证查找系统,对身份证号进行Hash。 [基本要求] (1) 设每个记录有下列数据项:身份证号码(虚构,位数和编码规则与真实一致即可)、姓名、地址; ...

    HASHIN.rar_ABAQUS_Hashin失效准则 abaqus_abaqus hashin_abaqus 三维Hashi

    描述中提到的"abaqus用户子程序,Hashin失效准则,abaqus显示分析,使用三维实体单元"意味着这个压缩包可能包含了一个使用ABAQUS用户子程序(通常以.INP文件格式)实现Hashin失效准则的示例,以及如何在ABAQUS中进行...

    Oracle表分区 建表空间 创建用户

    ### Oracle表分区、建表空间与用户管理 #### 一、表空间的创建与管理 在Oracle数据库中,**表空间**(Tablespace)是物理存储的逻辑容器,它由一个或多个数据文件组成。创建一个新的表空间对于数据库的管理非常重要...

    Hash map 哈希表

    哈希表,也被称为Hash Map,是计算机科学中一种高效的数据结构,用于存储键值对。它通过一种称为哈希函数的过程将键映射到数组的特定位置,从而实现快速的查找、插入和删除操作。在哈希表中,查找时间通常接近常数...

    ORALCE表空间 创建命令 分区表 分区索引

    `AUTOEXTEND`用于自动扩展数据文件,`EXTENT MANAGEMENT`定义了范围管理方式,`SEGMENT SPACE MANAGEMENT`决定了段空间的管理方式,`PERMITTED LOGFILE GROUP`用于指定可以与表空间关联的日志文件组。 接下来,我们...

    geohash:一个解决计算附近距离的php类库

    5. **空间索引**:`geohash`可以作为构建空间索引的基础,使得在大量地理位置数据中查找最近邻或特定范围内的对象变得更加高效。 在PHP中实现`geohash`通常涉及以下几个步骤: 1. **安装库**:可以使用Composer...

Global site tag (gtag.js) - Google Analytics