ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table

时间:2022-05-05
本文章向大家介绍ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原作者:Bane Radulovic

译者: 邱大龙

审核: 魏兴华

DBGeeK社群联合出品

Partnership and Status Table

Partnership and Status Table简称PST表包含了一个磁盘组中所有磁盘的相关信息-磁盘号,磁盘状态,partner的磁盘号,心跳信息和failgroup的信息(11G及以上版本)。

每个磁盘的AU 1是为PST表预留的,但是并不是每一个磁盘都有PST表的信息。

PST count

在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
SQL> CREATE DISKGROUP DG1 EXTERNAL REDUNDANCY
DISK '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9'
Sat Aug 31 20:44:59 2013
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)
Sat Aug 31 20:45:00 2013
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
DISK '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9';

Diskgroup created.

查看ASM的alert日志:

Sat Aug 31 20:49:28 2013
SQL> CREATE DISKGROUP DG1 NORMAL REDUNDANCY
DISK '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9'
Sat Aug 31 20:49:28 2013
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)
...
Sat Aug 31 20:49:28 2013
NOTE: group 2 PST updated.
NOTE: initiating PST update: grp = 2
Sat Aug 31 20:49:28 2013
GMON updating group 2 at 68 for pid 22, osid 9873
NOTE: group DG1: initial PST location: disk 0000 (PST copy 0)
NOTE: group DG1: initial PST location: disk 0001 (PST copy 1)
NOTE: group DG1: initial PST location: disk 0002 (PST copy 2)
Sat Aug 31 20:49:28 2013
NOTE: PST update grp = 2 completed successfully
...


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> drop diskgroup DG1;

Diskgroup dropped.

SQL> CREATE DISKGROUP DG1 HIGH REDUNDANCY
DISK '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9';

Diskgroup created.

查看ASM的alert日志:

Sat Aug 31 20:51:52 2013
SQL> CREATE DISKGROUP DG1 HIGH REDUNDANCY
DISK '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8', '/dev/sdc9'
Sat Aug 31 20:51:52 2013
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)
...
Sat Aug 31 20:51:53 2013
NOTE: group 2 PST updated.
NOTE: initiating PST update: grp = 2
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 0000 (PST copy 0)
NOTE: group DG1: initial PST location: disk 0001 (PST copy 1)
NOTE: group DG1: initial PST location: disk 0002 (PST copy 2)
NOTE: group DG1: initial PST location: disk 0003 (PST copy 3)
NOTE: group DG1: initial PST location: disk 0004 (PST copy 4)
Sat Aug 31 20:51:53 2013
NOTE: PST update grp = 2 completed successfully
...

这一次我们看到了ASM创建了五份PST表。

PST relocation

PST在下列情况下会再分配:

● PST所在磁盘不可用(ASM实例启动时)

● 磁盘offline

● PST的读写发生IO错误

● 磁盘被正常的删除掉(手工或后台)

这些情况下,如果相同失败组中有其他可用的磁盘,PST将会被重分配到其他磁盘;否则会重分配到其他没有PST副本的失败组。

我们通过一个例子看下:

SQL> drop diskgroup DG1;

Diskgroup dropped.

SQL> CREATE DISKGROUP DG1 NORMAL REDUNDANCY
DISK '/dev/sdc5', '/dev/sdc6', '/dev/sdc7', '/dev/sdc8';

Diskgroup created.

ASM的alert日志显示了磁盘刚创建后,PST表的拷贝信息分别位于磁盘0,1,2。

NOTE: group DG1: initial PST location: disk 0000 (PST copy 0)
NOTE: group DG1: initial PST location: disk 0001 (PST copy 1)
NOTE: group DG1: initial PST location: disk 0002 (PST copy 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.

Disk Partners

磁盘的Partnership是在normal或者high冗余的磁盘组上,在两个磁盘之间有一个“对称”的关系。在external冗余中,不存在disk partnership。关于这个话题的讨论,请看博客How many partners(第6篇)。

PST Availability

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表信息。

PST (GMON) tracing

每次尝试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所在磁盘的状态。

Conclusion

PST(Partnership and Status Table)包含一个磁盘组里所有磁盘的相关信息 -- 磁盘号,磁盘状态,partner磁盘号,心跳信息和failgroup信息(11g之后)。

每个ASM磁盘的1号AU为PST表预留,但是只有部分磁盘有PST数据。由于PST是重要的ASM元数据,只要失败组个数足够,在normal冗余中将会有三副本,在high冗余中将会有五副本。

关于译者

邱大龙,沃趣科技数据库技术专家,主要参与公司产品实施、测试、维护以及优化。对SQL优化、数据迁移、备份容灾等有深入的研究,对大数据量数据迁移、故障恢复、高并发下数据库性能调优有丰富的经验。