Oracle

將 ASM 文件映射到物理 Linux 設備

  • July 26, 2016

我們遇到了定期等待日誌文件同步的問題。我們有一個使用 ASM 的 2 節點 RAC 集群。我想使用 iostat 監視包含重做日誌文件的物理設備,但我不確定哪個物理設備包含重做日誌組。我們有大約 150 個物理設備,所以我想盡可能縮小範圍。如何將包含重做日誌的 ASM 文件映射到物理 linux 設備?

首先,人們經常為此而墮落,但高log file sync等待並不一定意味著 I/O 問題。

其次,如果您的重做日誌所在的 ASM 磁碟組中有許多物理設備,這可能真的很麻煩,因為文件的範圍將均勻分佈在多個磁碟上。

無論如何,您需要為您的重做日誌找到 ASM 磁碟組號和文件號。例如我的重做日誌:

select member from v$logfile

MEMBER
--------------------------------------------------
+O6CA_DATA/BRIX/ONLINELOG/group_1.258.915373939
+O6CA_FRA/BRIX/ONLINELOG/group_1.257.915373939
+O6CA_DATA/BRIX/ONLINELOG/group_2.259.915373939
+O6CA_FRA/BRIX/ONLINELOG/group_2.258.915373939
+O6CA_DATA/BRIX/ONLINELOG/group_3.266.915374563
+O6CA_FRA/BRIX/ONLINELOG/group_3.259.915374563
+O6CA_DATA/BRIX/ONLINELOG/group_4.267.915374563
+O6CA_FRA/BRIX/ONLINELOG/group_4.260.915374563

由於我使用 OMF,我可以輕鬆辨識文件編號,因為它是名稱的一部分 (258, 257, …),但您可以這樣獲取:

select
 af.group_number,
 af.file_number
from
 v$asm_file af
 join v$asm_alias aa on (af.group_number = aa.group_number
                         and af.file_number = aa.file_number)
 join v$logfile lf on (substr(lf.member, instr(lf.member, '/', -1) + 1) = aa.name)
;

GROUP_NUMBER FILE_NUMBER
------------ -----------
          1         258
          2         257
          1         259
          2         258
          1         266
          2         259
          1         267
          2         260

現在我很好奇第一個重做日誌文件(組 1,文件 258)。在 ASM 實例(而不是數據庫實例)中,我可以查詢為:

select
 group_kffxp,
 disk_kffxp,
 size_kffxp,
 count(*)
from
 x$kffxp
where
 group_kffxp = 1
 and number_kffxp = 258
group by
 group_kffxp,
 disk_kffxp,
 size_kffxp
;

GROUP_KFFXP DISK_KFFXP SIZE_KFFXP   COUNT(*)
----------- ---------- ---------- ----------
         1          0          1         51

所以這個單一的redo log文件在diskgroup 1,disk number 0中有51個extent,每個extent有1個分配單元的大小(而我使用的分配單元是1 MB,我創建了一個大小為50 MB的redo log,但這在這裡不相關)。就我而言,那個單一的磁碟是:

select name, path from v$asm_disk where group_number = 1 and disk_number = 0

NAME            PATH
--------------- ------------------------------
O6CA_DATA_0000  /dev/oracleasm/asm-o6ca_data1

引用自:https://dba.stackexchange.com/questions/145001