Linux层面提升Oracle查询速度的可落地方案
一 系统级调优优先做
tuned-adm profile tuned-profiles-oracle && systemctl status tuned 启用并验证。针对延迟敏感负载,评估将 NUMA balancing 设为 0(在 /etc/sysctl.conf 中 kernel.numa_balancing=0 后 sysctl -p)。vm.swappiness=10、vm.dirty_background_ratio=3、vm.dirty_ratio=40、vm.dirty_expire_centisecs=50、vm.dirty_writeback_centisecs=100。Hugepagesize=2048 KB,SGA=20 GB ⇒ vm.nr_hugepages=20971520/2048=10240;在 /etc/sysctl.conf 设置 vm.nr_hugepages=10240 并持久化到 GRUB。fs.aio-max-nr=80000000,并确认 Oracle 使用 Direct I/O/异步 I/O。/etc/security/limits.conf 为 Oracle 用户放宽关键限制(如 nofile、nproc、memlock),避免 “Too many open files” 与内存锁定失败。二 内核与网络参数建议
kernel.shmmax=4398046511104(约 4 TB)、kernel.shmall=1073741824(页)、kernel.shmmni=4096、kernel.sem=10000 1280000 10000 1024。fs.file-max=6815744,fs.aio-max-nr=80000000,避免连接/文件句柄瓶颈。net.ipv4.ip_local_port_range=9000 65535。net.core.rmem_default=262144、net.core.wmem_default=262144、net.core.rmem_max=16777216、net.core.wmem_max=16777216、net.core.netdev_max_backlog=300000、net.core.optmem_max=16777216;TCP 缓冲区与策略如 net.ipv4.tcp_rmem=4096 87380 16777216、net.ipv4.tcp_wmem=4096 87380 16777216、net.ipv4.tcp_mem=16777216 16777216 16777216、net.ipv4.tcp_low_latency=1。sysctl -w 临时生效,或写入 /etc/sysctl.conf 后 sysctl -p 持久化。三 存储与 I/O 子系统优化
fs.aio-max-nr 足够大,Oracle 参数 disk_asynch_io=TRUE,避免同步 I/O 成为瓶颈。四 数据库层协同优化
MEMORY_TARGET 或分别设置 SGA_TARGET/PGA_AGGREGATE_TARGET,减少磁盘访问与排序溢出。SELECT *,使用 绑定变量 降低硬解析,优先 JOIN 替代复杂子查询,利用 EXPLAIN PLAN/DISPLAY_CURSOR 与 SQL Tuning Advisor 定位问题;必要时谨慎使用 Hint。DBMS_STATS),保证优化器选择更优计划。五 实施步骤与验证
vmstat/sar/iostat、平均查询时延、IOPS/延迟、P95/P99 响应)。