问题描述
你好克里斯,你好康纳。
我知道,如果必须将哈希表存储在磁盘上,哈希连接性能可能会受到很大影响,但我不知道如何检查这是否发生,这就是查询速度慢的原因。
诚然,我对Oracle中的内存使用情况以及如何跟踪它并不了解。
您能否向我指出一些有关该主题或数据词典的文章,这会有所帮助?
不幸的是,我既没有dba访问权限,也没有跟踪文件的访问权限。
我知道,如果必须将哈希表存储在磁盘上,哈希连接性能可能会受到很大影响,但我不知道如何检查这是否发生,这就是查询速度慢的原因。
诚然,我对Oracle中的内存使用情况以及如何跟踪它并不了解。
您能否向我指出一些有关该主题或数据词典的文章,这会有所帮助?
不幸的是,我既没有dba访问权限,也没有跟踪文件的访问权限。
专家解答
如果您获得了包括IOSTATS和MEMSTATS在内的查询的执行计划,则会看到非零磁盘读/写和使用的-Tmp值。
您也可以在v $ sql_workarea中查看。如果操作需要磁盘来处理,则onepass_executions或multipasses_executions将具有非零值:
(设置workarea_size_policy & sort_area_size是为了在较小的数据集上显示这种效果; 避免在生产系统上这样做!)
您也可以在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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




