【案例94】笛卡尔积导致报“临时表空间不足”

问题现象

NC65,前台操作:审核生产报告,报错"临时表空间不足"的错误。

问题分析

通过如下脚本监控到的sql和等待事件,发现direct path write temp等待事件。

sql 复制代码
select last_call_et,v.event,
    s.sql_id,
      ---   s.SQL_FULLTEXT,
         s.SQL_TEXT,
        v.inst_id,
         V.SID,
         V.CLIENT_IDENTIFIER,
         v.blocking_session,
         v.blocking_session_status,
         'alter system kill session ''' || v.sid || ',' || v.serial# || ''' immediate;',
          v.USERNAME,
         s.CPU_TIME,
         s.ELAPSED_TIME,
         v.PROGRAM,
         'kill -9 ' || p.spid,
         v.CLIENT_INFO,
         v.SQL_HASH_VALUE,
         v.SQL_ADDRESS,
         v.MACHINE,
         v.TERMINAL, s.DISK_READS,s.BUFFER_GETS,s.SORTS,s.SHARABLE_MEM,s.PERSISTENT_MEM,s.RUNTIME_MEM,s.ROWS_PROCESSED    
from gv$session v, gv$process p, gv$sql s  
   where v.last_call_et > 0  
     and v.status = 'ACTIVE'
     and v.username != 'SYS'
     and p.addr = v.paddr
     and s.ADDRESS = v.SQL_ADDRESS
     and s.HASH_VALUE = v.SQL_HASH_VALUE
   order by last_call_et desc;

发现direct path write temp 这个等待事件是hash的驱动表太大内存放不下,去临时表里进行了,极大的影响性能判断是执行计划有问题。

执行计划如下,发现53T的数据在临时表

解决方案

把笛卡尔积关掉,执行计划再看需要hash 的尺寸明显减少,从而解决问题。

sql 复制代码
alter system set '_optimizer_mjc_enabled'=false
相关推荐
峥嵘life16 小时前
Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结
android·开发语言·人工智能·php
M-Robots echo16 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
电商API_1800790524716 小时前
京东商品详情API技术文章
大数据·运维·人工智能·网络爬虫
不可求~16 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
Lumistory17 小时前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
mldong17 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
三言老师17 小时前
秘诀-如何远程SSN访问家里的八台电脑(frp 实操方案)
linux·运维·ssh
躺不平的理查德18 小时前
ARCH与交叉编译器的关系
服务器·arm
mqiqe18 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一5118 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依