/dev/shm目錄下產生大量的ora_$ORACLE_SID_的二進位制檔案 解決方案

urgel_babay發表於2016-02-29

2014.11.18
   下午在檢查一個新上線的生產庫的時候,發現了一個問題:
/dev/shm目錄下產生大量的ora_$ORACLE_SID_的二進位制檔案 解決方案
為什麼/u01 使用了41G,明明這個目錄下面只有oracle的安裝軟體和system.sysaux表空間,大小加起來也就幾個G,而且使用du -sh /u01 顯示確實只有8.3G。

同時 這裡顯示/dev/shm使用了30G,我就納悶呢!找原因。
 去到/dev下面 再du -sh 一下,顯示shm 有三十多個G,同時
去到看到大量的ora_ORACLE_SID_開頭的檔案,檔案大小加起來剛開30G左右。
   第一次看到,一頭霧水,還以為是資料庫裡面的那個引數位置指定錯了
於是檢視歸檔路徑,查一些可以檢視的引數路徑,結果一無所獲。
為什麼這下資料庫產生的檔案會跑到/dev/shm 下面呢。
網上找到了一篇相關了部落格,擷取一點解釋:
1)什麼是/dev/shm
 
它就是所謂的tmpfs,從名字可以看出是一個臨時的檔案系統,有人說跟ramdisk(虛擬磁碟),但不一樣。使用/dev/shm的好處就是讀取資料相當快,因為典型的 tmpfs 檔案系統會
完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。同時,要注意的是,在/dev/shm中的檔案在系統重啟後會被清除掉。
tmpfs預設大小一般為實體記憶體的一半,當然可以修改tmpfs的大小。一般在fstab上可以看到
tmpfs /dev/shm tmpfs defaults 0 0
 
如果要將tmpfs的大小修改為4G,可以對上面的做適當的修改即可,如:
tmpfs /dev/shm tmpfs defaults,size=4096M 0 0
(2)/dev/shm對oracle 11g的影響
 
ORACLE 從11g版本開始,引入了一個自動記憶體管理(Automatic Memory Management)特性,該特性需要更多的共享記憶體(/dev/shm),因此如果決定應用該特性的話,
必須要確保共享記憶體大於ORACLE 中初始化引數MEMORY_MAX_TARGET 和MEMORY_TARGET(特別提示,這兩個引數即自動記憶體管理特性對應的初始化引數)的值。
Oracle在metalink的文件:Doc ID:Note:460506.1中進行了說明。解決這個問題只有兩個方法,一種是修改初始化引數,使得初始化引數中SGA的設定小於/dev/shm的大小,
另一種方法就是調整/dev/shm的大小。


現在我的問題是磁碟不允許增大shm,當然以前也做過增大shm的滿足oracle的記憶體的需求。
既然這兩種方法都不行,我想到的是關閉自動記憶體管理,會不會解決這個問題
果然我現在先在自己的本子上的11.2.0.1 中實驗得到了理想的結果
下面是貼出剛剛正式環境的變化情況

關閉前: 磁碟的使用情況:
[oracle@xxxx~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              50G   20G   28G  42% /
tmpfs                  64G   30G   34G  48% /dev/shm
/dev/sda1             291M   36M  240M  14% /boot
/dev/sda4              30G  173M   28G   1% /tmp
/dev/sda5              47G   41G  3.9G  92% /u01

這是關閉後的:
[oracle@xxxx ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              50G   20G   28G  42% /
tmpfs                  64G  424K   64G   1% /dev/shm
/dev/sda1             291M   36M  240M  14% /boot
/dev/sda4              30G  173M   28G   1% /tmp
/dev/sda5              47G  8.5G   36G  20% /u01
效果很明顯

讓後去到/dev/shm 下面發現所有的ora_ORACLE_SID_開頭的檔案都沒有了。
[oracle@xxxx shm]$ ll
total 424
-r--------. 1 oracle dba 67108904 Oct 13 14:51 pulse-shm-1960468867
-r--------. 1 gdm    gdm 67108904 Oct 13 14:50 pulse-shm-2383950921
-r--------. 1 oracle dba 67108904 Oct 13 14:50 pulse-shm-3779625268
-r--------. 1 oracle dba 67108904 Oct 13 15:01 pulse-shm-410992017
-r--------. 1 oracle dba 67108904 Oct 13 14:50 pulse-shm-465023947
[oracle@xxxx shm]$

這裡說說我的看法
      
一般情況下,資料庫剛建立的時候,建議是自動管理,等執行一段時間,或者進入正常的時候,根據個人經驗和awr.addm等的參考值,來調整資料庫的相關引數,並把資料庫記憶體管理為手動。
       因為開啟自動記憶體管理,也是有一些不可預測的風險,好比如,既然想讓它為你多做事情,就得承擔多一點的風險!
當然這個看自己權衡利弊。

 

 

 

 

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30936525/viewspace-2016692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章