共享池

本文详细阐述了Oracle共享池的四个关键组件:库缓存、数据字典缓存、PL/SQL区和SQL查询及PL/SQL函数结果缓存。重点解释了每个组件的功能、工作原理以及如何通过缓存机制提升数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共享池是最复杂的SGA结构,因为它分为许多子结构。这些子结构由Oracle服务器内部管理。
如下,4个共享池组件:
*库缓存
*数据字典缓存
*PL/SQL区
*SQL查询和PL/SQL函数结果缓存
共享池中的所有结构都是自动管理的,即共享池的大小是动态的,可以对其进行自动管理。
1.库缓存
库缓存是内存区域,按其已分析的格式存储最近执行的代码。分析指把变成人员编写的代码转换成可执行的代码,通过把代码缓存在共享池,可以在不重新分析的情况下重用,极大的提高性能。分析sql代码会占用一些时间。我们分析一个简单的sql语句:
select * from products where product_id=100;
在执行此语句之前,Oracle服务器必须计算出它的含义以及执行方法。例如,什么是products?这是个表还是个同义词,还是个视图?它是否存在?再看"*",如果products是表,则此表包含哪些列?用户有权查看此表么?这些问题及其它任何问题的答案只有通过查询数据字典才可以找到。
(注:SELECT与select是不一样的)
在了解了语句的真实含义后,服务器必须确定如何以最佳方式执行它。product_id列是否有索引吗,如果有索引,那么,是使用索引快还是全表扫描快。针对用户表的一个简单的查询,可能会生成针对数据字典的很多查询,分析语句的时间比最终执行它的时间还长。共享池库缓存的目的是以分析格式存储语句执行。
第一次发出语句时,必须在执行前进行分析,而到了第二次,将立即执行。
2.数据字典缓存
数据字典缓存存储最近使用的对象定义:表,索引,用户和其他元数据定义的描述。
通过将此类定义放在SGA的内存中,以后使所有回话可以直接访问它们,而不是从磁盘上的数据字典中重复读取它们,从而提高分析性能。
数据字典缓存存储对象定义,因此当真的需要分析语句时,可以更快的执行分析,而不需要数据字典。
例如:
select sum(order_amount) from orders;
select * from orders where order_no=100;
这两个语句必须进行分析,因为它们时不同的语句,但通过分析第一个select语句,针对orders表及其列的定义将加在到数据字典缓存中。因此,第二个语句的分析速度加快。因为不再需要访问数据字典。


3.PL/SQL区
存储的PL/SQL对象是过程,函数,打包的过程,打包的函数,触发器,对象类型定义。
它们存储在数据字典中。当会话调用存储的PL/SQL对象时,它必须从数据字典读取。
那么,为了避免重复读取,将对象缓存到共享池的PL/SQL区。
第一次使用PL/SQL对象时,必须从磁盘上的数据字典表执行读取,但随后的调用快的
多,因为已经在共享池的PL/SQL区使用相应的对象。
4.sql查询和PL/SQL函数结果缓存
结果缓存机制将查询的结果存储在内存中。
下次发出查询时,服务器可以检索缓存的结果,而不是运行该查询。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值