Oracle数据库卡死的元凶:Shared Pool与Buffer Cache内存争夺战!

问题现象

数据库hang住了。

一顿检查发现结论是:

Oracle的MMAN进程在进行SGA动态调整,从shared pool中挪动部分内存到buffer cache,期间长时间持有latch:shared pool,但由于长时间无法完成shared pool的shrink,导致其他进程无法获得latch:shared pool,从而出现卡住的情况。

导致内存需要动态调整的原因在于SQL语句的物理读很高,buffer cache需要动态扩大,shared pool需要收缩,SQL语句执行又很长,需要长时间pin住,是触发问题的导火索。

问题问了:Oracle的shared pool和buffer cache区别是什么

Oracle数据库的 Shared Pool(共享池) 和 Buffer Cache(缓冲区缓存) 是SGA(系统全局区)中两个核心且功能不同的内存组件。它们的核心区别在于缓存的内容、管理机制和性能影响。

一、核心功能与缓存内容对比

对比维度 Shared Pool(共享池) Buffer Cache(缓冲区缓存)
核心功能 缓存“代码”和“元数据”,实现SQL、PL/SQL等对象的共享与重用,减少解析开销。 缓存“数据”,存储从数据文件读取的数据块副本,减少物理I/O。
主要缓存内容 1. Library Cache(库缓存):SQL语句、PL/SQL代码、执行计划、解析树等。
2. Dictionary Cache(数据字典缓存/Row Cache):表、列、权限等对象定义信息。
3. Server Result Cache(服务器结果缓存,可选):查询结果集。
4. 控制结构:如锁、资源等。
1. 用户表/索引的数据块
2. Undo段的数据块。
3. 数据块的所有版本(当前块、CR块等)。
数据形态 存储的是可执行代码、元数据信息、结果集,形态和大小不固定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值