Oracle数据库查看与修改内存配置

文章介绍了Oracle数据库的内存管理模式,包括自动内存管理、自动共享内存管理和手动内存管理。在自动共享内存管理模式下,如何查看SGA和PGA的配置,并提供了调整内存分配的示例,如设置SGA_TARGET、PGA_AGGREGATE_TARGET、DB_CACHE_SIZE等参数。同时强调了内存分配与物理内存的关系及可能涉及的内核参数调整。

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

Oracle内存管理模式

Oracle数据库的内存管理模式从自动管理化程度由高到低依次可以分为:

  • 自动内存管理:完全由Oracle自动管理内存分配。DBA只需设置MEMORY_TARGET(以及可选初始化参数MEMORY_MAX_TARGET),Oracle就会在SGA和PGA之间自动分配内存。
  • 自动共享内存管理:DBA只需设置SGA_TARGETPGA_AGGREGATE_TARGET两个初始化参数。Oracle会分别在SGA和PGA中自动分配各组件的内存。
  • 手动内存管理:由DBA为SGA和PGA中的所有组件逐一手动分配内存。

在自动共享内存管理模式下,还可以手动为SGA中的某些重要组件指定最小的内存分配值,例如Shared Pool和Buffer Cache。

查看Oracle内存分配

检查各内存参数的TARGET配置:

SQL> show parameter target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_max_target                    big integer 0
memory_target                        big integer 0
pga_aggregate_target                 big integer 1561M
sga_target                           big integer 4688M

其中,memory_targetmemory_max_target都为0,并且sga_targetpga_aggregate_target不为0,表示当前数据库使用的是自动共享内存管理模式。

检查SGA和PGA相关参数的配置:

SQL> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 4688M
sga_min_size                         big integer 0
sga_target                           big integer 4688M

SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 3122M
pga_aggregate_target                 big integer 1561M

查看SGA中各组件的内存使用情况:

SQL> select * from v$sgainfo;

NAME                                  BYTES RESIZEABLE     CON_ID
-------------------------------- ---------- ---------- ----------
Fixed SGA Size                      8906552 No                  0
Redo Buffers                        7868416 No                  0
Buffer Cache Size                3992977408 Yes                 0
In-Memory Area Size                       0 No                  0
Shared Pool Size                  872415232 Yes                 0
Large Pool Size                    33554432 Yes                 0
Java Pool Size                            0 Yes                 0
Streams Pool Size                         0 Yes                 0
Shared IO Pool Size               134217728 Yes                 0
Data Transfer Cache Size                  0 Yes                 0
Granule Size                       16777216 No                  0

NAME                                  BYTES RESIZEABLE     CON_ID
-------------------------------- ---------- ---------- ----------
Maximum SGA Size                 4915722040 No                  0
Startup overhead in Shared Pool   405891224 No                  0
Free SGA Memory Available                 0                     0

14 rows selected.

其中,Buffer Cache SizeShared Pool Size是需要重点关注的内容。

修改Oracle内存分配

如果我们升级了服务器物理内存配置,就需要对Oracle的内存参数进行修改。

在自动共享内存管理模式下,一般按照如下原则配置内存:

  • SGA_TARGET一般配置为物理内存的30%到70%之间;
  • PGA_AGGREGATE_TARGET一般配置为物理内存的5%到25%之间;
  • SGA_TARGETPGA_AGGREGATE_TARGET之和不要超过物理内存的80%;
  • Buffer Cache Size一般配置为SGA_TARGET20% 左右;
  • Shared Pool Size一般配置为SGA_TARGET10% 左右。

修改数据库内存配置:

--备份参数文件
create pfile='/home/oracle/pfile.ora' from spfile;

--禁用自动内存管理
alter system set memory_target=0M scope=spfile;

--设置SGA_TARGET
alter system set sga_max_size=9G scope=spfile;
alter system set sga_target=9G scope=spfile;

--设置Buffer cache、共享池、Java池的最小值
alter system set db_cache_size=2G scope=spfile;
alter system set shared_pool_size=1G scope=spfile;
alter system set java_pool_size=128m scope=spfile;

--设置PGA_AGGREGATE_TARGET
alter system set pga_aggregate_target=1G scope=spfile;

然后重启数据库即可生效。

SQL> show parameter sga_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 9G

SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit                  big integer 3000M
pga_aggregate_target                 big integer 1G

SQL> show parameter db_cache_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_size                        big integer 2G

SQL> show parameter shared_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 1G

SQL> show parameter java_pool_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_pool_size                       big integer 128M

需要注意的是,服务器物理内存变化通常还涉及内核参数kernel.shmallkernel.shmmax的调优。如果数据库使用了大页,还需要调优操作系统的大页配置。

# 查看是否开启大页
SQL> show parameter use_large_pages

# 查看操作系统大页配置
cat /proc/meminfo | grep HugePage
cat /proc/meminfo | grep Hugepagesize
Oracle数据库的PFILE(Parameter File)是一个文本文件,它包含了数据库实例的配置参数。和SPFILE不同,PFILE是可读的,可以手动编辑。下面是一些常见的PFILE配置参数及其解释: 1. `DB_NAME`:数据库实例的名称。 2. `DB_UNIQUE_NAME`:数据库实例的唯一名称,用于集群环境中区分不同实例。 3. `DB_DOMAIN`:数据库的域名,用于在网络中唯一标识数据库。 4. `CONTROL_FILES`:控制文件的路径和名称,控制文件记录了数据库的结构和元数据信息。 5. `LOG_ARCHIVE_DEST_n`:归档日志的存储位置,可以有多个归档目标。 6. `LOG_ARCHIVE_FORMAT`:归档日志的命名格式。 7. `SGA_TARGET`:系统全局区(SGA)的目标大小,SGA是Oracle数据库中的主要内存区域。 8. `PGA_AGGREGATE_TARGET`:PGA(Program Global Area)的目标大小,PGA用于存储会话和排序操作的临时数据。 9. `MEMORY_TARGET`:SGA和PGA的总目标大小,如果设置了该参数,则SGA_TARGET和PGA_AGGREGATE_TARGET会自动调整。 10. `FAST_START_MTTR_TARGET`:最小恢复时间目标,用于控制崩溃恢复的速度。 11. `PROCESSES`:允许的并发用户进程数量。 12. `SESSIONS`:允许的并发会话数量。 13. `REMOTE_LOGIN_PASSWORDFILE`:用于远程登录认证的密码文件。 14. `UNDO_MANAGEMENT`:事务回滚管理方式,可以是AUTO(自动管理)或MANUAL(手动管理)。 15. `COMPATIBLE`:数据库版本兼容性级别,控制数据库的行为以特定版本兼容。 这只是一小部分PFILE配置参数的示例,实际上还有很多其他参数可以配置。您可以通过查阅Oracle官方文档或使用`SHOW PARAMETER`命令来获取更详细的参数列表和解释。需要注意的是,对PFILE的更改需要重启数据库实例才能生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GottdesKrieges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值