共計 3565 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章主要介紹“solaris 內存參數有哪些”,在日常操作中,相信很多人在 solaris 內存參數有哪些問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”solaris 內存參數有哪些”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
一、solaris 內存參數說明
shared memory: 共享內存段:
一個內存區域,可以被不同的進程讀取。Oracle 使用它來構成 SGA。Oracle 使用以下三種方法來創建一個 SGA 區:
1. 使用單個共享內存段。
2. 使用連續多個共享內存段。
3. 使用多個不連續共享內存段。
Oracle 優先使用第一種方法,如果成功,則繼續初始化,不成功則使用第二種方法,再不成功則使用第三種方法。如果再不成功,則初始化失敗,Oracle 報告錯誤代碼。
Semaphore:
可以看作一個標記。可以有 On 和 Off 兩種狀態。Oracle 使用 semaphores 來實現服務器進程對 SGA 區的存取控制。
Shared memory 和 semaphore 是 Oracle 在 Unix 上運行的重要資源。如果 Oracle 實例得不到所需要的資源,實例啟動就會失敗。
參數:
對于運行一個 Oracle 實例的 Solaris 系統,改變 /etc/system 文件中的一些關于共享內存的參數,以使 Oracle 實例可以正常運行。如果有多個實例的話,還需根據下面方法重新計算某些值。
shmmax
含義:這個設置并不決定究竟 Oracle 數據庫或者操作系統使用多少物理內存,只決定了最多可以使用的內存數目。這個設置也不影響操作系統的內核資源。
設置方法:0.5* 物理內存。如果物理內存為 20G,則 0.5×20G×1024×1024=10485760
例子:Set shmsys:shminfo_shmmax=10485760
shmmin
含義:共享內存的最小大小。
設置方法:一般都設置成為 1。
例子:Set shmsys:shminfo_shmmin=1
shmmni
含義:系統中共享內存段的最大個數。推薦值為 100 或者 128。
例子:Set shmsys:shminfo_shmmni=100
shmseg
含義:每個用戶進程可以使用的最多的共享內存段的數目。推薦值為 20 或者 10。
例子:Set shmsys:shminfo_shmseg=20
semmni
含義:系統中 semaphore identifierer 的最大個數。推薦值為 100 或者 128。
設置方法:把這個變量的值設置為這個系統上的所有 Oracle 的實例的 init.ora 中的最大的那個 processes 的那個值加 10。
例子:Set semsys:seminfo_semmni=100
semmns
含義:系統中 semaphores 的最大個數。
設置方法:這個值可以通過以下方式計算得到:各個 Oracle 實例的 initSID.ora 里邊的 processes 的值的總和(除去最大的 Processes 參數)+最大的那個 Processes×2+10×Oracle 實例的個數。詳見下面“(semmns 計算實例)”。
例子:Set semsys:seminfo_semmns=200
semmsl
含義:一個 set 中 semaphore 的最大個數。
設置方法:設置成為 10+所有 Oracle 實例的 InitSID.ora 中最大的 Processes 的值。詳見下面“(SEMMSL 計算實例)” .
例子:Set semsys:seminfo_semmsl=200
改變了 /etc/system 里邊以上參數以后,重新啟動計算機:
$reboot
然后檢查當前的參數:
$sysdef -I
如果系統參數仍舊沒有改變得話,使用以下命令:
$modload /kernel/sys/shmsys。
二、oracle 在 solaris 下安裝時參數的計算
SHMMAX maximum size of a shared memory segment
(共享內存段的最大字節數)
SHMMIN minimum size of shared memory segment
(共享內存段的最小尺寸)
SHMMNI maximum number of shared memory identifiers in the system
(系統中共享內存標識符的最大數目)
SHMSEG maximum number of shared memory segments a user process can attach
(每個用戶進程可分配的最大共享內存段數目)
SEMMNI maximum number of semaphore identifiers in the system
(系統中信號燈標識符的最大數目)
SEMMSL maximum number of semaphores in a set
(每個(信號燈)集合中的信號燈的最大數目)
SEMMNS maximum number of semaphores in the system
(系統中信號燈的最大數目)
SEMOPM maximum number of operations per semop call
(每個 semop 調用的信號燈的最大數目)
SEMVMX semaphore maximum value
(信號燈最大值)
set semsys:seminfo_semmni 100
set semsys:seminfo_semmns 1024(semmns 計算實例)
系統中各個 Oracle 實例的 init[SID].ora 文件中 PROCESSES 值的總和(不包括最大的那個 PROCESSES 值)+ 最大的那個 PROCESSES 值 * 2 + 10 * Oracle 實例的個數。
注:[SID]即為具體的數據庫實例名
例如,一個有三個 Oracle 實例的系統,在各自的 initsid.ora 文件中的 PROCESSES 參數設置為下列值:
ORACLE_SID=A, PROCESSES=100
ORACLE_SID=B, PROCESSES=100
ORACLE_SID=C, PROCESSES=200
則 SEMMSL 值的計算方法如下(SEMMSL 計算實例):
SEMMSL = [(c=200) + 10] = 210
則 SEMMNS 值的計算方法如下:
SEMMNS = [(A=100) + (B=100)] + [(C=200) * 2] + [(# of instances=3) * 10] = 630
set semsys:seminfo_semmsl 256
SEMMSL 的值可以通過以下方式計算得到:
所有 Oracle 實例的 init[SID].ora 文件中最大的 PROCESSES 值 + 10
set semsys:seminfo_semvmx 32767
set semsys:seminfo_shmmax 12884901888
24G *0.5 * 1024*1024 (24G 是物理內存)
set semsys:seminfo_shmmin 100
三、solaris11 對內存參數的設置
1、使用 prctl 調整
prctl -n project.max-shm-memory -v 10G -r -i project default
prctl -n project.max-sem-ids -v 256 -r -i project default
prctl -n project.max-shm-ids -v 256 -r -i project default
這樣所作的修改系統重啟后就失效了
2、創建 project, 調整會記錄到 /etc/project 里
可以使用下面的方法為 oracle 用戶創建單獨的 project,然后修改相應的值
projadd -U oracle user.oracle
projmod -a-K project.max-shm-memory=(priv,10g,deny) user.oracle
projmod -a-K project.max-sem-ids=(priv,100,deny) user.oracle
projmod -a-K process.max-sem-nsems=(priv,500,deny) user.oracle
projmod -a-K project.max-shm-ids=(priv,100,deny) user.oracle
修改之后只要切換到 oracle 用戶設置就生效了,重啟之后也不會丟失。更加詳細的關于 project 的操作請查看 solaris 相應的手冊,以后修改 /etc/system 的方法應該會被這種方式逐步取代
到此,關于“solaris 內存參數有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!