solaris記憶體引數調整及管理
一、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的方法應該會被這種方式逐步取代
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2220045/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢記憶體調整及修改方法記憶體
- solaris10中安裝oracle核心引數的調整Oracle
- weblogic 記憶體調整Web記憶體
- 記憶體壓力及IO壓力調整方法記憶體
- Oracle - 資料庫的記憶體調整Oracle資料庫記憶體
- JVM記憶體引數配置JVM記憶體
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- 記憶體管理 記憶體管理概述記憶體
- win10怎麼調整虛擬記憶體_win10怎麼調虛擬記憶體Win10記憶體
- JavaScript 記憶體管理及垃圾回收JavaScript記憶體
- JNI記憶體管理及優化記憶體優化
- 淺談JVM整體架構與調優引數JVM架構
- Linux 虛擬記憶體引數配置Linux記憶體
- mysql記憶體引數分類大全MySql記憶體
- 【Java基礎】函式引數為物件時的記憶體管理Java函式物件記憶體
- swoole優化核心引數調整優化
- 記憶體管理篇——實體記憶體的管理記憶體
- Java應用程式中的記憶體洩漏及記憶體管理Java記憶體
- docker下的spark叢集,調整引數榨乾硬體DockerSpark
- jvm的記憶體引數配置(skycto JEEditor)JVM記憶體
- 【記憶體管理】記憶體佈局記憶體
- Presto記憶體調優及原理(基礎篇)REST記憶體
- Java 8 記憶體管理原理解析及記憶體故障排查實踐Java記憶體
- (三) MdbCluster分散式記憶體資料庫——節點狀態變化及分片調整分散式記憶體資料庫
- PostgreSQL安裝完成後,引數調整SQL
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- 【CDB】怎樣修改PDB的記憶體引數記憶體
- SAP專家培訓之NetweaverABAP記憶體管理和記憶體調優最佳實踐記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- Oracle11g 自動化建庫及調整相關引數Oracle
- iOS記憶體管理佈局及管理方案-理論篇iOS記憶體
- 達夢資料庫引數調整方法資料庫
- JVM 引數調整對 sortx 的影響JVM
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- SAP專家培訓之Netweaver ABAP記憶體管理和記憶體調優最佳實踐記憶體