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
),根據寫入延遲調整大小。