温馨提示×

linux oracle怎样调优内存

小樊
50
2026-09-04 14:06:38
栏目: 云计算

在 Linux 上运行 Oracle 数据库时,内存调优是关键性能优化点之一。下面从操作系统层、Oracle 实例层、常见参数、监控方法几个维度系统说明。


一、Linux 系统层内存调优

1. 使用 HugePages(强烈推荐)

Oracle 官方推荐在 Linux 上使用 HugePages,减少 TLB miss,提升性能。

查看当前 HugePages

grep Huge /proc/meminfo

计算 HugePages 数量

公式:

HugePages = (SGA大小(MB) / Hugepagesize(MB)) + 余量

设置 HugePages(示例)

# 假设 SGA=8G,Hugepagesize=2MB
# HugePages = 8192 / 2 = 4096

vi /etc/sysctl.conf
vm.nr_hugepages = 4096

sysctl -p

锁定内存(防止 swap)

vi /etc/security/limits.conf
oracle soft memlock unlimited
oracle hard memlock unlimited

2. 关闭或限制 Swap 使用(谨慎)

# 尽量不让 Oracle 使用 swap
sysctl -w vm.swappiness=10

持久化:

vi /etc/sysctl.conf
vm.swappiness=10

3. 内核参数(Oracle 官方建议)

vi /etc/sysctl.conf
kernel.shmmax = 物理内存一半(字节)
kernel.shmall = shmmax / PAGE_SIZE
kernel.shmmni = 4096

示例(64G 内存):

kernel.shmmax = 34359738368
kernel.shmall = 8388608

二、Oracle 实例层内存调优

1. 自动内存管理(AMM / ASMM)

AMM(11g+,不推荐生产用 HugePages)

ALTER SYSTEM SET MEMORY_TARGET=8G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET=8G SCOPE=SPFILE;

ASMM(推荐)

ALTER SYSTEM SET SGA_TARGET=6G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_MAX_SIZE=6G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;

2. SGA 关键参数

DB_CACHE_SIZE
SHARED_POOL_SIZE
LARGE_POOL_SIZE
JAVA_POOL_SIZE

经验:

  • OLTP:shared_pool 适当大
  • 数据仓库:db_cache 大

3. PGA 调优(排序、HASH)

SELECT * FROM v$pgastat;

关注:

  • over allocation count
  • cache hit percentage

三、监控与诊断

1. Linux 内存监控

free -h
top
vmstat 2
sar -r 2

2. Oracle 内存视图

SELECT * FROM v$sga;
SELECT * FROM v$sgainfo;
SELECT * FROM v$pga_target_advice;
SELECT * FROM v$sga_target_advice;

3. AWR 报告

@?/rdbms/admin/awrrpt.sql

关注:

  • Buffer Hit %
  • PGA Cache Hit %
  • Memory Statistics

四、常见调优建议总结

✅ 使用 HugePages
✅ SGA 固定,不用 AMM
✅ swappiness 调低
✅ PGA 不要过小
✅ 避免 OOM Kill
✅ 监控 swap 使用


如果你能提供:

  • Oracle 版本(11g / 12c / 19c)
  • 内存大小
  • 业务类型(OLTP / OLAP)

我可以给你一套可直接用的参数模板。

0 踩