各平臺影響oracle Process數的引數(轉)
名字 | 描述n | 合理取值 |
---|---|---|
SHMMAX | 最大共享記憶體段尺寸(位元組) | 512 kB + 8192 * 緩衝區數 + 額外 ... 無窮大 |
SHMMIN | 最小共享記憶體段尺寸(位元組) | 1 (最多大約是 256 kB) |
SHMSEG | 每程式最大共享記憶體段數量 | 只需要 1 個段,不過預設比這高得多. |
SHMMNI | 系統範圍最大共享記憶體段數量 | 類似 SHMSEG + 用於應用的空間 |
SEMMNI | 訊號燈識別符號的最小數量(也就是說,套) | >= ceil(max_connections % 16) |
SEMMNS | 系統範圍的最大訊號燈數量 | ceil(max_connections / 16) * 17 + 用於其他應用的空間 |
SEMMSL | 每套訊號燈最小訊號燈數量 | >= 17 |
SEMMAP | 訊號燈對映裡的記錄數量 | 參閱文字 |
SEMVMX | 訊號燈的最大值 | >= 255 (預設通常是32767,除非被要求,否則不要修改 |
最重要的共享記憶體引數是 SHMMAX, 以位元組記的共享記憶體段可擁有的最大尺寸. 如果你收到來自shmget的一行Invalid argument 這樣的錯誤資訊,那麼很有可能是你超過限制了. 要求的共享記憶體段隨著請求的緩衝區數量(-B選項)和 允許的連線數量(-N選項)的變化而變化,儘管前者是 主要因素. (因此,作為一種臨時的解決方法,你可以降低這些設定來繞過失敗.) 如果粗略地估計,你可以估計所需要的段尺寸是緩衝區數量乘以塊 尺寸(預設 8192KB)加上足夠的盈餘(至少半兆位元組). 任何錯誤資訊都會包含分配失敗的尺寸.
不太可能出問題的是共享記憶體段的最小尺寸(SHMMIN), 對 Postgres來說最多是 256 kB左右(通常只是 1),而 系統範圍(SHMMNI)或每程式(SHMSEG) 最大共享記憶體段數量不應該會產生問題,除非你的系統把它們設成零. 有些系統還對系統裡的共享記憶體總量有限制;參閱下面平臺相關的指導.
Postgres 每個允許的聯接使用一個訊號燈 (-N選項), 以 16 個為一套.每套訊號燈還包含第十七個訊號燈, 它裡面一個“magic number(標誌數字)”, 以避免和其他應用使用的訊號燈集衝突. 系統裡的最大訊號燈數目是由SEMMNS設定的, 因此這個值應該至少和聯接設定一樣大,並且每十六個聯接還要另外加一個. (參閱 裡面的公式.) 引數SEMMNI決定 系統裡一次可以存在的訊號燈集的數目.因此這個引數至少應該為 ceil(max_connections % 16).降低允許的聯接數目是一個臨時的 繞開失敗的方法,這個啟動失敗通常被來自函式semget() 的錯誤響應 “No space left on device”搞得很讓人迷惑.
有時候你還會發現有必要增大SEMMAP,使之至少按照 SEMMNS配置.這個引數定義訊號燈資源對映的尺寸, 可用的每個連續的訊號燈塊在這個對映中存放一條記錄. 每當一套訊號燈被釋放,那麼它要麼會加入到該對映中一條相連的 已釋放的塊的入口中,要麼註冊成一條新的入口.如果對映填滿了碎片, 那麼被釋放的訊號燈就丟失了(除非重起).因此時間長訊號燈空間的碎片 了會導致可用的訊號燈比應該有的訊號燈少.
SEMMSL 引數,決定一套訊號燈裡可以有多少訊號燈,對於 Postgres而言應該至少是 17.
許多設定與 “semaphore undo(訊號燈恢復)”有關,比如 SEMMNU 和 SEMUME,這些與 Postgres無關.
- BSD/OS
共享記憶體. 預設時是隻支援 4MB 的共享記憶體.請記住共享記憶體是不能分頁的;它是 鎖在 RAM 裡面的.共享記憶體引數是:
#define SHMMAX /* max shared memory segment size (bytes) */ #define SHMMIN /* min shared memory segment size (bytes) */ #define SHMMNI /* max number of shared memory identifiers */ #define SHMSEG /* max shared memory segments per process */ #define SHMALL /* max amount of shared memory (pages) */
要增加 postmaster 使用的緩衝區數量,向你的核心配置檔案裡增加下面 幾行.SHMALL 值為 1024 的時候代表 4MB 共享記憶體. 相應增加該值:options "SHMALL=4096" options "SHMMAX=(SHMALL*PAGE_SIZE)"
對於執行 4.1 或更新的版本的人,只需要編譯核心並重起.對於執行 更早的版本的,請用 bpatch 找出當前核心的 sysptsize值.它是啟動的時候自動計算的.
$ bpatch -r sysptsize 0x9 = 9
另外,把 SYSPTSIZE修改為一個硬程式碼值.用 bpatch 算出來的值,並且為你需要的每個額外的 4 MB 共享記憶體加 1.options "SYSPTSIZE=13"
sysptsize不能用 sysctl 在執行時修改.訊號燈. 你可能需要增加訊號燈的數量.預設時,Postgres 分配 34 個訊號燈.這個數量只是剛剛超過預設的系統總數 60 的一半.
預設值在/sys/sys/sem.h:
#define SEMMNI 10 /* # of semaphore identifiers */ #define SEMMNS 60 /* # of semaphores in system */ #define SEMUME 10 /* max # of undo entries per process */ #define SEMMNU 30 /* # of undo structures in system */
在核心配置檔案裡設定你需要的值,比如:options "SEMMNI=40" options "SEMMNS=240" options "SEMUME=40" options "SEMMNU=120"
- , OpenBSD
編譯核心時 需要把選項SYSVSHM 和 SYSVSEM開啟. (預設是開啟的.) 共享記憶體的最大尺寸是由選項SHMMAXPGS(以頁計). 下面顯示了一個如何設定這些引數的例子:
options SYSVSHM options SHMMAXPGS=4096 options SHMSEG=256 options SYSVSEM options SEMMNI=256 options SEMMNS=512 options SEMMNU=256 options SEMMAP=256
- HP-UX
預設設定看來對普通安裝是足夠的了. 在 HP-UX 10,SEMMNS的出廠預設是 128, 可能對大的資料庫節點來說太小了.
IPC 可以在 System Administration Manager(系統管理器) (SAM)下面的 Kernel ConfigurationConfigurable Parameters 配置. 你配置完了以後敲 Create A New Kernel選項.
在 2.2 核心裡預設的共享記憶體限制( SHMMAX 和 SHMALL)都是 32 MB,但是你可以在 proc 檔案系統裡修改這些值(不用重起). 比如,要允許 128 MB:
$ echo 134217728 >/proc/sys/kernel/shmall $ echo 134217728 >/proc/sys/kernel/shmmax
你可以把這些命令放到一個引導時執行的指令碼中.另外,如果你的系統裡有的話,你可以使用 sysctl(8) 來控制這些引數. 查詢一個叫 /etc/sysctl.conf 的檔案,然後再它裡面加下面 這樣的幾行:
kernel.shmall = 134217728 kernel.shmmax = 134217728
通常在引導的時候會處理這個檔案, 但你也可以稍後明確呼叫 sysctl.其他引數對任何應用來說都足夠了. 如果你想自己檢視,你可以看看下面幾個檔案: /usr/src/linux/include/asm-xxx/shmparam.h 和 /usr/src/linux/include/linux/sem.h.
- SCO OpenServer
預設配置時,只允許每段 512KB 共享記憶體,大概只夠 -B 24 -N 12用的.要增大設定,首先進入 /etc/conf/cf.d目錄.要顯示當前的以位元組記的 SHMMAX,執行
./configure -y SHMMAX
設定 SHMMAX的新值:./configure SHMMAX=value
這裡 value 是你想設定的以位元組記的新值. 設定完了以後SHMMAX重新制作核心./link_unix
然後重起.至少到版本 2.6 為止,共享記憶體段的引數設定對Postgres 來說是太低了.相關的設定可以在/etc/system裡面修改, 例如:
set shmsys:shminfo_shmmax=0x2000000 set shmsys:shminfo_shmmin=1 set shmsys:shminfo_shmmni=256 set shmsys:shminfo_shmseg=256 set semsys:seminfo_semmap=256 set semsys:seminfo_semmni=512 set semsys:seminfo_semmns=512 set semsys:seminfo_semmsl=32
你要重起系統令修改生效.又見 獲取關於 Solaris 裡面的共享記憶體的資訊.
- UnixWare
在 UnixWare 7 上,預設配置裡的最大共享記憶體段是 512 kB. 這個數只夠-B 24 -N 12用的.要顯示SHMMAX的 當前值,執行
/etc/conf/bin/idtune -g SHMMAX
就會顯示以位元組記的當前的預設的最小和最大值. 要給SHMMAX設定一個新值,執行:/etc/conf/bin/idtune SHMMAX value
這裡 value是你想設定的以位元組記的新值. 設定完SHMMAX後,重建核心/etc/conf/bin/idbuild -B
然後重起.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/85922/viewspace-899164/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Oracle】簡單引數也有講究,JOB_QUEUE_PROCESS引數調研Oracle
- 數字化轉型的影響是什麼?數字化轉型對企業的影響?
- JVM 引數調整對 sortx 的影響JVM
- Java教程:影響MySQL效能的配置引數JavaMySql
- JPEG的量化引數QP如何影響壓縮質量
- Kafka之acks引數對訊息持久化的影響Kafka持久化
- Oracle安裝相關Linux引數(轉)OracleLinux
- MySQL:Innodb:innodb_flush_log_at_trx_commit引數影響的位置MySqlMIT
- Oracle 核心引數Oracle
- MySQL:簡單記錄character_set_server影響引數MySqlServer
- MySQL:slave_skip_errors引數對MGR可用性的影響MySqlError
- 瞭解 ignore_above 引數對 Elasticsearch 中磁碟使用的影響Elasticsearch
- 數字經濟對於製造業數字化轉型影響的思考
- Oracle:PDB 引數管理Oracle
- ORACLE並行相關的引數Oracle並行
- 【CURSOR】Oracle繫結變數、執行計劃對遊標的影響Oracle變數
- python json格式轉url引數&分割, url引數轉json格式PythonJSON
- 海量IT資料 + 各種平臺下的Oracle安裝檔案 + 公開課錄影 + 各種視訊教程資料Oracle
- 抵制數豆子:除提交次數外的開源影響力
- C技巧:結構體引數轉成不定引數結構體
- Oracle中的sysctl.conf核心引數Oracle
- Oracle初始化引數的來源Oracle
- Oracle GoldenGate常用引數詳解OracleGo
- oracle rac 核心引數詳解Oracle
- Oracle Table建立引數說明Oracle
- Oracle JDBC ResultSet引數測試OracleJDBC
- 使用 XmlCommand 對Oracle傳引數XMLOracle
- Oracle RAC引數檔案管理Oracle
- caffe網路各層引數詳解
- Android LayoutInflater.inflate各個引數作Android
- Java 獲取系統各項引數Java
- 智慧數字化轉型對於餐飲業有哪些影響?
- 騰訊雲 CODING 入選“數智影響力”數字化轉型創新典型案例
- Spring Boot 引數轉換Spring Boot
- linux系統影響tcp連線數的因素LinuxTCP
- 分享個高通平臺NV引數恢復工具-QSerWriteNumber
- oracle中的processes,session,transaction引數詳解OracleSession
- oracle O7_DICTIONARY_ACCESSIBILITY 引數Oracle
- [20190917]oracle引數deferred屬性.txtOracle