外观
Oracle 操作系统参数调整
Oracle 操作系统参数调整概述
操作系统参数对 Oracle 数据库的性能和稳定性有着重要影响。合理的操作系统参数配置可以优化系统资源分配,提高数据库的整体性能,减少系统故障的发生。不同的操作系统平台(如 Linux、AIX、Solaris、Windows)需要调整的参数有所不同,需要根据具体的操作系统和数据库版本进行优化。
操作系统参数调整的重要性
- 优化系统资源分配,提高数据库的性能
- 确保系统的稳定性和可靠性
- 避免系统资源瓶颈,提高系统的可扩展性
- 满足 Oracle 数据库的最低配置要求
操作系统参数调整的基本原则
- 根据 Oracle 官方文档:参考 Oracle 官方文档中针对特定操作系统的参数建议
- 根据数据库工作负载:根据 OLTP、OLAP 或混合工作负载调整参数
- 逐步调整:每次只调整少量参数,观察效果后再继续调整
- 记录调整前后的性能:使用 AWR、ASH 等工具记录调整前后的性能变化
- 定期回顾:随着业务增长和系统变化,定期回顾和调整参数
Linux 操作系统参数调整
Linux 是最常用的 Oracle 数据库操作系统平台之一,以下是 Linux 操作系统中需要调整的关键参数。
1. 内核参数调整
Linux 内核参数主要通过 /etc/sysctl.conf 文件进行配置,调整后需要运行 sysctl -p 命令使其生效。
关键内核参数
bash
# Oracle 19c 和 21c 推荐的 Linux 内核参数
# 共享内存段大小(以字节为单位)
kernel.shmmax = 4398046511104
# 共享内存段数量
kernel.shmmni = 4096
# 共享内存总页数
kernel.shmall = 1073741824
# 信号量设置:SEMMSL, SEMMNS, SEMOPM, SEMMNI
kernel.sem = 250 32000 100 128
# 最大文件句柄数
fs.file-max = 6815744
# 网络参数
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
# TCP 参数
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 9000 65500
# I/O 参数
fs.aio-max-nr = 1048576参数说明
- kernel.shmmax:最大共享内存段大小,建议设置为物理内存的一半
- kernel.shmall:共享内存总页数,建议设置为物理内存除以页大小(通常为4KB)
- kernel.sem:信号量设置,包含四个值:SEMMSL(每个信号量集的最大信号量数)、SEMMNS(系统中最大信号量数)、SEMOPM(每个 semop 系统调用可以执行的最大操作数)、SEMMNI(系统中信号量集的最大数量)
- fs.file-max:系统级最大文件句柄数
- fs.aio-max-nr:异步 I/O 请求的最大数量
- net.ipv4.ip_local_port_range:可用的本地端口范围,建议设置为较大范围以支持更多并发连接
2. 资源限制调整
Linux 资源限制主要通过 /etc/security/limits.conf 文件进行配置,用于限制用户和进程的资源使用。
关键资源限制
bash
# Oracle 19c 和 21c 推荐的资源限制
# Oracle 用户的资源限制
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 134217728
oracle hard memlock 134217728参数说明
- nofile:文件句柄数限制,soft 为软限制,hard 为硬限制
- nproc:进程数限制
- stack:栈大小限制
- memlock:锁定内存大小限制,建议设置为 SGA 大小的一半或更多
3. 其他 Linux 参数调整
1. 禁用透明大页(THP)
透明大页可能会导致 Oracle 数据库性能问题,建议禁用。
bash
# 临时禁用
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用,在 /etc/grub.conf 或 /etc/default/grub 中添加
# GRUB_CMDLINE_LINUX="... transparent_hugepage=never"2. 禁用 NUMA 平衡
对于 Oracle 数据库,建议禁用 NUMA 平衡功能。
bash
# 临时禁用
echo 0 > /proc/sys/kernel/numa_balancing
# 永久禁用,在 /etc/sysctl.conf 中添加
kernel.numa_balancing = 03. 调整磁盘 I/O 调度器
对于 SSD 存储,建议使用 none 或 mq-deadline 调度器;对于机械硬盘,建议使用 deadline 调度器。
bash
# 临时调整(以 sda 为例)
echo mq-deadline > /sys/block/sda/queue/scheduler
# 永久调整,在 /etc/default/grub 中添加
# GRUB_CMDLINE_LINUX="... elevator=mq-deadline"AIX 操作系统参数调整
AIX 是 IBM 开发的 Unix 操作系统,广泛应用于企业级 Oracle 数据库环境。
1. 内核参数调整
AIX 内核参数主要通过 vmo、ioo、no 等命令进行配置。
关键内核参数
bash
# 使用 vmo 命令调整内存相关参数
vmo -p -o minperm%=3
vmo -p -o maxperm%=90
vmo -p -o maxclient%=85
vmo -p -o lru_file_repage=0
vmo -p -o strict_maxclient=1
vmo -p -o strict_maxperm=0
# 使用 ioo 命令调整 I/O 相关参数
ioo -p -o j2_dynamicBufferPreallocation=1
ioo -p -o j2_nPagesPerWriteBehindCluster=128
ioo -p -o j2_maxRandomWrite=0
ioo -p -o maxpout=0
# 使用 no 命令调整网络相关参数
no -p -o tcp_recvspace=65536
no -p -o tcp_sendspace=65536
no -p -o udp_recvspace=655360
no -p -o udp_sendspace=65536
no -p -o rfc1323=1
no -p -o sb_max=4194304
no -p -o tcp_keepidle=1200
no -p -o tcp_keepintvl=150
no -p -o tcp_keepinit=150
no -p -o tcp_finwait2=60
no -p -o tcp_nodelay=1参数说明
- minperm%/maxperm%:文件页面缓存的最小/最大百分比
- maxclient%:客户端文件页面缓存的最大百分比
- lru_file_repage:控制 LRU 算法是否重写文件页面,建议设置为 0
- j2_dynamicBufferPreallocation:启用 JFS2 动态缓冲区预分配
- tcp_recvspace/tcp_sendspace:TCP 接收/发送缓冲区大小
- tcp_keepidle:TCP 连接空闲时间,超过此时间发送 keepalive 包
2. 资源限制调整
AIX 资源限制主要通过 /etc/security/limits 文件进行配置。
关键资源限制
bash
# Oracle 用户的资源限制
oracle:
fsize = -1
core = -1
cpu = -1
data = -1
rss = -1
stack = -1
nofiles = -1
threads = -1
nproc = -1参数说明
- fsize:文件大小限制(512 字节块),-1 表示无限制
- core:核心转储文件大小限制,-1 表示无限制
- cpu:CPU 时间限制(秒),-1 表示无限制
- data:数据段大小限制(字节),-1 表示无限制
- rss:驻留集大小限制(字节),-1 表示无限制
- stack:栈大小限制(字节),-1 表示无限制
- nofiles:文件描述符数量限制,-1 表示无限制
- nproc:进程数量限制,-1 表示无限制
Solaris 操作系统参数调整
Solaris 是 Oracle 开发的 Unix 操作系统,专为企业级应用设计。
1. 内核参数调整
Solaris 内核参数主要通过 /etc/system 文件或 prctl 命令进行配置。
关键内核参数
bash
# /etc/system 文件中的内核参数设置
set shmsys:shminfo_shmmax=4294967296
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=32
set semsys:seminfo_semmns=1024
set semsys:seminfo_semmni=100
set semsys:seminfo_semmsl=256
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
set rlim_fd_max=65536
set rlim_fd_cur=8192
# 使用 prctl 命令调整资源限制
prctl -n process.max-file-descriptor -r -v 65536 -t basic -i process $$
prctl -n process.max-sem-nsems -r -v 256 -t basic -i process $$参数说明
- shmsys:shminfo_shmmax:最大共享内存段大小
- semsys:seminfo_semmns:系统中最大信号量数
- rlim_fd_max:最大文件描述符数
- rlim_fd_cur:当前文件描述符数
2. ZFS 文件系统参数调整
如果使用 ZFS 文件系统,需要调整相关参数以优化 Oracle 数据库性能。
bash
# 调整 ZFS 缓存大小
zfs set primarycache=metadata rpool/oradata
zfs set secondarycache=none rpool/oradata
# 调整 ZFS I/O 调度参数
zfs set recordsize=8k rpool/oradata
zfs set logbias=throughput rpool/oradata
zfs set sync=disabled rpool/oradata参数说明
- primarycache:ZFS 主缓存策略,metadata 表示只缓存元数据
- secondarycache:ZFS 二级缓存策略,none 表示不使用二级缓存
- recordsize:ZFS 记录大小,建议与 Oracle 数据库块大小匹配
- logbias:ZFS 日志偏斜策略,throughput 表示优先考虑吞吐量
- sync:ZFS 同步策略,disabled 表示异步写入
Windows 操作系统参数调整
Windows 是微软开发的操作系统,也广泛应用于 Oracle 数据库环境。
1. 内存管理调整
关键内存参数
- 最大服务器内存:在 SQL Server 中设置,Oracle 数据库则通过 SGA 和 PGA 进行管理
- 虚拟内存:建议设置为物理内存的 1.5-2 倍,或使用系统管理的大小
- 大页内存:启用大页内存可以提高 Oracle 数据库性能,特别是对于大 SGA 配置
启用大页内存
powershell
# 以管理员身份运行 PowerShell
# 查看当前大页内存设置
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" -Name "LargePageMinimum"
# 设置大页内存最小值(以字节为单位,示例为 2MB)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" -Name "LargePageMinimum" -Value 2097152
# 启用锁定内存页权限
# 1. 打开本地安全策略(secpol.msc)
# 2. 导航到 本地策略 > 用户权限分配
# 3. 双击 锁定内存页,添加 Oracle 服务账户2. I/O 子系统调整
磁盘分区对齐
确保磁盘分区对齐,以提高 I/O 性能。对于 Windows Server 2008 及以上版本,默认分区已经对齐。
磁盘策略设置
powershell
# 打开设备管理器(devmgmt.msc)
# 1. 展开 磁盘驱动器
# 2. 右键点击磁盘,选择 属性
# 3. 切换到 策略 选项卡
# 4. 勾选 启用写入缓存
# 5. 对于 SSD,取消勾选 启用设备上的写入缓存缓冲区刷新3. 网络参数调整
关键网络参数
powershell
# 打开注册表编辑器(regedit.exe)
# 导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
# 设置 TCP 接收缓冲区大小
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "TCPReceiveWindow" -Value 65536 -PropertyType DWord -Force
# 设置 TCP 发送缓冲区大小
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "TCPSendWindow" -Value 65536 -PropertyType DWord -Force
# 设置 TIME_WAIT 超时时间
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "TcpTimedWaitDelay" -Value 30 -PropertyType DWord -Force
# 设置最大 TCP 连接数
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "MaxUserPort" -Value 65534 -PropertyType DWord -Force
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "TCPMaxConn" -Value 65534 -PropertyType DWord -Force参数说明
- TCPReceiveWindow/TCPSendWindow:TCP 接收/发送缓冲区大小
- TcpTimedWaitDelay:TIME_WAIT 状态的超时时间,建议设置为 30 秒
- MaxUserPort:最大用户端口号,建议设置为 65534
- TCPMaxConn:最大 TCP 连接数
Oracle 19c 和 21c 操作系统参数差异
Oracle 19c 操作系统参数要求
- Linux:要求内核版本 3.10 或更高
- AIX:要求 AIX 7.1 TL3 或更高
- Solaris:要求 Solaris 11.3 或更高
- Windows:要求 Windows Server 2016 或更高
Oracle 21c 操作系统参数要求
- Linux:要求内核版本 4.1.12 或更高
- AIX:要求 AIX 7.2 TL3 或更高
- Solaris:要求 Solaris 11.4 或更高
- Windows:要求 Windows Server 2019 或更高
主要差异
- Oracle 21c 对操作系统版本要求更高
- Oracle 21c 支持更多的 CPU 核心和内存
- Oracle 21c 对 NVMe 存储有更好的支持
- Oracle 21c 对容器化环境有更好的支持
操作系统参数监控与调优
1. Linux 监控命令
bash
# 监控内存使用情况
free -h
vmstat 1
# 监控 CPU 使用情况
top
sar -u 1
# 监控 I/O 性能
iostat -x 1
iotop
# 监控网络性能
etstat -tuln
ss -s
sar -n DEV 1
# 监控文件句柄使用情况
lsof -u oracle | wc -l
cat /proc/sys/fs/file-nr2. AIX 监控命令
bash
# 监控内存使用情况
vmstat 1
lsps -s
# 监控 CPU 使用情况
mpstat 1
lparstat -i
# 监控 I/O 性能
iostat 1
filemon -O all -o filemon.out
# 监控网络性能
netstat -s
nfsstat -c3. Solaris 监控命令
bash
# 监控内存使用情况
vmstat 1
prstat -a
# 监控 CPU 使用情况
mpstat 1
psrinfo -v
# 监控 I/O 性能
iostat -x 1
zpool iostat 1
# 监控网络性能
netstat -s
ndd -get /dev/tcp tcpCurEstab4. Windows 监控工具
- 任务管理器:监控 CPU、内存、磁盘、网络使用情况
- 资源监视器:更详细的资源使用情况监控
- 性能监视器:收集和分析性能数据
- 事件查看器:查看系统和应用程序日志
- 命令行工具:如
wmic、netstat、tasklist等
操作系统参数调整最佳实践
1. 参考 Oracle 官方文档
Oracle 官方文档针对不同操作系统和数据库版本提供了详细的参数建议,是操作系统参数调整的主要依据。
2. 逐步调整参数
每次只调整少量参数,观察数据库性能变化后再继续调整。避免一次性调整大量参数,导致无法确定哪些参数对性能产生了影响。
3. 记录调整前后的性能
使用 AWR、ASH 等工具记录调整前后的性能变化,以便评估参数调整的效果。
4. 根据工作负载调整
不同的工作负载(OLTP、OLAP、混合工作负载)对操作系统参数的要求不同,需要根据实际工作负载进行调整。
5. 定期回顾和调整
随着业务增长和系统变化,定期回顾和调整操作系统参数,确保参数配置始终适合当前的系统环境。
6. 测试环境验证
在生产环境调整参数前,先在测试环境进行验证,确保参数调整不会导致系统故障。
常见问题(FAQ)
Q1: 如何确定操作系统参数是否需要调整?
A1: 可以通过以下方式确定操作系统参数是否需要调整:
- 参考 Oracle 官方文档的最低配置要求
- 监控系统资源使用情况,如 CPU、内存、I/O、网络等
- 分析数据库等待事件,如 I/O 等待、网络等待等
- 观察系统日志,查找与资源相关的错误信息
Q2: 操作系统参数调整后需要重启数据库吗?
A2: 大多数操作系统参数调整后需要重启系统或重启数据库才能生效。对于 Linux 系统,可以使用 sysctl -p 命令使内核参数立即生效,但资源限制参数需要重新登录才能生效。
Q3: 如何回滚操作系统参数调整?
A3: 回滚操作系统参数调整的方法包括:
- 恢复之前的配置文件(如 /etc/sysctl.conf、/etc/security/limits.conf 等)
- 使用备份的系统镜像恢复系统
- 重新安装操作系统并恢复数据库
Q4: Oracle 19c 和 21c 的操作系统参数有什么区别?
A4: Oracle 21c 对操作系统版本要求更高,支持更多的 CPU 核心和内存,对 NVMe 存储和容器化环境有更好的支持。具体的参数设置可能会有所不同,建议参考 Oracle 21c 官方文档。
Q5: 如何监控操作系统参数的效果?
A5: 可以使用以下方法监控操作系统参数的效果:
- 使用操作系统监控命令(如 top、vmstat、iostat 等)监控系统资源使用情况
- 使用 Oracle AWR、ASH 报告分析数据库性能变化
- 观察业务响应时间和吞吐量的变化
Q6: 操作系统参数调整会影响其他应用程序吗?
A6: 是的。操作系统参数调整可能会影响其他应用程序的性能和稳定性。因此,在调整操作系统参数前,需要考虑系统上运行的所有应用程序,并在测试环境进行充分验证。
总结
操作系统参数调整是 Oracle 数据库性能优化的重要组成部分。合理的操作系统参数配置可以优化系统资源分配,提高数据库的整体性能,减少系统故障的发生。不同的操作系统平台需要调整的参数有所不同,需要根据具体的操作系统和数据库版本进行优化。
在实际生产环境中,DBA 需要参考 Oracle 官方文档,根据数据库的工作负载特点和业务需求,逐步调整操作系统参数,并监控调整效果。同时,需要定期回顾和调整操作系统参数,确保参数配置始终适合当前的系统环境。
通过合理的操作系统参数调整,可以提高 Oracle 数据库的性能、稳定性和可靠性,为业务提供更好的支持。
