Oracle
將 ASM 文件映射到物理 Linux 設備
我們遇到了定期等待日誌文件同步的問題。我們有一個使用 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