預備知識
shared memory:共用記憶體段:
一個記憶體地區,可以被不同的進程讀取。oracle使用它來構成sga。oracle使用以下三種方法來建立一個sga區:
1. 使用單個共用記憶體段。
2. 使用連續多個共用記憶體段。
3. 使用多個不連續共用記憶體段。
oracle優先使用的一種方法,如果成功,則繼續初始化,不成功則使用第二種方法,再不成功則使用第三種方法。如果再不成功,則初始化失敗,oracle報告錯誤碼。
semaphore:
可以看作一個標記。可以有on和off兩種狀態。oracle使用semaphores來實現伺服器處理序對sga區的存取控制。
shared memory 和semaphore 是oracle在unix上啟動並執行重要資源。如果oracle 執行個體得不到所需要的資源,執行個體啟動就會失敗。
PGA+SGA=ORACLE佔用的記憶體。
PGA: 每個oracle使用者佔用的記憶體,一般設為記憶體的10%,官方建議:
Oracle recommends initially setting this parameter to 16% of your server’s physical memory for OLTP systems and 40% of your server’s physical memory for DSS systems
PGA需要登陸oracle的用戶端,在常式裡修改,或者
對於ora9i,在32位平台上 9i的sga預設最多隻能擴充到1.7G,如果想突破這個限制,需要重新link Oracle軟體。以下為sga為900M的例子:
alter system set db_cache_size = 700m scope = spfile;
alter system set shared_pool_size = 200m scope=spfile;
alter system set pga_aggregate_target = 100m scope=spfile;
對於oracle10G,sga預設最多隻能擴充到2.5G,如果想突破這個限制,需要重新link Oracle軟體。有4G記憶體的情況下,可以這樣分配:
10g 不用 設定 db_cache_size 和 shared_pool_size ,它是自動管理的,你只要 給他個最大記憶體就行
alter system set sga_target = 2g scope=spfile;
alter system set pga_aggregate_target = 500m scope=spfile ;
察看oracle串連數
select count(*) from sys.v_$session ;
查看oracle最大串連數
SQL〉show parameter processes ,看最後一行。
修改 SQL〉alter system set processes=1000 scope=spfile;
scope=spfile 用於重起生效
伺服器實體記憶體×(0.16 至 0.40) = 要分配給所有PGA的記憶體總量
初始SGA大小:
伺服器實體記憶體×0.55 = 要分配給所有SGA的記憶體總量(TSGA)
注意:TSGA要小於已指派給oracle的共用記憶體段大小 共用記憶體段echo "2147483648" > /proc/sys/kernel/shmmax
TSGA/伺服器上Oracle執行個體個數=每個執行個體的總SGA大小(TSGAI)
TSGAI×0.4=已指派給SHARED POOL的總記憶體
TSGAI×0.6=已指派給 DATABASE BUFFER CACHE的總記憶體
####TSGAI×0.10=已指派給 REDO LOG BUFFER 的總記憶體
以上原則在記憶體小於1GB的伺服器上非常適用。
在記憶體大於1GB的伺服器上 :
要分配給所有SGA的記憶體總量(TSGA)=伺服器實體記憶體×(0.60至0.75)
共用記憶體通過將通用的結構和資料放在共用記憶體段中,使得進程可以對它們進行訪問。這是現有最快的處理序間通訊(IPC)方式 主要是因為資料在進程之間傳遞時沒有涉及到核心的操作。在進程之間不需要複製資料。
Oracle 將共用記憶體用於它的系統全域區 (SGA),這是一個由所有的 Oracle 備份進程及前台進程所共用的記憶體地區。為 SGA 分配足夠的容量對於 Oracle 的效能非常重要,因為它負責儲存資料庫緩衝區快取、共用 SQL、訪問路徑以及更多。
shmmax
共用記憶體段的最大大小(以位元組為單位)
含義:這個設定並不決定究竟oracle資料庫或者作業系統使用多少實體記憶體,只決定了最多可以使用的記憶體數目。這個設定也不影響作業系統的核心資源。
設定方法:0.5*實體記憶體
通過直接更改 /proc 檔案系統,你無需重新啟動電腦便可以改變 SHMMAX 的預設設定。可以使用以下方法動態設定 SHMMAX 的值。通過將此命令置於 /etc/rc.local 開機檔案中可以使它永久有效:
echo "2147483648" > /proc/sys/kernel/shmmax
shmmni
這個核心參數用於設定系統範圍內共用記憶體段的最大數量。該參數的預設值是 4096。該值足以滿足需要,因此通常無需更改。
可以通過執行以下命令來確定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmni
4096
shmall
該參數控制系統一次可以使用的共用記憶體總量(以頁為單位)
shmall 的預設大小為 2097152,並可以使用以下命令進行查詢:
# cat /proc/sys/kernel/shmall
2097152
shmall 的預設設定足以滿足 Oracle RAC 10g 安裝的需要。
(注意:i386 平台上的 Red Hat Linux 中的頁面大小為 4,096 位元組。但您可以使用 bigpages,它支援配置更大的記憶體頁面大小。)
設定訊號
對訊號的最佳描述是,它是用於在共用資源(如共用記憶體)的進程(或進程中的線程)之間提供同步的計數器。Unix System V 支援訊號集,其中的每個訊號都是一個訊號計數。當應用程式請求訊號時,它使用“集合”來完成此工作。
要確定所有訊號限制,可使用以下命令:
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
您還可以使用以下命令:
# cat /proc/sys/kernel/sem
250 32000 32 128
semmsl
核心參數用於控制每個訊號集合的最大訊號數。
系統所佔用訊號量可用下列命令查出:#ipcs –sb ,其中列NSEMS顯示系統已佔用訊號量
Oracle 建議將 SEMMSL 設定為 init.ora 檔案(適用於 Linux 系統上所有資料庫)中的最大 PROCESS 執行個體參數設定再加上 10。此外,Oracle 建議將 SEMMSL 設定為不小於 100。
例子:set semsys:seminfo_semmsl=-200
semmni
核心參數用於控制整個 Linux 系統中訊號集的最大數量。
Oracle 建議將 SEMMNI 設定為不小於 100。
semmns
核心參數用於控制整個 Linux 系統中的訊號(而非訊號集)的最大數量
每個process會佔用一個訊號量,Oracle 建議將 SEMMNS 設定為系統上每個資料庫的 PROCESSES 執行個體參數設定之和,加上最大的 PROCESSES 的兩倍,最後為系統上的每個 Oracle 資料庫加上 10。
設定方法:這個值可以通過以下方式計算得到:各個oracle執行個體的initsid.ora裡邊的processes的值的總和(除去最大的processes參數)+最大的那個processes×2+10×oracle執行個體的個數。
shmseg
含義:每個使用者進程可以使用的最多的共用記憶體段的數目。
例子:set shmsys:shminfo_shmseg=20:
如何增加ORACLE串連數
ORACLE的串連數(sessions)與其參數檔案中的進程數(process)有關,它們的關係如下:
sessions=(1.1*process+5)
但是我們增加process數時,往往資料庫不能啟動了。這因為我們還漏調了一個unix系統參數:它是/etc/system/ 中semmns,這是unix系統的訊號量參數。每個process會佔用一個訊號量。semmns調整後,需要重新啟動unix作業系統,參數才會生效。不過它的大小會受制於硬體的記憶體或ORACLE SGA。範圍可從200——2000不等。
semmns的計算公式為:SEMMNS>processes+instance_processes+system
processes=資料庫參數processes的值 instance_processes=5(smon,pmon,dbwr,lgwr,arch)
system=系統所佔用訊號量。系統所佔用訊號量可用下列命令查出:#ipcs -sb
其中列NSEMS顯示系統已佔用訊號量。
有關oracle的基本參數的調整:
/oracle/admin/ora9i/pfile/initora9i.ora.10202007144030為安裝時建立,一幫用於還原時使用,oracle正常啟動時使用的是
product/9.2/dbs/spfileora9i.ora這個2進位檔案,不能修改,當對oracle進行調整時,修改被記錄到這個檔案中,當修改導致oracle不能正常啟動時,可以使用pfile檔案進行恢複啟動
startup pfile='/oracle/admin/ora9i/pfile/initora9i.ora.10202007144030' (正常啟動為 startup)
但是oracle的參數將變為初始安裝的狀態。
可以使用以下的命令產生pfile檔案:
create spfile from pfile='/oracle/admin/ora9i/pfile/initora9i.ora.10202007144030'
調整的參數