讲师中心 微信公众号
AI工具推荐 视频效率加速

在Oracle 12c中如何排查共享临时表空间资源争用?

冬婷同学_1077

冬婷同学_1077

发布时间:2026-10-28 10:51:27

|

560人浏览过

|

来源于php中文网

原创

查v$sort_usage时多个会话共用同一session_addr是因并行查询中该字段指向QC而非PX进程,需关联v$px_session区分真实资源消耗者,避免误杀QC导致PX进程持续写TEMP。

在oracle 12c中如何排查共享临时表空间资源争用?

查 v$sort_usage 时发现多个会话共用同一 session_addr

这其实是假象——v$sort_usage 的 session_addr 字段在并行查询中指向的是 QC(Query Coordinator)会话地址,而非真实干活的 PX 进程(如 P000、P001)。所以你看到“10 个会话挤在同一个 session_addr 下”,实际是 10 个 PX 进程在为同一条 SQL 协同分配临时段,但视图没暴露这个层级。

真正的问题不是“共享”,而是“无法区分”。你无法从该视图判断:是单个大排序占满 TEMP,还是 10 个并行进程各自吃掉 10% 空间却因聚合显示为“一个高用量”。

  • 必须关联 v$px_session:它明确记录了 qcsid(QC 的 sid)、server_name(PX 进程名),可用来反向定位每个 PX 进程的资源归属
  • v$tempseg_usage 在 12c 中仍不带 server_name 或 degree 字段,不能直接用于并行粒度分析
  • 若只靠 v$sort_usage 杀会话,可能只干掉 QC,而 PX 进程仍在后台持续写 TEMP,导致空间继续上涨

用 v$active_session_history 抓 direct path write temp 采样时,sql_id 高频但 plan_hash_value 不一致

说明同一条 SQL 文本在不同执行中走了完全不同的执行路径,其中某些计划触发了磁盘排序/哈希溢出,另一些则没有。这不是资源争用,而是执行计划漂移引发的间歇性 TEMP 暴涨。

典型诱因包括绑定变量窥探失效、统计信息过期、或并行度动态调整(如 parallel_degree_policy = AUTO)。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • 不要只按 sql_id 聚合,必须加 plan_hash_value:否则会把“走内存 HASH JOIN”的采样和“走磁盘 HASH JOIN”的采样混在一起,掩盖真实问题计划
  • 检查 v$sql 中该 sql_id 对应的 is_bind_sensitive、is_shareable 和 executions,确认是否存在子游标分裂
  • 用 DBMS_XPLAN.DISPLAY_CURSOR(sql_id, child_number) 对每个高频 plan_hash_value 单独看执行计划,重点找 TempSpc 列非空、且操作类型为 HASH JOIN 或 SORT ORDER BY 的步骤

多个 PDB 共享 CDB 级临时表空间,但 dba_temp_files 显示文件路径相同

CDB 架构下,PDB 本身不拥有物理临时文件,所有 PDB 默认复用 CDB$ROOT 的临时表空间(除非显式创建本地 TEMP)。路径相同不等于无隔离——Oracle 通过事务级上下文隔离各 PDB 的临时段分配,但资源总量是共享的。

隐患在于:一个 PDB 的批处理 SQL 疯狂消耗 TEMP,会导致其他 PDB 的日常查询也遭遇 ORA-01652,而你从 PDB 内部查 v$tempseg_usage 可能看不到完整视图(需切到 CDB ROOT 查 gv$tempseg_usage)。

  • 在 CDB$ROOT 中执行查询,而非任一 PDB:只有 gv$tempseg_usage 能跨容器汇总,v$tempseg_usage 在 PDB 内仅返回本 PDB 上下文的数据(可能为空或严重低估)
  • 检查 v$pdbs 中各 PDB 的 open_mode 和 status,确认是否所有 PDB 都处于活跃状态;已关闭的 PDB 不参与 TEMP 分配,但其残留临时段可能未释放(极少见,需查 v$temp_extent_pool)
  • 若需强隔离,应在 CDB$ROOT 创建多个临时表空间,并在各 PDB 中 ALTER PLUGGABLE DATABASE ... DEFAULT TEMPORARY TABLESPACE 指定不同实例

查到高消耗 SQL 后,DBMS_XPLAN.DISPLAY_CURSOR 返回 TempSpc 为 NULL,但 direct path write temp 采样持续存在

说明优化器预估失败:CBO 认为该操作可在内存完成(TempSpc = 0),但运行时 PGA 不足或数据倾斜导致强制落盘。这不是 SQL 写法问题,而是内存配置与实际负载不匹配。

常见于并行查询中单个 PX 进程分配到的数据远超平均值(如分区倾斜),或 pga_aggregate_target 设置过低且未启用自动内存管理。

  • 别急着改 SQL,先确认 v$pgastat 中 cache hit percentage 是否低于 90%,以及 total PGA allocated 是否频繁接近 pga_aggregate_target
  • 检查该 SQL 执行时的 v$sql_workarea:对比 actual_mem_used 和 max_mem_used,若后者远大于前者,说明工作区被反复重用并 spill 到磁盘
  • 临时缓解可设 ALTER SESSION SET "_serial_direct_read"=never(防小表全扫触发排序),长期方案是调高 pga_aggregate_target 或启用 memory_max_target 自动均衡
临时表空间争用排查最难的点,往往不在“谁在用”,而在“谁在伪装成别人用”——并行进程、多租户上下文、执行计划漂移,都会让真实资源持有者藏在视图字段背后。盯住 server_name、plan_hash_value、gv$ 前缀和 actual_mem_used 这四个信号,比单纯杀会话或扩容更接近根因。

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

1041

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

3073

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

3070

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

1749

2023.09.19

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2373

2023.09.19

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

3229

2023.09.19

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4689

2023.11.02

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

257

2023.11.08

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn