ASMLIB是一種基於Linux module,專門為Oracle Automatic Storage Management特性設計的核心支援庫(kernel support library)。 長久以來我們對ASMLIB的認識並不全面,這裡我們來具體瞭解一下使用ASMLIB的優缺點。 理論上我們可以從ASMLIB API中得到的以下益處:
  1. 總是使用direct,async IO
  2. 解決了永久性裝置名的問題,即便在重啟後裝置名已經改變的情況下
  3. 解決了檔案許可權、擁有者的問題
  4. 減少了I/O期間從使用者模式到核心模式的上下文切換,從而可能降低cpu使用率
  5. 減少了檔案控制程式碼的使用量
  6. ASMLIB API提供了傳遞如I/O優先順序等元資訊到儲存裝置的可能

雖然從理論上我們可以從ASMLIB中得到效能收益,但實踐過程中這種優勢是幾乎可以忽略的,沒有任何效能報告顯示ASMLIB對比Linux上原生態的udev裝置管理服務有任何效能上的優勢。在Oracle官方論壇上有一篇<ASMLib and Linux block devices>討論ASMLIB效能收益的帖子,你可以從中看到”asmlib wouldn`t necessarily give you much of an io performance benefit, it`s mainly for ease of management as it will find/discover the right devices for you, the io effect of asmlib is large the same as doing async io to raw devices.”的評論,實際上使用ASMLIB和直接使用裸裝置(raw device)在效能上沒有什麼差別。 ASMLIB可能帶來的缺點:

  1. 對於多路徑裝置(multipathing)需要在/etc/sysconfig/oracleasm-_dev_oracleasm配置檔案中設定ORACLEASM_SCANORDER及ORACLEASM_SCANEXCLUDE,以便ASMLIB能找到正確的裝置檔案,具體可以參考Metalink Note<How To Setup ASM & ASMLIB On Native Linux Multipath Mapper disks? [ID 602952.1]>
  2. 因為ASM INSTANCE使用ASMLIB提供的asm disk,所以增加了額外的層面
  3. 每次Linux Kernel更新,都需要替換新的ASMLIB包
  4. 增加了因人為錯誤造成當機downtime的可能
  5. 使用ASMLIB意味著要花費更多時間去建立和維護
  6. 因為ASMLIB的存在,可能引入更多的bug,這是我們最不想看到的
  7. 使用ASMLIB建立的disk,其disk header並不會和普通的asm disk header有什麼不同,僅僅是在頭部多出了ASMLIB的屬性空間。

結論: 我個人的觀點是儘可能不要使用ASMLIB,當然這不是DBA個人所能決定的事情。另一方面這取決於個人習慣,在rhel 4的早期發行版本中沒有提供udev這樣的裝置管理服務,這導致在rhel 4中大量的ASM+RAC組合的系統使用ASMLIB , 經網友指出udev 作為kernel 2.6的新特性被引入,在rhel4的初始版本中就已經加入了udev繫結服務,但是在rhel4時代實際udev的使用並不廣泛(In Linux 2.6, a new feature was introduced to simplify device management and hot plug capabilities. This feature is called udev and is a standard package in RHEL4 or Oracle Enterprise Linux 4 (OEL4) as well as Novell’s SLES9 and SLES10.)。如果是在RHEL/OEL 5中那麼你已經有充分的理由利用udev而放棄ASMLIB。 Reference: ASMLIB Performance vs Udev RAC+ASM 3 years in production Stories to share How To Setup ASM & ASMLIB On Native Linux Multipath Mapper disks? [ID 602952.1] ASMLib and Linux block devices