






















因为Oracle 19c安装后默认的内存配置是为生产环境设计的,会尽可能多地占用系统内存。我们可以通过调整内存参数来大幅降低占用。
Oracle的内存主要分为两部分:
你看到的12GB很可能是SGA被设置了较大的值。对于开发测试环境,我们可以把总内存限制在2GB-4GB就足够用了。
如果你想让Oracle立刻把占用的内存吐出来,最快的方法是重启服务:
services.msc)OracleServiceORCL19)重启后Oracle会重新初始化内存,通常会释放大量已占用的内存。但这只是临时方案,重启后又会回到原来水平。
要让Oracle长期稳定地占用较少内存,需要修改内存参数。这里提供两种方法,推荐方法一(更简单)。
自动内存管理让Oracle自动在SGA和PGA之间动态分配内存,你只需要设置一个总上限。
操作步骤:
以管理员身份登录数据库:
sqlplus / as sysdba
查看当前内存设置:
SHOW PARAMETER memory_target
SHOW PARAMETER sga_target
SHOW PARAMETER pga_aggregate_target
设置总内存上限(例如限制为2GB):
-- 先设置最大上限(需要重启)
ALTER SYSTEM SET memory_max_target = 2G SCOPE=SPFILE;
-- 关闭SGA和PGA的固定值,交给自动管理
ALTER SYSTEM SET sga_target = 0 SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target = 0 SCOPE=SPFILE;
重启数据库使参数生效:
SHUTDOWN IMMEDIATE;
STARTUP;
设置当前内存目标(重启后执行):
ALTER SYSTEM SET memory_target = 2G;
验证配置:
SHOW PARAMETER memory_target;
设置后,Oracle总内存会控制在2GB左右,并且会根据负载自动调整。
如果你希望对内存分配更精细地控制,可以分别设置SGA和PGA。
示例配置(总内存约3GB):
ALTER SYSTEM SET sga_max_size = 2G SCOPE=SPFILE;
ALTER SYSTEM SET sga_target = 2G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE=SPFILE;
-- 重启生效
SHUTDOWN IMMEDIATE;
STARTUP;
针对OLTP开发环境的建议值:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
如果调整后内存占用依然很高,可以检查以下特殊情况:
检查Streams Pool等特殊组件:有案例显示第三方工具或错误配置可能导致某个内存池异常占用(如Streams Pool占用96GB)。可以通过查询确认:
SELECT * FROM v$sgainfo;
检查内核参数(Windows对应为注册表):Linux系统需要调整shmmax/shmall等参数,Windows系统通常不需要额外配置,但如果之前调整过Oracle用户的内存锁定权限,可能会影响内存释放。
关闭不必要的数据库特性:如Memory Optimized Rowstore(需要设置MEMOPTIMIZE_POOL_SIZE=0)。
对于你的开发测试环境,我推荐采用方法一(AMM):
memory_max_target = 2Gmemory_target = 2G这样Oracle会在2GB以内自动管理内存,既能满足开发测试需求,又不会拖慢你的电脑。如果后续发现内存不够(比如跑大批量数据处理),可以随时调大这个值。
如果你在执行过程中遇到权限问题或参数修改失败,可以随时告诉我具体的错误信息,我帮你看看怎么处理~
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。