oracle数据库运行内存PGA+SGA分配

调整内存大小

用dba身份进入oracle,(sqlplus sys/密码 as sysdba):

--显示内存分配情况
show parameter sga;
--修改占用内存的大小
alter system set sga_max_size=200m scope=spfile; 

上面的修改指令需要重启数据库,重启后占用内存便会降低200M以下

修改SGA必须保持的原则:

  1. sga_target不能大于sga_max_size,可以设置为相等。
  2. SGA加上PGA等其他进程占用的内存总数必须小于操作系统的物理内存。

查看连接占用内存

oracle没开启一个连接都是会占用内存的,具体每个连接占用多少内存不一定,可以通过下面的命令查看

--当前一个process消耗最大的内存
select max(pga_used_mem)/1024/1024 M from v$process;
--process消耗最少内存
select min(pga_used_mem)/1024/1024 M from v$process where pga_used_mem>0;

什么是SGA

SGA (System Global Area)是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

包含实例的数据和控制信息,包含如下内存结构:

  1. Database buffer cache:缓存了从磁盘上检索的数据块。
  2. Redo log buffer:缓存了写到磁盘之前的重做信息。
  3. Shared pool:缓存了各用户间可共享的各种结构。
  4. Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
  5. Java pool:保存java虚拟机中特定会话的数据与java代码。
  6. Streams pool:由Oracle streams使用。
  7. Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
  8. Recycle buffer cache:保存buffer cache中即将过期的数据。
  9. nK block size buffer:为与数据库默认数据块大小不同的数据块提供缓存。用来支持表空间传输。
  • database buffer cache, shared pool, large pool, streams pool与Java pool根据当前数据库状态,自动调整;
  • keep buffer cache,recycle buffer cache,nK block size buffer可以在不关闭实例情况下,动态修改。

什么是PGA

Private SQL Area

  1. 保存了当前会话的绑定信息以及运行时内存结构
  2. 每个执行sql语句的会话,都有一个private sql area
  3. 当多个用户执行相同的sql语句,此sql语句保存在一个称为shared sql area。此share sql area被指定给这些用户的private sql area
  4. 共享服务器模式:private sql area位于SGA的share pool或large pool中
  5. 专用服务器模式:private sql area位于PGA中
SELECT pga_target_for_estimate/1024/1024 "PGA(MB)",pga_target_factor,estd_pga_cache_hit_percentage,estd_overalloc_count FROM v$pga_target_advice;
  1. 第一列表示不同的PGA的具体值
  2. 第二列PGA_TARGET_FACTOR为“1”表示当前的pga_aggregate_target设置大小(其他数值都是以这个数据为基础的倍数),我这里是375M,通过pga_aggregate_target参数可以确认一下
  3. 第三列表示PGA的估算得到的Cache命中率的百分比
  4. 第四列如果为“0”表示可以消除PGA的过载
--可以通过以下指令修改pga
alter system set pga_aggregate_target=375m;

-- 修改后可以通过下面的指令查看
show parameter pga
PGA和SGA设置 指令

alter system set sga_target=100g scope=spfile;
alter system set sga_max_size=100g scope=spfile;
alter system set pga_aggregate_target=25g scope=spfile;
alter system set pga_aggregate_limit=50g scope=spfile;
alter system reset db_cache_size scope=spfile;
alter system reset shared_pool_size scope=spfile;

设置比例和原则  物理内存70%=sga+pga  sga:pga  6:4或7:3都行
pga_aggregate_target这个参数的两倍就是限制(pga_aggregate_limit)即

alter system set pga_aggregate_target=25g scope=spfile;
alter system set pga_aggregate_limit=50g scope=spfile;

posted @ 2022-10-02 19:36  youzhangcai  阅读(1807)  评论(0编辑  收藏  举报