您好,登錄后才能下訂單哦!
本篇內容介紹了“oracle rac內核參數的詳細介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1.在/etc/sysctl.conf文件中加入下列行
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 101365
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 1024 65000
for 11gR2
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
注意: 如果已經存在的值大于這個值,就不要修改!
--然后運行下面命令,使上面的設置生效
#/sbin/sysctl -p
參數說明:
kernel.shmall為物理內存除以pagesize;
kernel.shmmax為物理內存的一半;
fs.file-max為512 乘以 processes (如128個process則為 65536);
net.ipv4.ip_local_port_range/net.core.rmem_default/net.core.rmem_max三個參數設置和官方文檔不一樣, 這是根據metalink 343431.1 最新要求更改的;
net.ipv4.tcp_rmem/net.ipv4.tcp_wmem兩個參數一般情況下無需設置, 除非是在Dataguard/Streams等需很多網絡傳輸情況下;
其它參數根據官方文檔要求設置即可.
# Controls the maximum shared segment size, in bytes --物理內存的一般
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296 --物理內存除以pagesize
-- 以上2個參數,都已經存在, 只需要調整一下參數大小
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 327679
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 9000 65500 -- 這個端口從9000開始
for 11gR2
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
注意:如果已經存在的值,大于這里的設置,就不要修改。
2. kernel.shmmax 參數
2.1 說明
SHMMAX Available physical memory Defines the maximum allowable size of one shared memory segment. The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance degradation.
Shmmax 是核心參數中最重要的參數之一,用于定義單個共享內存段的最大值,shmmax 設置應該足夠大,能在一個共享內存段下容納下整個的SGA ,設置的過低可能會導致需要創建多個共享內存段,這樣可能導致系統性能的下降 。
SHMMAX 僅僅是在共享內存段被創建的時候用來比較的一個數字,當共享內存段被一個進程(Process)創建,操作系統檢查是否被要求的共享內存段的值大于shmmax 的值 ,如果是,那么將會拋出一個錯誤。這個時候系統會創建另外的一個或多個共享內存段滿足進程的需求 。一般來說,共享內存段個數和系統性能沒有太直接的關系,也不會對性能產生太大的影響。
在實例啟動以及Server Process 創建的時候,多個小的共享內存段可能會導致當時輕微的系統性能的降低(在啟動的時候 需要去創建多個虛擬地址段,在進程創建的時候要讓進程對多個段進行“識別”,會有一些影響),但是其他時候都不會有影響。這意味著如果你的程序不是經常Create Processes(以及Destroy Them),性能方面就不是考慮的問題。
Oralce 建議 SHMMAX > SGA(SGA_MAX_SIZE),這樣在任何時候都不會有甚至輕微的性能下降的隱患。
2.2 示例
在上節說了,如果shmmax 小與SGA,Oracle 會創建多個共享內存段,我們可以使用Ipcs -sa 查看看到共享內存段個數。
(1)查看
[root@rac01 ~]# cat /etc/sysctl.conf | grep kernel.shmmax
kernel.shmmax = 20971520
[root@rac01 ~]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65537 oracle 640 4194304 27
0x00000000 98306 oracle 640 20971520 27
0x00000000 131075 oracle 640 20971520 27
0x00000000 163844 oracle 640 20971520 27
0x00000000 196613 oracle 640 20971520 27
0x00000000 229382 oracle 640 20971520 27
0x00000000 262151 oracle 640 20971520 27
0x00000000 294920 oracle 640 20971520 27
0xd2776b04 327689 oracle 640 20971520 27
------ Semaphore Arrays --------
key semid owner perms nsems
0xfafd7074 360449 oracle 640 104
------ Message Queues --------
key msqid owner perms used-bytes messages
因為kernel.shmmax設置過小,導致分配了多個共享內存段。
下邊改大一些:
[root@rac01 ~]# cat /etc/sysctl.conf | grep kernel.shmmax
kernel.shmmax = 2147483648
[root@rac01 ~]# sysctl -p
[root@rac01 ~]# su - oracle
[oracle@rac01 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Nov 16 05:50:00 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP
and Data Mining Scoring Engine options
SQL> startup force
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 104859892 bytes
Database Buffers 58720256 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP
and Data Mining Scoring Engine options
再看一下:
[root@rac01 ~]# ipcs -sa
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xd2776b04 360449 oracle 640 171966464 27
------ Semaphore Arrays --------
key semid owner perms nsems
0xfafd7074 491521 oracle 640 104
------ Message Queues --------
key msqid owner perms used-bytes messages
只有一個內存段分配了
3. kernel.shmall
kernel.shmall 參數是控制共享內存頁數。該參數大小為物理內存除以pagesize;
查看os系統頁的大小
#getconf PAGESIZE
4096
這里顯示的pagesize 是4k,假設一個共享內存段的最大大小是16G,那么需要共享內存頁數是 16GB/4KB=16777216KB/4KB=4194304 (頁),也就是64Bit 系統下16GB 物理內存,設置 kernel.shmall = 4194304 才符合要求,幾乎是原來設置2097152的兩倍。
4. kernel.shmmni 參數
shmmni 內核參數是共享內存段的最大數量(注意這個參數不是 shmmin,是
shmmni, shmmin 表示內存段最小大小 )。shmmni 缺省值 4096 ,一般肯定是夠用了。
5. fs.file-max 參數
fs.file-max為512 乘以 processes。
如128個process,則file-max=512*128=65536。
6. Oracle 下需要做調整的參數
在Oracle 10g 中引入了一個非常重要的參數:SGA_TARGET,這也是Oracle 10g的一個新特性。自動共享內存管理(Automatic Shared Memory Management ASMM),控制這一特性的,就僅僅是這個參數SGA_TARGE。設置這個參數后,你就不需要為每個內存區來指定大小了。SGA_TARGET 指定了SGA 可以使用的最大內存大小,而SGA 中各個內存的大小由Oracle 自行控制,不需要人為指定。
Oracle 可以隨時調節各個區域的大小,使之達到系統性能最佳狀態的個最合理大小,并且控制他們之和在SGA_TARGET 指定的值之內。一旦給SGA_TARGET 指定值后(默認為0,即沒有啟動ASMM),就自動啟動了ASMM
特性。
10g 下設置 SGA_TARGET 之后啟動ASSM 特性之后, 只有以下的這些區的內存大小動態共享起來:
* Buffer cache (DB_CACHE_SIZE)
* Shared pool (SHARED_POOL_SIZE)
* Large pool (LARGE_POOL_SIZE)
* Java pool (JAVA_POOL_SIZE)
* Streams pool (STREAMS_POOL_SIZE)
而SGA 中的其他區域的內存大小仍然是固定不共享的。它的含義和SGA_MAX_SIZE 的一樣,也表示SGA 最大的大小,于是它也就有了一個限制,那就是它的大小不能大于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 的大小了。
在11g 中,這個SGA_TARGET 只能設置是等于SGA_MAX_SIZE 的大小了,設置比它小,oracle 會自動幫你調整,設置比它大,那還是出錯。現在可以自己想想,oracle對SGA_TARGET 的大小處理在往正確的簡單的方向前進中。
SGA_TARGET 帶來一個重要的好處就是,能使SGA 的利用率達到最佳,從而節省內存成本。因為ASMM 啟動后,Oracle 會自動根據需要調整各個區域的大小,大大減少了某些區域內存緊張,而某些區域又有內存空閑的矛盾情況出現。
各參數詳解:
kernel.shmmax:
是核心參數中最重要的參數之一,用于定義單個共享內存段的最大值。設置應該足夠大,能在一個共享內存段下容納下整個的SGA ,設置的過低可能會導致需要創建多個共享內存段,這樣可能導致系統性能的下降。至于導致系統下降的主要原因為在實例啟動以及ServerProcess創建的時候,多個小的共享內存段可能會導致當時輕微的系統性能的降低(在啟動的時候需要去創建多個虛擬地址段,在進程創建的時候要讓進程對多個段進行“識別”,會有一些影響),但是其他時候都不會有影響。
官方建議值:
32位linux系統:可取最大值為4GB(4294967296bytes)-1byte,即4294967295。建議值為多于內存的一半,所以如果是32為系統,一般可取值為4294967295。32位系統對SGA大小有限制,所以SGA肯定可以包含在單個共享內存段中。
64位linux系統:可取的最大值為物理內存值-1byte,建議值為多于物理內存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理內存-1byte。例如,如果為12GB物理內存,可取12*1024*1024*1024-1=12884901887,SGA肯定會包含在單個共享內存段中。
kernel.shmall:
該參數控制可以使用的共享內存的總頁數。Linux共享內存頁大小為4KB,共享內存段的大小都是共享內存頁大小的整數倍。一個共享內存段的最大大小是16G,那么需要共享內存頁數是16GB/4KB=16777216KB /4KB=4194304(頁),也就是64Bit系統下16GB物理內存,設置kernel.shmall = 4194304才符合要求(幾乎是原來設置2097152的兩倍)。這時可以將shmmax參數調整到16G了,同時可以修改SGA_MAX_SIZE和SGA_TARGET為12G(您想設置的SGA最大大小,當然也可以是2G~14G等,還要協調PGA參數及OS等其他內存使用,不能設置太滿,比如16G)
kernel.shmmni:
該參數是共享內存段的最大數量。shmmni缺省值4096,一般肯定是夠用了。
fs.file-max:
該參數決定了系統中所允許的文件句柄最大數目,文件句柄設置代表linux系統中可以打開的文件的數量。
fs.aio-max-nr:
此參數限制并發未完成的請求,應該設置避免I/O子系統故障。
kernel.sem:
以kernel.sem = 250 32000 100 128為例:
250是參數semmsl的值,表示一個信號量集合中能夠包含的信號量最大數目。
32000是參數semmns的值,表示系統內可允許的信號量最大數目。
100是參數semopm的值,表示單個semopm()調用在一個信號量集合上可以執行的操作數量。
128是參數semmni的值,表示系統信號量集合總數。
net.ipv4.ip_local_port_range:
表示應用程序可使用的IPv4端口范圍。
net.core.rmem_default:
表示套接字接收緩沖區大小的缺省值。
net.core.rmem_max:
表示套接字接收緩沖區大小的最大值。
net.core.wmem_default:
表示套接字發送緩沖區大小的缺省值。
net.core.wmem_max:
表示套接字發送緩沖區大小的最大值。
“oracle rac內核參數的詳細介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。