Oracle數據庫的內存結構分為**系統全局區(SGA)和程序全局區(PGA)**兩大核心組件:
大頁內存可將內存頁大小從默認的4KB擴大至2MB(或更大),減少頁表項數量,降低內存管理開銷,尤其適合Oracle這類內存密集型應用。
大頁數量 = (Oracle SGA大小 + PGA大小) / 大頁大小
(如SGA=12GB、PGA=4GB,大頁大小2MB,則需8000個)。/etc/sysctl.conf
文件,添加vm.nr_hugepages=8000
;執行sysctl -p
使配置生效;修改Oracle用戶權限(echo "oracle soft memlock 16384000" >> /etc/security/limits.conf
,其中16384000=8000*2MB)。優化Linux內核參數以適配Oracle內存需求,避免因系統限制導致內存分配失?。?/p>
kernel.shmmax
(單個共享內存段最大值,建議設為SGA大小或更大)、kernel.shmall
(共享內存總頁數,計算公式為總共享內存(字節)/頁大?。?KB)
)、kernel.shmmni
(共享內存段最大數量,默認4096,一般無需修改)。fs.file-max
(系統最大文件句柄數,建議設為65536以上,滿足Oracle多進程需求)、fs.aio-max-nr
(異步I/O請求數量,建議設為65536以上)。net.core.rmem_default
/net.core.rmem_max
(接收緩沖區大小,建議設為262144以上)、net.core.wmem_default
/net.core.wmem_max
(發送緩沖區大小,建議設為262144以上)。vm.swappiness
(系統使用交換空間的傾向,建議設為10以下,減少內存交換對性能的影響)。AMM是Oracle 11g及以上版本引入的特性,可自動在SGA和PGA之間動態分配內存,簡化管理流程。
MEMORY_TARGET
(Oracle實例總內存大小,包括SGA+PGA,建議設為物理內存的70%-80%)、MEMORY_MAX_TARGET
(MEMORY_TARGET
的上限,需重啟生效)。ALTER SYSTEM SET MEMORY_MAX_TARGET=13G SCOPE=SPFILE; -- 設置上限
ALTER SYSTEM SET MEMORY_TARGET=12.8G SCOPE=SPFILE; -- 設置當前總內存
ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE; -- 關閉SGA手動管理
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;-- 關閉PGA手動管理
SHUTDOWN IMMEDIATE; STARTUP; -- 重啟生效
SHOW PARAMETER TARGET
查看參數是否生效,V$MEMORY_DYNAMIC_COMPONENTS
查看各內存組件當前大小。若未使用AMM,需手動調整SGA和PGA各組件大?。?/p>
DB_CACHE_SIZE
(數據緩沖區,建議設為SGA的50%-70%,提升數據緩存命中率)、SHARED_POOL_SIZE
(共享池,建議設為SGA的20%-30%,避免過大導致內存碎片)、LOG_BUFFER
(重做日志緩沖區,建議設為16M-32M,無需過大)。PGA_AGGREGATE_TARGET
(PGA總大小,OLTP系統建議設為Oracle總內存的20%,DSS系統設為50%-70%,適配不同負載需求)。ALTER SYSTEM SET DB_CACHE_SIZE=800M SCOPE=BOTH; -- 調整數據緩沖區
ALTER SYSTEM SET SHARED_POOL_SIZE=300M SCOPE=BOTH; -- 調整共享池
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=500M SCOPE=BOTH;-- 調整PGA
低效SQL是內存消耗的主要來源,需通過以下方式優化:
SELECT * FROM emp WHERE empno=1
改為SELECT * FROM emp WHERE empno=:1
)。SELECT *
(只查詢必要列)、合理使用分頁(減少單次查詢數據量),降低內存中的排序和緩存壓力。ALTER SYSTEM FLUSH SHARED_POOL
命令清理不再使用的SQL/PL/SQL代碼(如長期未執行的存儲過程),釋放內存。ALTER SYSTEM FLUSH PGA_MEMORY
命令清理PGA緩存(如排序區、會話內存),適用于PGA內存緊張的場景。V$SGA
(查看SGA總大小及各組件分配)、V$SGASTAT
(查看SGA各組件的詳細使用情況,如緩沖區命中率)、V$BUFFER_POOL_STATISTICS
(查看數據緩沖區的命中率,建議高于90%)。V$PGA
(查看PGA總大小及使用情況)、V$PGASTAT
(查看PGA內存使用統計,如排序區使用率)、V$PROCESS_MEMORY
(查看每個進程的PGA使用情況)。DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT
生成,包含內存使用趨勢、SQL執行統計等信息,用于長期性能分析。