ubuntu

Ubuntu Oracle资源限制设置

小樊
57
2025-09-21 09:27:26
栏目: 云计算

Ubuntu系统下Oracle数据库资源限制设置指南

在Ubuntu系统上部署Oracle数据库时,合理的资源限制设置是保障数据库稳定运行的关键。以下从系统内核参数、用户资源限制、Oracle实例参数、大页配置及验证方法五个核心维度,详细说明Oracle资源限制的具体配置步骤。

一、系统内核参数调整(/etc/sysctl.conf)

内核参数决定了系统对Oracle进程的资源分配能力,需优先调整以下关键参数(适用于Ubuntu 20.04及以上版本):

# 共享内存设置(Oracle依赖共享内存实现进程间通信)
kernel.shmall = 2097152       # 系统共享内存总页数(每页4KB,对应8GB)
kernel.shmmax = 536870912     # 单个共享内存段最大大小(512MB)
kernel.shmmni = 4096          # 系统共享内存段最大数量

# 进程和文件描述符限制
fs.file-max = 6815744         # 系统最大文件描述符数(满足Oracle多进程需求)
kernel.sem = 250 32000 100 128 # 信号量参数(semmsl:每个集合的信号量数; semmns:系统总信号量数; semopm:每个进程单次操作的最大信号量数; semmni:系统总信号量集合数)

# 网络参数(优化TCP连接性能)
net.ipv4.ip_local_port_range = 9000 65500 # 允许应用程序使用的本地端口范围
net.core.rmem_default = 262144  # 接收缓冲区默认大小(256KB)
net.core.rmem_max = 4194304     # 接收缓冲区最大大小(4MB)
net.core.wmem_default = 262144  # 发送缓冲区默认大小(256KB)
net.core.wmem_max = 1048576     # 发送缓冲区最大大小(1MB)

# 异步I/O支持(Oracle使用AIO提升I/O性能)
fs.aio-max-nr = 1048576       # 系统最大异步I/O请求数

应用配置:修改完成后,执行sudo sysctl -p使参数立即生效。

二、Oracle用户资源限制(/etc/security/limits.conf)

通过limits.conf文件限制Oracle用户的进程、文件描述符等资源,避免单个用户过度消耗系统资源:

# 为oracle用户设置软/硬限制(soft为警告阈值,hard为强制阈值)
oracle soft nproc 2048          # 最大进程数(软限制)
oracle hard nproc 16384         # 最大进程数(硬限制)
oracle soft nofile 1024         # 最大文件描述符数(软限制)
oracle hard nofile 65536        # 最大文件描述符数(硬限制)
oracle soft stack 10240         # 最大栈大小(软限制,单位KB)

补充配置:为确保PAM模块应用这些限制,需编辑/etc/pam.d/login/etc/pam.d/sshd文件,添加以下行:

session required pam_limits.so

生效方式:Oracle用户重新登录(如su - oracle)后,限制自动生效。

三、Oracle实例内存参数配置

Oracle内存分为SGA(系统全局区)PGA(程序全局区),需根据系统内存大小合理分配:

1. 查看当前内存配置

连接到Oracle数据库(使用sqlplus / as sysdba),执行以下命令查看现有内存参数:

SHOW PARAMETER TARGET;
SHOW PARAMETER MEMORY_MAX_TARGET;
SHOW PARAMETER SGA_TARGET;
SHOW PARAMETER PGA_AGGREGATE_TARGET;

2. 自动内存管理(AMM,推荐新手)

若系统内存充足(如16GB以上),可启用AMM模式,由Oracle自动分配SGA和PGA内存:

ALTER SYSTEM SET memory_target=16G SCOPE=SPFILE;      -- 总内存目标(物理内存的50%-70%)
ALTER SYSTEM SET memory_max_target=32G SCOPE=SPFILE; -- 最大总内存(不超过物理内存的80%)

3. 自动共享内存管理(ASMM,平衡性能)

若需手动控制SGA大小,启用ASMM模式(PGA仍自动管理):

ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;         -- SGA总大小(物理内存的30%-70%)
ALTER SYSTEM SET sga_max_target=16G SCOPE=SPFILE;    -- SGA最大大小
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE; -- PGA总大小(物理内存的5%-25%)

4. 手动内存管理(高级用户)

若需精确控制每个内存组件(如共享池、缓冲区缓存),手动设置各参数:

ALTER SYSTEM SET db_cache_size=4G SCOPE=SPFILE;      -- 数据库缓冲区缓存(SGA核心组件)
ALTER SYSTEM SET shared_pool_size=1G SCOPE=SPFILE;   -- 共享池(存储SQL、PL/SQL代码)
ALTER SYSTEM SET large_pool_size=200M SCOPE=SPFILE;  -- 大池(用于并行查询、RMAN备份)
ALTER SYSTEM SET java_pool_size=200M SCOPE=SPFILE;   -- Java池(用于Java存储过程)

生效方式:修改完成后,重启Oracle实例:

SHUTDOWN IMMEDIATE;
STARTUP;

监控建议:通过以下视图监控内存使用情况:

SELECT * FROM v$sgainfo;       -- 查看SGA组件详情
SELECT * FROM v$pga_aggregate_target_advice; -- 查看PGA使用建议

四、大页(HugePages)配置(可选,提升性能)

大页可减少Oracle共享内存的页表开销,提升内存访问效率(适用于Oracle 11g及以上版本):

1. 检查系统是否支持大页

grep -E 'HugePages_Total|Hugepagesize' /proc/meminfo

若输出为空,需修改内核启动参数(编辑/etc/default/grub,在GRUB_CMDLINE_LINUX中添加hugepagesz=2M hugepages=1024,然后执行sudo update-grub && sudo reboot)。

2. 设置大页参数

编辑/etc/sysctl.conf,添加以下内容:

vm.nr_hugepages=1024          # 大页数量(根据SGA大小计算:SGA大小/大页大小,如8GB SGA需4096个2M大页)
vm.hugetlb_shm_group=oinstall # 允许oinstall组使用大页

应用配置sudo sysctl -p

3. 配置Oracle使用大页

编辑$ORACLE_HOME/bin/oracle脚本,在ORACLE_HOME设置后添加:

if [ "$ORACLE_SID" != "" ]; then
  export ORACLE_HOME
  export ORACLE_SID
  export USE_LARGE_PAGES=TRUE
fi

生效方式:重启Oracle实例。

五、资源限制验证

通过以下命令验证配置是否生效:

1. 验证系统内核参数

sysctl -a | grep -E 'shmmax|shmall|file-max|sem|ip_local_port_range'

2. 验证Oracle用户限制

su - oracle
ulimit -a                  # 查看所有限制
ulimit -n                  # 查看文件描述符限制
ulimit -u                  # 查看进程数限制

3. 验证Oracle实例内存

SHOW PARAMETER MEMORY_TARGET;
SHOW PARAMETER SGA_TARGET;
SHOW PARAMETER PGA_AGGREGATE_TARGET;

通过以上步骤,可完成Ubuntu系统下Oracle数据库的资源限制设置,确保数据库在高负载下稳定运行。需根据实际系统内存、业务需求调整参数值(如内存大小、进程数限制等)。

0
看了该问题的人还看了