一、操作系統級優化
/etc/sysctl.conf
文件,優化與Oracle相關的參數。例如:fs.aio-max-nr = 1048576
(提升異步I/O能力)、fs.file-max = 6815744
(增加系統最大文件描述符數)、kernel.sem = 250 32000 100 128
(調整信號量參數)、net.ipv4.ip_local_port_range = 9000 65500
(擴大本地端口范圍)、vm.swappiness = 10
(降低內存換出傾向,減少磁盤I/O)。修改后執行sysctl -p
使配置生效。systemctl stop firewalld
)、禁用SELinux(setenforce 0
,并修改/etc/selinux/config
中SELINUX=disabled
),減少系統資源消耗。二、內存管理優化
ALTER SYSTEM SET SGA_TARGET=4G SCOPE=BOTH;
設置SGA目標大小,ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=BOTH;
設置PGA聚合目標大小。建議SGA占總內存的60%-80%,PGA占10%-20%。內存大小(MB)×0.8÷2
),修改/etc/sysctl.conf
中的vm.nr_hugepages
參數,重啟系統后生效。三、數據庫參數調優
sessions
)和進程數(processes
)。例如,ALTER SYSTEM SET sessions=200 SCOPE=SPFILE;
、ALTER SYSTEM SET processes=200 SCOPE=SPFILE;
,避免過多連接導致資源競爭。ALTER SYSTEM SET log_buffer=64M SCOPE=SPFILE;
,需重啟數據庫生效。四、索引優化
WHERE
、JOIN
、ORDER BY
列創建索引。例如,CREATE INDEX idx_emp_department ON employees(department_id);
,加速條件查詢。ALTER INDEX idx_name REBUILD;
重建碎片化索引,刪除未使用或重復索引(可通過DBA_INDEXES
視圖查看使用情況),減少索引維護開銷。五、SQL語句優化
SELECT employee_id, name FROM employees WHERE department_id=10;
替代SELECT *
。SELECT * FROM employees WHERE department_id=:dept_id;
,通過:dept_id
傳遞參數。SELECT /*+ USE_HASH(e,d) */ e.name, d.department_name FROM employees e JOIN departments d ON e.department_id=d.department_id;
(使用哈希連接提示)。EXPLAIN PLAN FOR SELECT ...;
查看查詢執行計劃,識別全表掃描、索引未使用等問題,針對性優化。六、分區技術應用
CREATE TABLE sales (sale_id NUMBER, sale_date DATE) PARTITION BY RANGE (sale_date) (PARTITION p2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')), PARTITION p2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')));
,查詢2024年數據時只需掃描p2024
分區。CREATE INDEX idx_sales_date ON sales(sale_date) LOCAL;
。七、并行處理優化
ALTER TABLE large_table PARALLEL (DEGREE 4);
,表示使用4個并行進程處理查詢。SELECT /*+ PARALLEL(large_table, 4) */ * FROM large_table WHERE condition;
。八、定期維護與監控
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME');
。ALTER TABLE table_name MOVE;
)和索引(ALTER INDEX index_name REBUILD;
),減少碎片對性能的影響。@?/rdbms/admin/awrrpt.sql
生成AWR報告,查看TOP SQL、等待事件等信息。九、硬件優化