Oracle Linux系统调优指南(针对Oracle数据库优化)
内核参数直接影响Oracle数据库的内存管理、I/O性能和网络稳定性,需根据硬件配置调整/etc/sysctl.conf文件并执行sysctl -p生效:
kernel.shmmax(单个共享内存段最大大小)需大于Oracle SGA大小(如8G内存可设为8589934592,即8GB);kernel.shmmni(共享内存段最大数量)设为4096(默认足够);kernel.shmall(共享内存总页数)需满足kernel.shmmax/页大小(如4KB页,8GB内存设为2097152)。vm.swappiness(交换倾向)设为10(减少交换,优先使用物理内存);vm.dirty_ratio(脏页占比阈值,触发写回)设为20、vm.dirty_background_ratio(后台写回阈值)设为10(平衡内存与I/O负载);vm.min_free_kbytes(系统保留最小空闲内存)设为524288(512MB,避免内存溢出)。net.core.rmem_default/net.core.wmem_default(默认收发缓冲区)设为262144(256KB);net.core.rmem_max/net.core.wmem_max(最大收发缓冲区)设为16777216(16MB)(提升高带宽场景吞吐量);net.ipv4.tcp_syncookies设为1(防御SYN洪水攻击);net.ipv4.tcp_tw_reuse设为1(复用TIME-WAIT连接,减少端口占用)。fs.file-max(最大文件句柄数)设为6815744(避免文件打开过多导致性能下降);fs.aio-max-nr(异步I/O请求数)设为80000000(提升Oracle异步I/O性能)。Oracle内存分为SGA(共享内存)和PGA(进程私有内存),合理分配可显著提升数据库效率:
MEMORY_TARGET(总内存,含SGA和PGA)和MEMORY_MAX_TARGET(MEMORY_TARGET上限)实现自动管理(如MEMORY_TARGET=4G、MEMORY_MAX_TARGET=6G);若需手动调整,可设置SGA_TARGET(SGA最小大小)和SGA_MAX_SIZE(SGA最大大小),并将SGA_TARGET设为0(允许Oracle自动分配SGA各组件,如共享池、数据缓冲区)。PGA_AGGREGATE_TARGET(PGA总大小,如1G),Oracle会自动分配PGA给各个进程(如排序、哈希操作)。hugepages_settings.sh脚本(Oracle官方提供)计算所需大页数(公式:SGA大小/大页大小,如8GB SGA用2MB大页需4096个),设置vm.nr_hugepages为计算值,并在/etc/security/limits.conf中增加oracle用户的memlock限制(如oracle soft memlock 8589934592、oracle hard memlock 8589934592)。Oracle数据库对I/O敏感,需通过以下方式优化:
XFS(支持大文件、高并发)或ext4(兼容性好),避免使用ext2/ext3(性能有限);挂载时添加noatime(不更新访问时间,减少I/O)、nodiratime(不更新目录访问时间)选项(如mount -o noatime,nodiratime /dev/sda1 /u01)。filesystemio_options参数为SETALL(启用异步I/O),提升Oracle对磁盘的并行访问能力(仅适用于文件系统,ASM不需要)。filesystemio_options为DIRECTIO(启用直接I/O),绕过操作系统缓存,减少缓存污染。iostat -x 1命令监控磁盘的await(平均I/O等待时间,应<20ms)、%util(磁盘利用率,应<70%)等指标,识别瓶颈磁盘。Oracle数据库支持多核CPU并行处理,需合理配置以提升CPU利用率:
numactl工具绑定Oracle进程到特定NUMA节点,避免跨节点内存访问延迟(如numactl --interleave=all /u01/app/oracle/product/19c/bin/dbstart);或在/etc/security/limits.conf中设置oracle用户的memlock限制,配合大页内存使用。taskset命令将Oracle关键进程(如oracle、pmon)绑定到特定CPU核心(如taskset -c 0-3 /u01/app/oracle/product/19c/bin/dbstart),减少进程切换开销。除系统层面外,Oracle自身参数调整也至关重要:
SHARED_POOL(共享池,缓存SQL语句)和PGA_AGGREGATE_TARGET(排序、哈希操作);OLAP系统(大数据分析)增大DB_CACHE_SIZE(数据缓冲区,缓存数据块)和LARGE_POOL(大池,支持并行查询)。PGA_AGGREGATE_TARGET为物理内存的10%~20%(如8GB内存设为1G~2G),避免PGA过大导致内存交换。PROCESSES(最大进程数)和SESSIONS(最大会话数)为实际需求(如PROCESSES=300、SESSIONS=335,SESSIONS=PROCESSES*1.1+5),避免过多连接导致资源竞争。LOG_BUFFER(日志缓冲区大小)为1M~4M(如LOG_BUFFER=2M),提升日志写入性能(避免日志缓冲区满导致事务阻塞)。调优需持续进行,通过工具监控性能瓶颈:
AWR(自动工作负载仓库)收集性能数据,ADDM(自动数据库诊断工具)分析瓶颈(如SQL执行慢、I/O等待);ASH(活动会话历史)监控实时会话状态。top(查看CPU、内存使用率)、vmstat 1(查看系统整体性能,如进程、内存、I/O)、iostat -x 1(查看磁盘I/O性能)、sar -n DEV 1(查看网络流量)等命令监控系统资源。ANALYZE TABLE(更新表统计信息,帮助优化器生成更好执行计划)、ALTER INDEX REBUILD(重建碎片化索引,提升查询性能)、DBMS_STATS.GATHER_DICTIONARY_STATS(收集数据字典统计信息)等维护操作。bluetooth、cups),减少资源竞争(使用systemctl disable 服务名命令)。EXPLAIN PLAN分析SQL执行计划,避免全表扫描(添加索引)、减少子查询(用JOIN替代)、使用绑定变量(减少SQL解析时间)。