各位新朋友~記得先點藍字關注我哦~
在DBA的日常運維工作中,對于空間的檢查是最基礎也是必要的一步。
當然,在各種監控工具的加持下這一步工作被簡化,比如美創的運維一體機,客戶爸爸再也不用擔心空間突然爆掉了。
今天我們着重講下ASM磁盤組的空間使用,按照磁盤組的備援模式,分兩種情況。
情況一:備援模式為external
在這種情況下可以很容易的計算出剩餘可用空間=Free_MB,如果下圖所示,磁盤組DATA的剩餘可用空間為22403MB。
情況二:備援模式為Normal或High
在這種情況下又是如何計算剩餘可用空間?
REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的值,這個問題的答案跟很多複雜問題的答案一樣:要看情況。
首先需要了解下這三個值的描述:
簡單來說,視圖V$ASM_DISKGROUP中:
FREE_MB:磁盤組中沒有被使用的空間。
REQUIRED_MIRROR_FREE_MB:如果ASM磁盤或ASM磁盤組出現故障後,要重新滿足備援度的定義,要求有多少的空閑空間。
USABLE_FILE_MB:在滿足備援度之後,還有多少的剩餘空間可以用。
講到這裡有些盆友可能還是暈乎乎的。
那麼,ASM是如何計算出這些值的?
接下來可以通過一些不同組合的磁盤組來解答這一問題。
01
Normal模式,2個Failgroup
先建立一個Normal備援模式的磁盤組DATANEW,然後添加4塊磁盤,每個Failgroup2塊,其中1塊1G,另一塊500M。
Disk01 | Disk02 | |
Failgroup01 | 1G | 500M |
Failgroup02 | 1G | 500M |
ASM在磁盤組内使用Failgroup來提供資料的鏡像和備援,資料存儲在一個Failgroup的同時,會在另外的Failgroup存儲相同的資料副本,以此來保障資料安全,在一個Normal備援的磁盤組中,會有兩份相同的資料,是以在一個Failgroup出現故障時并不會影響整個磁盤組的可用性,ASM還可以根據鏡像資料讓磁盤組重新達到Normal備援的要求,但是為了能做到這一點,需要磁盤有足夠的剩餘空間,是以Failgroup實際有多大就顯得非常的重要了。
檢視視圖V$ASM_DISKGROUP來獲得磁盤組的相關資訊:
以上輸出顯示:
TOTAL_MB=3048MB --正好是所有磁盤大小之和。
FREE_MB=2854MB --并不等于TOTAL_MB,說明盤頭中有資料。
REQUIRED_MIRROR_FREE_MB=1024M --大小等于最大的磁盤。
USABLE_FILE_MB=915MB
計算公式:USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / 磁盤備援度
從磁盤組可以得到的資訊是磁盤中沒有被使用的空間為2854MB,如果出現故障,要滿足備援度的定義,要有1024MB的空間,在滿足備援度之後,還有915MB的剩餘空間可以用。
那麼磁盤組DATANEW到底還剩餘多少空間呢?是要看FREE_MB,還是USABLE_FILE_MB?
接下來就來驗證這一問題:
1、 磁盤組DATANEW新增一個1000MB的資料檔案。
再次檢視視圖V$ASM_DISKGROUP資訊:
以上輸出顯示:
FREE_MB=836MB --約等于(2854-1000)/2
USABLE_FILE_MB=-94MB
根據計算公式USABLE_FILE_MB=(836 – 1024) / 2=-94,盡管添加資料檔案之前USABLE_FILE_MB為915MB,但還是成功添加了一個1000MB的檔案,而FREE_MB的剩餘空間減少約等于2個資料檔案的大小。
2、再次添加一個500MB的資料檔案。
報錯DATANEW剩餘空間不足,836M的剩餘空間無法再建立一個500M的檔案。
從上面的測試可以推論出:
a) 在磁盤組為Normal備援模式下,實際剩餘可用空間為FREE_MB / 備援度,也就是FREE_MB的一半,這是因為根據Normal備援,資料會存在一份相同的鏡像,是以實際占用的空間也會多出一倍。
b) USABLE_FILE_MB可以變為負值,表示ASM并不會強制留出REQUIRED_MIRROR_FREE_MB的空間,但是這意味着如果遭遇了ASM磁盤組故障,有可能會沒有足夠的剩餘空間來重新滿足備援度的要求。如果USABLE_FILE_MB為負數,就應該增加磁盤組的空間或者釋放出一些空間來。
02
Normal模式,多個Failgroup
在之前測試的基礎上新加2個Failgroup。
Disk01 | Disk02 | |
Failgroup01 | 1G | 500M |
Failgroup02 | 1G | 500M |
Failgroup03 | 1G | 500M |
Failgroup04 | 2G | 500M |
檢視視圖V$ASM_DISKGROUP來獲得磁盤組的相關資訊:
結果與有些不同,在有2個Failgroup的時候,REQUIRED_MIRROR_FREE_MB的值等于最大磁盤的大小。而在Failgroup大于2的時候,REQUIRED_MIRROR_FREE_MB的值等于最大Failgroup的大小。
ASM會在不同的Failgroup中存儲鏡像資料,一個normal備援的磁盤組要求至少有2個Failgroup,一個High備援的磁盤組要求至少3個Failgroup,如果具有2個Failgroup的Normal備援磁盤組,其中一個Failgroup發生了故障,那麼這個磁盤組如何重新滿足備援度的要求?不能!是以這種情況下,ASM僅僅給出了一個磁盤的大小作為REQUIRED_MIRROR_FREE_MB的值。
參考文檔:
https://docs.oracle.com/cd/E11882_01/server.112/e40402.pdf
美創運維中心資料庫服務團隊擁有Oracle ACE 1人、OCM 10餘人、數十名Oracle OCP、MySQL OCP、紅帽RHCA、中間件weblogic、tuxedo認證、達夢工程師 ,著有《Oracle DBA實戰攻略》,《Oracle資料庫性能優化方法和最佳實踐》,《Oracle核心技術揭秘》等多本資料運維優化書籍。目前運維各類資料庫合計2000餘套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、達夢等主流商業和開源資料庫。并成為首批國内達夢戰略合作夥伴之一,擁有海量經驗和完善的人員培養體系。并同時提供超融合,私有雲整體解決方案。