CentOS環境下Oracle數據庫性能優化技巧
調整CentOS內核參數以匹配Oracle的內存與I/O需求,關鍵參數包括:
kernel.shmmax
(單個共享內存段最大值,建議設為物理內存的85%)、kernel.shmall
(共享內存總頁數,shmmax/4096
取整);fs.file-max
(系統最大文件數,建議≥6815744);fs.aio-max-nr
(異步I/O請求數,建議≥1048576);net.ipv4.ip_local_port_range
(客戶端端口范圍,建議設為9000-65500);vm.swappiness
(交換空間使用傾向,建議設為10以減少磁盤交換)。sysctl -p
使參數生效。noatime
(不更新訪問時間)、nodiratime
(不更新目錄訪問時間)、data=writeback
(減少日志開銷)等選項,提升文件讀寫效率;systemctl stop firewalld
)、SELinux(setenforce 0
),減少系統資源消耗。SGA是Oracle共享內存區域,需根據業務類型(OLTP/OLAP)分配:
SHARED_POOL_RESERVED_SIZE
(預留5%-10%給大SQL)避免碎片;ALTER SYSTEM SET SGA_TARGET=4G SCOPE=BOTH
啟用自動共享內存管理(ASMM),簡化配置。PGA用于存儲會話私有內存(如排序、哈希連接),建議:
PGA_AGGREGATE_TARGET
),根據應用負載設置(如OLTP設為500M-1G,OLAP設為1G-2G);V$PGA_TARGET_ADVICE
視圖預測最佳值(選擇命中率>90%的最小值);減少內存碎片,提升SGA訪問效率:
內存大?。∕B)/2MB
(如8G內存需4096個);/etc/sysctl.conf
:vm.nr_hugepages=4096
;hugetlb
組:usermod -aG hugetlb oracle
,重啟生效。lvcreate -i 4 -I 64 -L 100G -n data vg01
),提升并行I/O能力;DISK_ASYNCH_IO=TRUE
(默認開啟),允許后臺進程(如DBWn)異步寫入,提升吞吐量;LOG_BUFFER=64M-128M
(大事務場景),減少日志寫入沖突。:emp_id
替代硬編碼值,減少硬解析(硬解析消耗大量CPU與Latch);WHERE
子句過濾數據,避免全表掃描。WHERE
、JOIN
、ORDER BY
子句中的高頻列創建索引(如CREATE INDEX idx_emp_name ON employees(name)
);ALTER INDEX idx_emp_name REBUILD
定期重建,提升索引效率;V$OBJECT_USAGE
視圖監控索引使用情況,刪除未使用或重復的索引,減少維護開銷。將大表分成多個分區(如按時間、范圍、哈希),提升查詢與維護效率:
CREATE TABLE sales (id NUMBER, sale_date DATE) PARTITION BY RANGE (sale_date) (...)
;TEMPORARY TABLESPACE
(如CREATE USER scott IDENTIFIED BY tiger TEMPORARY TABLESPACE temp
);ALTER TABLESPACE temp_group ADD TEMPFILE '/u01/oradata/temp01.dbf' SIZE 1G
)。定期生成AWR(自動工作負載倉庫)報告(SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(...))
),分析性能瓶頸(如CPU、I/O、SQL);使用ADDM(自動數據庫診斷監視器)獲取優化建議。
DBMS_STATS.GATHER_SCHEMA_STATS
收集表、索引的統計信息,確保優化器生成最佳執行計劃;ALTER TABLE table_name COALESCE
)、索引碎片(ALTER INDEX index_name REBUILD
);