概要
This blog post explores the impact of disabling Oracle ASM Filter Driver filtering on space reclamation on a FlashArray system.
本文內容是關於 Oracle ASM 篩選驅動程式篩選,原先出現在 Ron Ekins 的部落格上。經作者的認可與同意,重新發表。
我是 Oracle ASM Filter Driver (AFD) 的長期粉絲。AFD 過濾是它的主要優勢之一。
AFD 可確保寫入作業僅由受信任和註冊的 Oracle 流程執行,從而阻止可能造成資料損毀的潛在損壞寫入作業。
遺憾的是,最近的 Linux 核心變更已經影響了 AFD,而 Oracle 的最新建議是停用 AFD 篩選,直到修復可用為止。
在 Oracle 資料庫 19.24 中,預設會停用篩選功能,但對於較早版本,Oracle 提供修補程式 35618858:預設停用 5.15 以上核心的篩選功能。
可用的 Oracle 版本更新 (RU) 修補程式
- Oracle Clusterware 19 版 (19.23.0.0.240416ACFSRU)
- Oracle Clusterware 19 版 (19.24.0.0.0ACFSRU)
- Oracle Clusterware 19 版 (19.25.0.0.0ACFSRU)
在這篇部落格文章中,我會探討停用 AFD 過濾功能對全快閃儲存陣列空間回收的影響。
核心版本
我最近使用 kernel 5.15 將 Oracle RAC 伺服器升級到 Oracle Linux 8.10。您可以使用 uname -r 來檢查核心版本:
1 |
[oracle@z–rac1 ~]$ cat /etc/oracle–release |
1 |
Oracle Linux Server release 8.10 |
1 |
[oracle@z–rac1 ~]$ <strong>uname –r</strong> |
1 |
5.15.0–208.159.3.el8uek.x86_64 |
Oracle ASMFD 狀態
我們可以使用 asmcmd afd_state 命令取得 ASM 篩選驅動程式狀態,例如:
1 |
[oracle@z–rac1 ~]$ asmcmd afd_state |
1 |
ASMCMD–9526: The AFD state is ‘LOADED’ and filtering is ‘ENABLED’ on host ‘z-rac1.uklab.purestorage.com’ |
在 RAC 叢集中,使用 asmcmd afd_state – 所有選項來查看所有節點的狀態。所有節點應具有相同的篩選狀態。
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state —all</strong> |
1 |
node ‘z-rac1’: State of AFD: LOADED and ASMFD Filtering Status: ENABLED |
1 |
node ‘z-rac2’: State of AFD: LOADED and ASMFD Filtering Status: DISABLED |
停用 ASMFD 篩選
使用 asmcmd afd_filter -d 命令停用篩選:
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_filter –d</strong> |
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state</strong> |
1 |
ASMCMD–9526: The AFD state is ‘LOADED’ and filtering is ‘DISABLED’ on host ‘z-rac1.uklab.purestorage.com’ |
啟用 ASMFD 篩選
如果需要,您可以使用 asmcmd -e afd_filter 指令重新啟用篩選,例如:
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_filter –e</strong> |
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state</strong> |
1 |
ASMCMD–9526: The AFD state is ‘LOADED’ and filtering is ‘ENABLED’ on host ‘z-rac1.uklab.purestorage.com’ |
存放空間回收
現在,這引發了一個大問題:如果我停用 ASM 過濾驅動程式,我是否無法將 SCSI UNMAP 指令發送回全快閃儲存陣列,以釋放未使用的空間?
好的,我有一個雙節點 RAC 叢集,並禁用 ASMFD 篩選功能。
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd afd_state —all</strong> |
1 |
node ‘z-rac1’: State of AFD: LOADED and ASMFD Filtering Status: DISABLED |
1 |
node ‘z-rac2’: State of AFD: LOADED and ASMFD Filtering Status: DISABLED |
建立 Oracle 表格空間
為證明這一點,讓我們建立一個 4TB 的表格空間,並等待 Oracle 初始化資料檔案。
我們來確認一下,沒有空間使用我的v$asm_disk查詢:
1 |
ASMFD Disks |
1 |
Disk Disk Disk Total Used Free |
1 |
Nbr Name Label Header Mount State Path GB GB GB |
1 |
—— ————— ————— ———– ———– ———– ————— ———— ———— ———— |
1 |
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 0 12,288 |
1 |
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 0 12,288 |
1 |
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 0 12,288 |
1 |
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 0 12,288 |
並建立 4TB 大檔案的表格空間。
1 |
SQL> <strong>create BIGFILE tablespace test datafile ‘+AFDATA’ size 4T;</strong> |
1 |
Tablespace created. |
使用這個v$asm_disk查詢,我可以看到我的四個 ASMFD 磁碟區已如預期使用總計 4TB。
1 |
ASMFD Disks |
1 |
Disk Disk Disk Total Used Free |
1 |
Nbr Name Label Header Mount State Path GB GB GB |
1 |
—— ————— ————— ———– ———– ———– ————— ———— ———— ———— |
1 |
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 1,024 11,264 |
1 |
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 1,024 11,264 |
1 |
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 1,024 11,264 |
1 |
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 1,024 11,264 |
使用 asm 命令列公用程式 asmcmd 和清單屬性選項,我看到我的 AFDATA 磁碟群組上已啟用了儲存資源隨需配置:
1 |
[oracle@z–rac1 ~]$ <strong>asmcmd lsattr –G AFDATA –l | grep thin</strong> |
1 |
thin_provisioned TRUE |
使用 FlashArray CLI 並執行 purevol 清單
purevol 清單 z-racpod::afd_data* –空間 –總計
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total |
1 |
z–racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G |
放置桌面空間
現在,讓我們使用 DROP TABLESPACE 來捨棄 Oracle 的表格空間,包括內容和資料檔案,並看看對儲存平台和 Oracle 資料庫的影響。 tablespace_name
1 |
SQL> <strong>DROP TABLESPACE test INCLUDING CONTENTS AND DATAFILES;</strong> |
1 |
Tablespace dropped. |
如果我們重新執行v$asm_view查詢,Oracle 現在將報告 4TB 測試表格空間已發佈。
1 |
ASMFD Disks |
1 |
Disk Disk Disk Total Used Free |
1 |
Nbr Name Label Header Mount State Path GB GB GB |
1 |
—— ————— ————— ———– ———– ———– ————— ———— ———— ———— |
1 |
0 DATA08 DATA08 MEMBER CACHED NORMAL AFD:DATA08 12,288 0 12,288 |
1 |
1 DATA07 DATA07 MEMBER CACHED NORMAL AFD:DATA07 12,288 0 12,288 |
1 |
2 DATA05 DATA05 MEMBER CACHED NORMAL AFD:DATA05 12,288 0 12,288 |
1 |
3 DATA06 DATA06 MEMBER CACHED NORMAL AFD:DATA06 12,288 0 12,288 |
回到 Pure Storage® FlashArray 後,我們發現即使刪除 Oracle 的表格空間,我們仍然在消耗空間。
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total |
1 |
z–racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G |
Oracle ASMFD 重新平衡精巧相位
使用 Oracle ASM 篩選驅動程式時,我們可以手動觸發 SCSI UNMAP 命令,使用 ALTER DISKGROUP
我包含了可選的等待選項,僅在完成後才返回。
1 |
SQL> <strong>ALTER DISKGROUP AFDATA REBALANCE WITH BALANCE COMPACT WAIT;</strong> |
1 |
Diskgroup altered. |
如果現在我們回到 FlashArray CLI 並重複 purevol 清單
我們可以看到,即使 AFD 篩選已停用,ASMFD 仍然能夠將 SCSI UNMAP 請求發送到儲存陣列,以釋放空間。
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
z–racpod::afd_data05 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data06 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data07 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
z–racpod::afd_data08 12T 1.00T 92% >100 to 1 >100 to 1 4.95G 0.00 4.95G |
1 |
(total) 48T 4.00T 92% >100 to 1 >100 to 1 19.79G 0.00 19.79G |
1 |
pureuser@z–x90–a> <strong>purevol list z–racpod::afd_data* —space —total</strong> |
1 |
Name Size Virtual Thin Provisioning Data Reduction Total Reduction Unique Snapshots Total |
1 |
z–racpod::afd_data05 12T 92.00M 100% 6.9 to 1 >100 to 1 9.29M 0.00 9.29M |
1 |
z–racpod::afd_data06 12T 92.00M 100% 6.6 to 1 >100 to 1 10.47M 0.00 10.47M |
1 |
z–racpod::afd_data07 12T 92.00M 100% 6.7 to 1 >100 to 1 9.82M 0.00 9.82M |
1 |
z–racpod::afd_data08 12T 92.00M 100% 7.0 to 1 >100 to 1 8.63M 0.00 8.63M |
1 |
(total) 48T 368.00M 100% 6.8 to 1 >100 to 1 38.21M 0.00 38.21M |
概要
在這篇部落格文章中,我確認停用 ASMFD 篩選功能不會影響空間回收。
Oracle AFD 開發團隊正積極為上述和更新的核心開發新的過濾和保護機制。當新的過濾解決方案推出時,我會試試看並分享我的發現。
如果您想深入了解如何使用 ASM 篩選驅動程式來回收儲存空間,請查看此部落格文章。
Take a Free Test Drive
Explore FlashArray in our virtual lab.