1. 操作系统层面基础优化
fs.aio-max-nr(异步IO请求最大数目,建议设为1048576)、fs.file-max(系统最大打开文件数,建议设为6815744)、kernel.shmmax(单个共享内存段最大值,建议设为物理内存的80%)、kernel.shmall(共享内存总页数,shmmax/页大小)、vm.swappiness(内核交换倾向,生产环境建议设为10以下)等参数,优化系统资源分配。noatime(不更新访问时间,减少元数据操作)、nodiratime(不更新目录访问时间)、data=writeback(减少日志同步开销)等选项,提升文件读写效率。2. Oracle内存参数精准调优
SGA_TARGET(SGA总大小,建议为物理内存的30%-50%)和SGA_MAX_SIZE(SGA最大上限,建议设为SGA_TARGET的1.2倍),Oracle会自动分配共享池、缓冲区缓存等组件大小。监控V$SGASTAT视图,确保共享池命中率(GETHITRATIO)>95%、缓冲区缓存命中率>90%(计算公式:1-(PHYSICAL_READS/(DB_BLOCK_GETS+CONSISTENT_GETS)))。PGA_AGGREGATE_TARGET(PGA总大小,建议为SGA的1/3-1/2),通过V$PGA_TARGET_ADVICE视图预测不同目标值的性能影响,选择命中率>90%的最小值。优化高PGA消耗SQL(如减少全排序、使用索引替代排序),避免PGA内存竞争。SHARED_POOL_RESERVED_SIZE(共享池预留空间,建议为SHARED_POOL_SIZE的5%-10%),防止大SQL占用过多共享池导致碎片化。避免频繁DDL操作(如DROP/CREATE TABLE),减少游标失效(硬解析),监控V$LIBRARYCACHE视图的RELOADS(硬解析次数,应<1%)。3. SQL语句与索引高效优化
EXPLAIN PLAN生成执行计划,结合DBMS_XPLAN.DISPLAY查看详细路径(如是否全表扫描、是否使用索引),识别TABLE ACCESS FULL(全表扫描)、SORT ORDER BY(排序操作)等性能瓶颈。通过/*+ INDEX(table index_name) */(索引提示)、/*+ PARALLEL(table degree) */(并行提示)等优化器提示调整执行计划。WHERE、JOIN、ORDER BY子句中的列)创建B-tree索引(适合等值查询),复合索引遵循“最左前缀原则”(如(dept_id, emp_name)索引可用于WHERE dept_id=10或WHERE dept_id=10 AND emp_name='John')。定期重建碎片化索引(ALTER INDEX idx_name REBUILD),删除未使用或重复索引(通过DBA_INDEXES视图监控USED列),避免索引维护开销。SELECT *(只查询所需列,减少I/O),使用绑定变量(如:dept_id代替硬编码值,减少硬解析),拆分复杂嵌套子查询为临时表或CTE(公用表表达式),优化LIKE条件(避免前导通配符%value,改用value%)。4. I/O子系统深度优化
/data,日志文件放在/logs),避免I/O争用。对大表使用分区表(按时间、范围、列表分区),将数据分散到多个物理文件,提升查询和维护效率。DISK_ASYNCH_IO=TRUE),减少进程等待I/O的时间;调整DB_FILE_MULTIBLOCK_READ_COUNT(多块读计数,OLTP建议设为8-16,OLAP建议设为32-64),优化全表扫描和索引快速全扫描的性能。5. 性能监控与诊断工具
@?/rdbms/admin/awrrpt.sql生成AWR报告(收集一段时间内的性能数据,如SQL执行时间、等待事件),通过@?/rdbms/admin/addmrpt.sql生成ADDM报告(分析AWR数据,给出优化建议),定期审查报告定位性能瓶颈。V$SESSION_WAIT视图监控会话等待事件(如db file sequential read表示索引扫描等待,log file parallel write表示日志写入等待),使用V$SQL视图查看高频SQL(EXECUTIONS列)和慢SQL(ELAPSED_TIME列),使用Oracle Enterprise Manager(OEM)实现图形化监控。ALTER SESSION SET EVENTS '10046 trace name context forever, level 12'开启10046事件(跟踪SQL执行细节,包括绑定变量值、执行计划),使用ALTER SESSION SET EVENTS '10053 trace name context forever, level 1'开启10053事件(跟踪优化器决策过程),分析复杂SQL的性能问题。