Oracle数据库在Linux上的性能调优技巧
kernel.shmall、kernel.shmmax)以匹配系统物理内存,确保Oracle有足够共享内存;设置文件句柄限制(fs.file-max)满足大量文件操作需求;优化网络参数(net.core.rmem_default、net.core.wmem_max)提升网络吞吐量。noop(避免重复调度),机械硬盘推荐deadline(保证延迟);通过cat /sys/block/sdX/queue/scheduler验证当前调度器,修改/sys/block/sdX/queue/scheduler文件永久生效。/etc/sysctl.conf添加vm.nr_hugepages=计算值(公式:ceil(Oracle_SGA_SIZE/2MB)),执行sysctl -p生效;同时配置Oracle参数use_large_pages='TRUE'。db_cache_size、shared_pool_size、large_pool_size),建议使用自动内存管理(MEMORY_TARGET/MEMORY_MAX_TARGET)简化配置;PGA通过pga_aggregate_target设置,确保排序、哈希操作有足够内存。vm.swappiness(建议设为10或更低)减少系统使用交换空间的倾向;设置vm.vfs_cache_pressure(建议设为50-100)控制内核回收目录和inode缓存的积极性,释放内存供Oracle使用。DBMS_SHARED_POOL.PURGE),删除长时间未执行的SQL;使用绑定变量减少SQL解析次数,降低共享池碎片。noatime,nodiratime(禁用访问时间更新)、nobarrier(减少写入延迟)选项,提升I/O性能。fdisk或sfdisk创建1M边界对齐的分区(如echo "2048,,+" | sfdisk -uS /dev/sdX),避免读写操作跨越物理块边界,提升I/O效率。filesystemio_options参数(设为ASYNC),允许数据库使用异步I/O;调整磁盘队列深度(nr_requests和queue_depth,建议设为512或更高),提升并行I/O能力。SELECT *,明确列出所需列;使用绑定变量减少SQL解析;避免在索引列上使用函数或表达式(如WHERE UPPER(name) = 'JOHN'),防止索引失效。ALTER INDEX idx_name REBUILD);使用覆盖索引(包含查询所需的所有列)减少回表操作。ALTER TABLE table_name PARALLEL(DEGREE n)),利用多核CPU提升查询速度。DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML)生成性能报告,识别高负载SQL、等待事件;使用ASH(DBMS_ACTIVE_SESSION_HISTORY)分析实时会话活动;通过OEM Cloud Control实现可视化监控。EXEC DBMS_STATS.GATHER_SCHEMA_STATS),确保优化器生成最佳执行计划;清理临时表空间(ALTER TABLESPACE temp SHRINK SPACE)释放空间;监控日志缓冲区(log_buffer),根据写入延迟调整大小。