调整内存大小
用dba身份进入oracle,(sqlplus sys/密码 as sysdba):
--显示内存分配情况
show parameter sga;
--修改占用内存的大小
alter system set sga_max_size=200m scope=spfile;
上面的修改指令需要重启数据库,重启后占用内存便会降低200M以下
修改SGA必须保持的原则:
- sga_target不能大于sga_max_size,可以设置为相等。
- 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服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
包含实例的数据和控制信息,包含如下内存结构:
- Database buffer cache:缓存了从磁盘上检索的数据块。
- Redo log buffer:缓存了写到磁盘之前的重做信息。
- Shared pool:缓存了各用户间可共享的各种结构。
- Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
- Java pool:保存java虚拟机中特定会话的数据与java代码。
- Streams pool:由Oracle streams使用。
- Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
- Recycle buffer cache:保存buffer cache中即将过期的数据。
- 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
- 保存了当前会话的绑定信息以及运行时内存结构
- 每个执行sql语句的会话,都有一个private sql area
- 当多个用户执行相同的sql语句,此sql语句保存在一个称为shared sql area。此share sql area被指定给这些用户的private sql area
- 共享服务器模式:private sql area位于SGA的share pool或large pool中
- 专用服务器模式: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;
- 第一列表示不同的PGA的具体值
- 第二列PGA_TARGET_FACTOR为“1”表示当前的pga_aggregate_target设置大小(其他数值都是以这个数据为基础的倍数),我这里是375M,通过pga_aggregate_target参数可以确认一下
- 第三列表示PGA的估算得到的Cache命中率的百分比
- 第四列如果为“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;