本篇內(nèi)容介紹了“oracle rac內(nèi)核參數(shù)的詳細(xì)介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)專注于平陽(yáng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供平陽(yáng)營(yíng)銷型網(wǎng)站建設(shè),平陽(yáng)網(wǎng)站制作、平陽(yáng)網(wǎng)頁(yè)設(shè)計(jì)、平陽(yáng)網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造平陽(yáng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供平陽(yáng)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
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
注意: 如果已經(jīng)存在的值大于這個(gè)值,就不要修改!
--然后運(yùn)行下面命令,使上面的設(shè)置生效
#/sbin/sysctl -p
參數(shù)說(shuō)明:
kernel.shmall為物理內(nèi)存除以pagesize;
kernel.shmmax為物理內(nèi)存的一半;
fs.file-max為512 乘以 processes (如128個(gè)process則為 65536);
net.ipv4.ip_local_port_range/net.core.rmem_default/net.core.rmem_max三個(gè)參數(shù)設(shè)置和官方文檔不一樣, 這是根據(jù)metalink 343431.1 最新要求更改的;
net.ipv4.tcp_rmem/net.ipv4.tcp_wmem兩個(gè)參數(shù)一般情況下無(wú)需設(shè)置, 除非是在Dataguard/Streams等需很多網(wǎng)絡(luò)傳輸情況下;
其它參數(shù)根據(jù)官方文檔要求設(shè)置即可.
# Controls the maximum shared segment size, in bytes --物理內(nèi)存的一般
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296 --物理內(nèi)存除以pagesize
-- 以上2個(gè)參數(shù),都已經(jīng)存在, 只需要調(diào)整一下參數(shù)大小
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 -- 這個(gè)端口從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
注意:如果已經(jīng)存在的值,大于這里的設(shè)置,就不要修改。
2. kernel.shmmax 參數(shù)
2.1 說(shuō)明
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 是核心參數(shù)中最重要的參數(shù)之一,用于定義單個(gè)共享內(nèi)存段的最大值,shmmax 設(shè)置應(yīng)該足夠大,能在一個(gè)共享內(nèi)存段下容納下整個(gè)的SGA ,設(shè)置的過(guò)低可能會(huì)導(dǎo)致需要?jiǎng)?chuàng)建多個(gè)共享內(nèi)存段,這樣可能導(dǎo)致系統(tǒng)性能的下降 。
SHMMAX 僅僅是在共享內(nèi)存段被創(chuàng)建的時(shí)候用來(lái)比較的一個(gè)數(shù)字,當(dāng)共享內(nèi)存段被一個(gè)進(jìn)程(Process)創(chuàng)建,操作系統(tǒng)檢查是否被要求的共享內(nèi)存段的值大于shmmax 的值 ,如果是,那么將會(huì)拋出一個(gè)錯(cuò)誤。這個(gè)時(shí)候系統(tǒng)會(huì)創(chuàng)建另外的一個(gè)或多個(gè)共享內(nèi)存段滿足進(jìn)程的需求 。一般來(lái)說(shuō),共享內(nèi)存段個(gè)數(shù)和系統(tǒng)性能沒有太直接的關(guān)系,也不會(huì)對(duì)性能產(chǎn)生太大的影響。
在實(shí)例啟動(dòng)以及Server Process 創(chuàng)建的時(shí)候,多個(gè)小的共享內(nèi)存段可能會(huì)導(dǎo)致當(dāng)時(shí)輕微的系統(tǒng)性能的降低(在啟動(dòng)的時(shí)候 需要去創(chuàng)建多個(gè)虛擬地址段,在進(jìn)程創(chuàng)建的時(shí)候要讓進(jìn)程對(duì)多個(gè)段進(jìn)行“識(shí)別”,會(huì)有一些影響),但是其他時(shí)候都不會(huì)有影響。這意味著如果你的程序不是經(jīng)常Create Processes(以及Destroy Them),性能方面就不是考慮的問(wèn)題。
Oralce 建議 SHMMAX > SGA(SGA_MAX_SIZE),這樣在任何時(shí)候都不會(huì)有甚至輕微的性能下降的隱患。
2.2 示例
在上節(jié)說(shuō)了,如果shmmax 小與SGA,Oracle 會(huì)創(chuàng)建多個(gè)共享內(nèi)存段,我們可以使用Ipcs -sa 查看看到共享內(nèi)存段個(gè)數(shù)。
(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
因?yàn)閗ernel.shmmax設(shè)置過(guò)小,導(dǎo)致分配了多個(gè)共享內(nèi)存段。
下邊改大一些:
[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
只有一個(gè)內(nèi)存段分配了
3. kernel.shmall
kernel.shmall 參數(shù)是控制共享內(nèi)存頁(yè)數(shù)。該參數(shù)大小為物理內(nèi)存除以pagesize;
查看os系統(tǒng)頁(yè)的大小
#getconf PAGESIZE
4096
這里顯示的pagesize 是4k,假設(shè)一個(gè)共享內(nèi)存段的最大大小是16G,那么需要共享內(nèi)存頁(yè)數(shù)是 16GB/4KB=16777216KB/4KB=4194304 (頁(yè)),也就是64Bit 系統(tǒng)下16GB 物理內(nèi)存,設(shè)置 kernel.shmall = 4194304 才符合要求,幾乎是原來(lái)設(shè)置2097152的兩倍。
4. kernel.shmmni 參數(shù)
shmmni 內(nèi)核參數(shù)是共享內(nèi)存段的最大數(shù)量(注意這個(gè)參數(shù)不是 shmmin,是
shmmni, shmmin 表示內(nèi)存段最小大小 )。shmmni 缺省值 4096 ,一般肯定是夠用了。
5. fs.file-max 參數(shù)
fs.file-max為512 乘以 processes。
如128個(gè)process,則file-max=512*128=65536。
6. Oracle 下需要做調(diào)整的參數(shù)
在Oracle 10g 中引入了一個(gè)非常重要的參數(shù):SGA_TARGET,這也是Oracle 10g的一個(gè)新特性。自動(dòng)共享內(nèi)存管理(Automatic Shared Memory Management ASMM),控制這一特性的,就僅僅是這個(gè)參數(shù)SGA_TARGE。設(shè)置這個(gè)參數(shù)后,你就不需要為每個(gè)內(nèi)存區(qū)來(lái)指定大小了。SGA_TARGET 指定了SGA 可以使用的最大內(nèi)存大小,而SGA 中各個(gè)內(nèi)存的大小由Oracle 自行控制,不需要人為指定。
Oracle 可以隨時(shí)調(diào)節(jié)各個(gè)區(qū)域的大小,使之達(dá)到系統(tǒng)性能最佳狀態(tài)的個(gè)最合理大小,并且控制他們之和在SGA_TARGET 指定的值之內(nèi)。一旦給SGA_TARGET 指定值后(默認(rèn)為0,即沒有啟動(dòng)ASMM),就自動(dòng)啟動(dòng)了ASMM
特性。
10g 下設(shè)置 SGA_TARGET 之后啟動(dòng)ASSM 特性之后, 只有以下的這些區(qū)的內(nèi)存大小動(dòng)態(tài)共享起來(lái):
* 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 中的其他區(qū)域的內(nèi)存大小仍然是固定不共享的。它的含義和SGA_MAX_SIZE 的一樣,也表示SGA 最大的大小,于是它也就有了一個(gè)限制,那就是它的大小不能大于SGA_MAX_SIZE 的大小。
Oracle10g 下, SGA_MAX_SIZE 仍然表示SGA 的大小的上限值,而SGA_TARGET 是SGA 的所有組件的大小的最大值之和,即當(dāng)SGA_TARGET< SGA_MAX_SIZE的時(shí)候,oracle 就會(huì)忽略SGA_MAX_SIZE 的值,SGA_TARGET 也就成了SGA 的在此實(shí)例中的上限制,它能動(dòng)態(tài)改變大小,但是不能夠大于SGA_MAX_SIZE 的值。
當(dāng)SGA_TARGET< SGA_MAX_SIZE 時(shí),實(shí)例重啟以后SGA_MAX_SIZE 就變成SGA_TARGET 的大小了。
在11g 中,這個(gè)SGA_TARGET 只能設(shè)置是等于SGA_MAX_SIZE 的大小了,設(shè)置比它小,oracle 會(huì)自動(dòng)幫你調(diào)整,設(shè)置比它大,那還是出錯(cuò)。現(xiàn)在可以自己想想,oracle對(duì)SGA_TARGET 的大小處理在往正確的簡(jiǎn)單的方向前進(jìn)中。
SGA_TARGET 帶來(lái)一個(gè)重要的好處就是,能使SGA 的利用率達(dá)到最佳,從而節(jié)省內(nèi)存成本。因?yàn)锳SMM 啟動(dòng)后,Oracle 會(huì)自動(dòng)根據(jù)需要調(diào)整各個(gè)區(qū)域的大小,大大減少了某些區(qū)域內(nèi)存緊張,而某些區(qū)域又有內(nèi)存空閑的矛盾情況出現(xiàn)。
各參數(shù)詳解:
kernel.shmmax:
是核心參數(shù)中最重要的參數(shù)之一,用于定義單個(gè)共享內(nèi)存段的最大值。設(shè)置應(yīng)該足夠大,能在一個(gè)共享內(nèi)存段下容納下整個(gè)的SGA ,設(shè)置的過(guò)低可能會(huì)導(dǎo)致需要?jiǎng)?chuàng)建多個(gè)共享內(nèi)存段,這樣可能導(dǎo)致系統(tǒng)性能的下降。至于導(dǎo)致系統(tǒng)下降的主要原因?yàn)樵趯?shí)例啟動(dòng)以及ServerProcess創(chuàng)建的時(shí)候,多個(gè)小的共享內(nèi)存段可能會(huì)導(dǎo)致當(dāng)時(shí)輕微的系統(tǒng)性能的降低(在啟動(dòng)的時(shí)候需要去創(chuàng)建多個(gè)虛擬地址段,在進(jìn)程創(chuàng)建的時(shí)候要讓進(jìn)程對(duì)多個(gè)段進(jìn)行“識(shí)別”,會(huì)有一些影響),但是其他時(shí)候都不會(huì)有影響。
官方建議值:
32位linux系統(tǒng):可取最大值為4GB(4294967296bytes)-1byte,即4294967295。建議值為多于內(nèi)存的一半,所以如果是32為系統(tǒng),一般可取值為4294967295。32位系統(tǒng)對(duì)SGA大小有限制,所以SGA肯定可以包含在單個(gè)共享內(nèi)存段中。
64位linux系統(tǒng):可取的最大值為物理內(nèi)存值-1byte,建議值為多于物理內(nèi)存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理內(nèi)存-1byte。例如,如果為12GB物理內(nèi)存,可取12*1024*1024*1024-1=12884901887,SGA肯定會(huì)包含在單個(gè)共享內(nèi)存段中。
kernel.shmall:
該參數(shù)控制可以使用的共享內(nèi)存的總頁(yè)數(shù)。Linux共享內(nèi)存頁(yè)大小為4KB,共享內(nèi)存段的大小都是共享內(nèi)存頁(yè)大小的整數(shù)倍。一個(gè)共享內(nèi)存段的最大大小是16G,那么需要共享內(nèi)存頁(yè)數(shù)是16GB/4KB=16777216KB /4KB=4194304(頁(yè)),也就是64Bit系統(tǒng)下16GB物理內(nèi)存,設(shè)置kernel.shmall = 4194304才符合要求(幾乎是原來(lái)設(shè)置2097152的兩倍)。這時(shí)可以將shmmax參數(shù)調(diào)整到16G了,同時(shí)可以修改SGA_MAX_SIZE和SGA_TARGET為12G(您想設(shè)置的SGA最大大小,當(dāng)然也可以是2G~14G等,還要協(xié)調(diào)PGA參數(shù)及OS等其他內(nèi)存使用,不能設(shè)置太滿,比如16G)
kernel.shmmni:
該參數(shù)是共享內(nèi)存段的最大數(shù)量。shmmni缺省值4096,一般肯定是夠用了。
fs.file-max:
該參數(shù)決定了系統(tǒng)中所允許的文件句柄最大數(shù)目,文件句柄設(shè)置代表linux系統(tǒng)中可以打開的文件的數(shù)量。
fs.aio-max-nr:
此參數(shù)限制并發(fā)未完成的請(qǐng)求,應(yīng)該設(shè)置避免I/O子系統(tǒng)故障。
kernel.sem:
以kernel.sem = 250 32000 100 128為例:
250是參數(shù)semmsl的值,表示一個(gè)信號(hào)量集合中能夠包含的信號(hào)量最大數(shù)目。
32000是參數(shù)semmns的值,表示系統(tǒng)內(nèi)可允許的信號(hào)量最大數(shù)目。
100是參數(shù)semopm的值,表示單個(gè)semopm()調(diào)用在一個(gè)信號(hào)量集合上可以執(zhí)行的操作數(shù)量。
128是參數(shù)semmni的值,表示系統(tǒng)信號(hào)量集合總數(shù)。
net.ipv4.ip_local_port_range:
表示應(yīng)用程序可使用的IPv4端口范圍。
net.core.rmem_default:
表示套接字接收緩沖區(qū)大小的缺省值。
net.core.rmem_max:
表示套接字接收緩沖區(qū)大小的最大值。
net.core.wmem_default:
表示套接字發(fā)送緩沖區(qū)大小的缺省值。
net.core.wmem_max:
表示套接字發(fā)送緩沖區(qū)大小的最大值。
“oracle rac內(nèi)核參數(shù)的詳細(xì)介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!