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的性能問題。