partnership and status table簡稱pst表包含了一個磁盤組中所有磁盤的相關資訊-磁盤号,磁盤狀态,partner的磁盤号,心跳資訊和failgroup的資訊(11g及以上版本)。
每個磁盤的au 1是為pst表預留的,但是并不是每一個磁盤都有pst表的資訊。
在external備援的磁盤組中隻有一份pst表。
在normal備援的磁盤組中,至少有兩份pst表。如果磁盤組中有三個或更多的failgroups,pst表将會有3份。
在high備援的磁盤組中,至少有三份pst表的資訊。如果有四個failgroups,将會有4份pst表,如果有五個或者更多failgroups,将會有五份pst表。
請看下面的例子,注意這個被建立的磁盤組是由5個磁盤組成:
建立外部備援的磁盤組
sql> create diskgroup dg1 external redundancy
disk '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9';
diskgroup created.
檢視asm的alert日志
sat aug 31 20:44:59 2013
disk '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9'
note: assigning number (2,0) to disk (/dev/sdc5)
note: assigning number (2,1) to disk (/dev/sdc6)
note: assigning number (2,2) to disk (/dev/sdc7)
note: assigning number (2,3) to disk (/dev/sdc8)
note: assigning number (2,4) to disk (/dev/sdc9)
...
note: initiating pst update: grp = 2
sat aug 31 20:45:00 2013
gmon updating group 2 at 50 for pid 22, osid 9873
note: group dg1: initial pst location: disk 0000 (pst copy 0)
note: pst update grp = 2 completed successfully
alert日志的輸出非常相信,可以看到asm隻建立了一份pst表,位于disk 0000即/dev/sdc5。
建立normal備援的磁盤組
sql> drop diskgroup dg1;
diskgroup dropped.
sql> create diskgroup dg1 normal redundancy
檢視asm的alert日志:
sat aug 31 20:49:28 2013
note: group 2 pst updated.
gmon updating group 2 at 68 for pid 22, osid 9873
note: group dg1: initial pst location: disk 0001 (pst copy 1)
note: group dg1: initial pst location: disk 0002 (pst copy 2)
we see that asm creates three copies of the pst.
這次我們看到建立了3份pst表,分别位于disk 0000,disk 0001,disk 0002,即/dev/sdc5,/dev/sdc6,/dev/sdc7。
high redundancy disk group
sql> create diskgroup dg1 high redundancy
sat aug 31 20:51:52 2013
sat aug 31 20:51:53 2013
gmon updating group 2 at 77 for pid 22, osid 9873
note: group dg1: initial pst location: disk 0003 (pst copy 3)
note: group dg1: initial pst location: disk 0004 (pst copy 4)
這一次我們看到了asm建立了五份pst表。
pst在下列情況下會再配置設定:
· pst所在磁盤不可用(asm執行個體啟動時)
· 磁盤offline
· pst的讀寫發生io錯誤
· 磁盤被正常的删除掉(手工或背景)
這些情況下,如果相同失敗組中有其他可用的磁盤,pst将會被重配置設定到其他磁盤;否則會重配置設定到其他沒有pst副本的失敗組。
我們通過一個例子看下:
disk '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8';
asm的alert日志顯示了磁盤剛建立後,pst表的拷貝資訊分别位于磁盤0,1,2。
我們删除磁盤0:
sql> select disk_number, name, path from v$asm_disk_stat
where group_number = (select group_number from v$asm_diskgroup_stat where name='dg1');
disk_number name path
----------- ------------------------------ ----------------
3 dg1_0003 /dev/sdc8
2 dg1_0002 /dev/sdc7
1 dg1_0001 /dev/sdc6
0 dg1_0000 /dev/sdc5
sql> alter diskgroup dg1 drop disk dg1_0000;
diskgroup altered.
再次檢視asm的alert日志:
sat aug 31 21:04:29 2013
sql> alter diskgroup dg1 drop disk dg1_0000
note: initiating pst update: grp 2 (dg1), dsk = 0/0xe9687ff6, mask = 0x6a, op = clear
sat aug 31 21:04:37 2013
gmon updating disk modes for group 2 at 96 for pid 24, osid 16502
note: group dg1: updated pst location: disk 0001 (pst copy 0)
note: group dg1: updated pst location: disk 0002 (pst copy 1)
note: group dg1: updated pst location: disk 0003 (pst copy 2)
我們看到pst的拷貝資訊從磁盤0轉移到了磁盤3.
磁盤的partnership是在normal或者high備援的磁盤組上,在兩個磁盤之間有一個“對稱”的關系。在external備援中,不存在disk partnership。關于這個話題的讨論,請看部落格how many partners(第6篇)。
pst表的資料要先于其他asm中繼資料之前可用。當發起磁盤組的mount請求,gmon程序讀取磁盤組中的所有磁盤,找到并确認可用的pst副本。一旦确認有足夠的pst副本,就把磁盤組mount上來。從這個時刻開始,pst表的資訊儲存在asm執行個體的cache裡;位于gmon 程序的pga中,由pt.n.0 enqueue排他鎖進行保護。
對于同一叢集的其他asm執行個體,在啟動之後會把pst表緩存在自己的gmon pga中,加上共享的pt.n.0 enqueue。
隻有擁有排他pt enqueue鎖的gmon程序(10gr1中為ckpt),可以更新磁盤中的pst表資訊。
每次嘗試mount磁盤組時,gmon trace檔案就會記錄pst資訊。注意我說的是嘗試,不是已經mount上。換句話說,gmon不管mount動作成功與否,都會記錄資訊。這些資訊對于oracle support診斷磁盤組mount失敗故障可能會有價值。
下面是典型的gmon trace檔案記錄的一個磁盤組mount的資訊:
=============== pst ====================
grpnum: 2
grptyp: 2
state: 1
callcnt: 103
bforce: 0x0
(lockvalue) valid=1 ver=0.0 ndisks=3 flags=0x3 from inst=0 (i am 1) last=0
--------------- hdr --------------------
next: 7
last: 7
pst count: 3
pst locations: 1 2 3
incarn: 4
dta size: 4
version: 0
asm version: 168820736 = 10.1.0.0.0
contenttype: 0
--------------- loc map ----------------
0: dirty 0 cur_loc: 0 stable_loc: 0
1: dirty 0 cur_loc: 0 stable_loc: 0
--------------- dta --------------------
1: sts v v(rw) p(rw) a(x) d(x) fg# = 0 addts = 0 parts: 2 (amp) 3 (amp)
2: sts v v(rw) p(rw) a(x) d(x) fg# = 0 addts = 0 parts: 1 (amp) 3 (amp)
3: sts v v(rw) p(rw) a(x) d(x) fg# = 0 addts = 0 parts: 1 (amp) 2 (amp)
=== pst ===标記的部分顯示了磁盤組号(grpnum),類型(grptyp),和狀态。--- hdr ---标記的部分顯示了pst的副本數(pst count)和所在的磁盤号。--- dta ---顯示了pst所在磁盤的狀态。
pst(partnership and status table)包含一個磁盤組裡所有磁盤的相關資訊 -- 磁盤号,磁盤狀态,partner磁盤号,心跳資訊和failgroup資訊(11g之後)。
每個asm磁盤的1号au為pst表預留,但是隻有部分磁盤有pst資料。由于pst是重要的asm中繼資料,隻要失敗組個數足夠,在normal備援中将會有三副本,在high備援中将會有五副本。
<b>本文來自雲栖社群合作夥伴“dbgeek”</b>