預備知識 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' 調整的參數 |