惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - dirgo

在Oracle中,授予用户角色和权限 Linux下查看当前哪些端口在监听状态,哪些端口在连接状态 mobaxterm常用配置 Windows下udp工具 Oracle表空间用户授权创建dblink等操作 用nmap扫描找出某个网段下空闲的ip脚本 Oracle 19c 常用运维 SQL Linux下设置CDB/PDB 环境的Oracle19c开机启动 Oracle是 CDB/PDB 环境下,让PDB在数据库启动后自动打开 怎样禁止dbeaver点击导航中数据库自动切换sql编辑器所属的数据库 sudo -i -u zhangsan 与su - zhangsan区别,在现代 Linux 系统中,推荐使用 sudo 进行权限切换 Linux 的目录结构英文全称(及可能的命名背景)和更详细的说明 利用 Logback 的热加载特性,安全的迁移日志,改变日志保存路径 Linux中查询进程内存占用 iotDB调整内存占用及注意事项 Eclipse Milo 处理PLC"字(Word)"类型,最直接和正确的做法是使用其内置的 UShort 类型 centos7.9安装minio RELEASE.2025-04-22T22-12-26Z centos7.9编译安装nginx 1.28.1 linux(centos7.9)编译安装redis7.2.4 UFW 防火墙常用命令速查表
Oracle 19c占内存高的解决方法
dirgo · 2026-02-27 · via 博客园 - dirgo

因为Oracle 19c安装后默认的内存配置是为生产环境设计的,会尽可能多地占用系统内存。我们可以通过调整内存参数来大幅降低占用。

🎯 内存占用分析

Oracle的内存主要分为两部分:

  • SGA(系统全局区):占大头,用于缓存数据、SQL等
  • PGA(程序全局区):用于排序、哈希等操作

你看到的12GB很可能是SGA被设置了较大的值。对于开发测试环境,我们可以把总内存限制在2GB-4GB就足够用了。

⚡ 立即释放内存的“急救方案”

如果你想让Oracle立刻把占用的内存吐出来,最快的方法是重启服务

  1. 打开Windows服务管理器(services.msc
  2. 找到Oracle相关的服务(如OracleServiceORCL19
  3. 右键点击选择“重新启动”

重启后Oracle会重新初始化内存,通常会释放大量已占用的内存。但这只是临时方案,重启后又会回到原来水平。

🔧 永久限制内存的配置方案

要让Oracle长期稳定地占用较少内存,需要修改内存参数。这里提供两种方法,推荐方法一(更简单)。

✅ 方法一:启用自动内存管理(AMM,推荐)

自动内存管理让Oracle自动在SGA和PGA之间动态分配内存,你只需要设置一个总上限。

操作步骤

  1. 以管理员身份登录数据库

    sqlplus / as sysdba
    
  2. 查看当前内存设置

    SHOW PARAMETER memory_target
    SHOW PARAMETER sga_target
    SHOW PARAMETER pga_aggregate_target
    
  3. 设置总内存上限(例如限制为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;
    
  4. 重启数据库使参数生效

    SHUTDOWN IMMEDIATE;
    STARTUP;
    
  5. 设置当前内存目标(重启后执行):

    ALTER SYSTEM SET memory_target = 2G;
    
  6. 验证配置

    SHOW PARAMETER memory_target;
    

设置后,Oracle总内存会控制在2GB左右,并且会根据负载自动调整。

✅ 方法二:手动配置SGA和PGA

如果你希望对内存分配更精细地控制,可以分别设置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开发环境的建议值

  • SGA:物理内存的40%-50%(如果总内存16GB,设6-8GB)
  • PGA:物理内存的10%-20%(如果总内存16GB,设2-3GB)

📊 两种方法的对比

AMM 配置简单,自动调优,无需操心SGA/PGA比例 动态调整有微小开销 大多数开发测试环境 手动配置 控制粒度更细,性能可预测 需要根据负载调整 特定负载测试、模拟生产
方案 优点 缺点 适用场景

🔍 如果以上方法无效的排查思路

如果调整后内存占用依然很高,可以检查以下特殊情况:

  1. 检查Streams Pool等特殊组件:有案例显示第三方工具或错误配置可能导致某个内存池异常占用(如Streams Pool占用96GB)。可以通过查询确认:

    SELECT * FROM v$sgainfo;
    
  2. 检查内核参数(Windows对应为注册表):Linux系统需要调整shmmax/shmall等参数,Windows系统通常不需要额外配置,但如果之前调整过Oracle用户的内存锁定权限,可能会影响内存释放。

  3. 关闭不必要的数据库特性:如Memory Optimized Rowstore(需要设置MEMOPTIMIZE_POOL_SIZE=0)。

💡 最终建议

对于你的开发测试环境,我推荐采用方法一(AMM)

  • 先设置 memory_max_target = 2G
  • 重启后设置 memory_target = 2G

这样Oracle会在2GB以内自动管理内存,既能满足开发测试需求,又不会拖慢你的电脑。如果后续发现内存不够(比如跑大批量数据处理),可以随时调大这个值。

如果你在执行过程中遇到权限问题或参数修改失败,可以随时告诉我具体的错误信息,我帮你看看怎么处理~