Oracle 内核参数
安裝Oracle的時候,可以參考Oracle 的安裝文檔,來設置相關內核參數的值,但是有些參數的值還是需要根據我們自己的情況來進行調整。注:不同系統的參數不同,本篇針對linux。
一。Linux 系統下的核心參數
1 # vi /etc/sysctl.conf 2 3 kernel.shmmax = 2147483648 4 kernel.shmall = 2097152 5 kernel.shmmni = 4096 6 kernel.sem = 250 32000 100 128 7 fs.file-max = 65536 8 net.ipv4.ip_local_port_range = 9000 65000 9 net.core.rmem_default = 4194304 10 net.core.rmem_max = 4194304 11 net.core.wmem_default = 262144 12 net.core.wmem_max = 262144 13 14 該參數保存在/etc/sysctl.conf 下,修改該文件不需要重啟OS,只需要使用如下命令: 15 # /sbin/sysctl -p在介紹各個參數之前,先來看一個概念:共享內存?
共享內存是在系統內核分配的一塊緩沖區,多個進程都可以訪問該緩沖區。由于進程可以直接讀寫內存,避免了在內核空間與用戶空間的切換,所以共享內存讀寫效率很高。當一個進程改變了這塊地址中的內容的時候,其它進程都會察覺到這個更改。共享內存類似與windows環境編程中的內存映像文件。通過使用共享內存允許兩個或多個進程共享一定的存儲區,因為不需要拷貝數據。Oracle SGA即是基于此方式來實現Oracle進程之間數據共享。因此SGA的合理設置對Oracle性能有重大的影響。可以通過ipcs -lm來查看所有的共享內存設置。
? 共享內存總大小=(每個共享內存段*相應共享內存段大小)總和
1.1 kernel.shmmax
Shmmax 是核心參數中最重要的參數之一,用于定義單個共享內存段的最大值。shmmax 設置應該足夠大,能在一個共享內存段下容納下整個的SGA ,設置的過低可能會導致需要創建多個共享內存段,這樣可能導致系統性能的下降 。
Shmmax 僅僅是在共享內存段被創建的時候用來比較的一個數字,當共享內存段被一個進程(Process)創建,操作系統檢查是否被要求的共享內存段的值大于shmmax 的值 ,如果是,那么將會拋出一個錯誤。這個時候系統會創建另外的一個或多個共享內存段滿足進程的需求 。一般來說,共享內存段個數和系統性能沒有太直接的關系,也不會對性能產生太大的影響。
Oralce 建議 SHMMAX > SGA(SGA_MAX_SIZE),這樣在任何時候都不會有甚至輕微的性能下降的隱患。
1.2 kernel.shmall
kernel.shmall 參數是控制共享內存頁數。該參數大小為物理內存除以pagesize;
1 查看os系統頁的大小 2 #getconf PAGESIZE 3 4096這里顯示的pagesize 是4k,假設一個共享內存段的最大大小是16G,那么需要共享內存頁數是 16GB/4KB=16777216KB/4KB=4194304(頁),也就是64Bit 系統下16GB 物理內存,設置 kernel.shmall = 4194304 才符合要求,幾乎是原來設置2097152的兩倍。
?1.3 kernel.shmmni
Shmmni 內核參數是共享內存段的最大數量(注意:這個參數不是 shmmin,是shmmni, shmmin 表示內存段最小大小 )。shmmni 缺省值 4096 ,一般肯定是夠用了。
1.4 kernel.sem = SEMMSL SEMMNS SEMOPM? SEMMNI?
共享資源提供并發同步的計數器(PV操作),避免競爭,一個時刻只能由一個進程操作共享資源,多人可能要操作共識資源,計數器提供計數,排隊。
- SEMMSL:內核參數用于控制每個信號集合的最大信號數。Oracle 建議將 SEMMSL 設置為 spfileXXX.ora文件(適用于Linux 系統上所有數據庫)中的最大 process實例參數設置再加上 10。此外,Oracle 建議將 SEMMSL 設置為不小于 100。
- SEMMNS:內核參數用于控制整個Linux 系統中的信號(而非信號集)的最大數量。Oracle 建議將 SEMMNS 設置為系統上每個數據庫的 process實例參數設置之和,加上最大的 process的兩倍,最后為系統上的每個 Oracle 數據庫加上 10。
- SEMOPM: 內核參數用于控制每個 semop 系統調用可以執行的信號操作數。semop 系統調用(函數)能夠使用一個 semop 系統調用完成多個信號的操作。一個信號集可以擁有每個信號集中最大數量的 SEMMSL,因此建議將 SEMOPM 設置為等于 SEMMSL。Oracle 建議將 SEMOPM 設置為不小于 100。
- SEMMNI: 內核參數用于控制整個 Linux 系統中信號集的最大數量。 Oracle 建議將 SEMMNI 設置為不小于 100。使用以下計算式確定可以在 Linux 系統上分配的信號的最大數量。它將是以下兩者中較小的一個值:SEMMNS 或? (SEMMSL * SEMMNI) 。
1.5 fs.file-max
文件句柄數,表示在Linux系統中可以打開的文件數量。Oracle 建議將整個系統的文件句柄值至少設置為 65536。建議設置:fs.file-max=512*processes。
1.6 網絡參數
net.ipv4.ip_local_port_range 應用程序可使用的IPv4端口范圍。net.core.rmem_default 套接字接收緩沖區大小的缺省值net.core.rmem_max 套接字接收緩沖區大小的最大值net.core.wmem_default 套接字發送緩沖區大小的缺省值net.core.wmem_max 套接字發送緩沖區大小的最大值1.7 fs.aio-max-nr
指同時可以擁有的的異步IO請求數目。建議設置為:1048576 其實它等于 1024*1024 也就是 1024K 個。
?
二. Oracle 參數 SGA_TARGET
在Oracle 10g 中引入了一個新特性:自動共享內存管理(Automatic Shared Memory Management ASMM)。控制這一特性的,就是參數SGA_TARGE。當給SGA_TARGET 指定值后(默認為0,即沒有啟動ASMM),就自動啟動ASMM特性。啟動ASSM 特性之后:Oracle 可以自動為我們調整以下內存池的大小:
1 * Buffer cache (DB_CACHE_SIZE) 2 * Shared pool (SHARED_POOL_SIZE) 3 * Large pool (LARGE_POOL_SIZE) 4 * Java pool (JAVA_POOL_SIZE) 5 * Streams pool (STREAMS_POOL_SIZE)需要手動調整的參數:
1 log buffer 2 db_nk_cache_size 3 db_keep_cache_size 4 db_recycle_cache_sizeSGA_TARGET和SGA_MAX_SIZE 都是表示SGA 最大的大小,但SGA_TARGET不能大于SGA_MAX_SIZE 。Oracle10g 下, SGA_MAX_SIZE 仍然表示SGA 的大小的上限值,而SGA_TARGET 是SGA 的所有組件的大小的最大值之和,即當SGA_TARGET< SGA_MAX_SIZE 的時候,oracle 就會忽略SGA_MAX_SIZE 的值,SGA_TARGET 也就成了SGA 的在此實例中的上限制,它能動態改變大小,但是不能夠大于SGA_MAX_SIZE 的值。
當SGA_TARGET< SGA_MAX_SIZE 時,實例重啟以后SGA_MAX_SIZE 就變成SGA_TARGET 的大小了。
?
總結
以上是生活随笔為你收集整理的Oracle 内核参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python flask面试题_Flas
- 下一篇: 添加永久路由的方法