暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 重哈希连接故障排除

ASKTOM 2021-01-20
207

问题描述

你好克里斯,你好康纳。

我知道,如果必须将哈希表存储在磁盘上,哈希连接性能可能会受到很大影响,但我不知道如何检查这是否发生,这就是查询速度慢的原因。

诚然,我对Oracle中的内存使用情况以及如何跟踪它并不了解。

您能否向我指出一些有关该主题或数据词典的文章,这会有所帮助?

不幸的是,我既没有dba访问权限,也没有跟踪文件的访问权限。

专家解答

如果您获得了包括IOSTATS和MEMSTATS在内的查询的执行计划,则会看到非零磁盘读/写和使用的-Tmp值。

您也可以在v $ sql_workarea中查看。如果操作需要磁盘来处理,则onepass_executions或multipasses_executions将具有非零值:

alter session set workarea_size_policy = manual;
alter session set sort_area_size = 5000;

set serveroutput off
alter session set statistics_level = all;

set feed only
select /*+ use_hash ( o oi )*/ * 
from   co.orders o
join   co.order_items oi
using  ( order_id );
set feed on

select *  
from   dbms_xplan.display_cursor ( format => 'ALLSTATS LAST') ;

---------------------------------------------------------------------------------------------------------------------------------------------------    
| Id  | Operation          | Name        | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  | Writes |  OMem |  1Mem | Used-Mem | Used-Tmp|    
---------------------------------------------------------------------------------------------------------------------------------------------------    
|   0 | SELECT STATEMENT   |             |      1 |        |   3914 |00:00:00.08 |      37 |    114 |     29 |       |       |          |         |    
|*  1 |  HASH JOIN         |             |      1 |   3914 |   3914 |00:00:00.08 |      37 |    114 |     29 |  1185K|  1185K|  311K (6)|    1024K|    
|   2 |   TABLE ACCESS FULL| ORDERS      |      1 |   1950 |   1950 |00:00:00.01 |      15 |      0 |      0 |       |       |          |         |    
|   3 |   TABLE ACCESS FULL| ORDER_ITEMS |      1 |   3914 |   3914 |00:00:00.01 |      22 |      0 |      0 |       |       |          |         |    
---------------------------------------------------------------------------------------------------------------------------------------------------    
                                                                                                                                                       
Predicate Information (identified by operation id):                                                                                                    
---------------------------------------------------                                                                                                    
                                                                                                                                                       
   1 - access("O"."ORDER_ID"="OI"."ORDER_ID")

select operation_type, 
       optimal_executions, onepass_executions, multipasses_executions 
from   v$sql_workarea
where  sql_id = 'fcrs9ngfh0adu';

OPERATION_TYPE   OPTIMAL_EXECUTIONS   ONEPASS_EXECUTIONS   MULTIPASSES_EXECUTIONS   
HASH-JOIN                         0                    0                        1 


(设置workarea_size_policy & sort_area_size是为了在较小的数据集上显示这种效果; 避免在生产系统上这样做!)
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论