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

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冗余中将会有五副本。

时间: 2025-01-29 14:35:45

Oracle ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table的相关文章

Oracle ASM 翻译系列第十八弹:ASM Internal ASM file number 5

ASM file number 5 本章讲述ASM的5号文件,5号文件是ASM的模板目录,包含了磁盘组中所有的文件模板的信息. 有两种类型的模板:一种是系统自带的,一种是用户创建的,默认的模板(系统自带的)已经包含ASM的所有文件类型,创建文件时会根据文件类型自动匹配,用户创建的模板只会在用户特别指定时会使用. 每一个模板包含了如下的一些信息: · 每个模板的名称(对于默认模板它的名称其实就是文件类型) · 文件冗余度(默认是磁盘组的冗余度) · 文件条带(默认是根据文件类型来决定文件的条带)

Oracle ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete

When will my rebalance complete "磁盘组的rebalance什么时候能完成?",这个问题我经常被问到,但是如果你期望我给出一个具体的数值,那么你会失望,毕竟ASM本身已经给你提供了一个估算值(GV$ASM_OPERATION.EST_MINUTES),其实你想知道的是rebalance完成的精确的时间.虽然我不能给你一个精确的时间,但是我可以给你一些rebalance的操作细节,让你知道当前rebalance是否正在进行中,进行到哪个阶段,以及这个阶段是

Oracle ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data

Where is my data 有时候我们想要知道一个特定的database block位于ASM的哪个磁盘,磁盘的哪个AU以及AU的哪一个块.本篇文章将向大家展示如何解决这个问题. Database Instance 首先在数据库里创建测试表空间: SQL> create tablespace T1 datafile '+DATA'; Tablespace created. SQL> select f.FILE#, f.NAME "File", t.NAME "

Oracle ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table

Free Space Table 在进行创建文件或者文件resize过程中,需要有一个快捷入口,可以迅速的知道当前磁盘有哪些可用的(free状态的)AU,ASM Free Space Table 简称FST表就是提供一个这样的功能,通过它可以快速的知道哪些allocation table(AT表)元数据块中有空闲的AU,它存储的是一个个的AT表元数据块的号码,FST表用来加速AU的分配,避免读取已经完全被占用殆尽的AT块,造成分配空间效率的低下. FST表技术上说其实是属于AT表的一部分,位于A

Oracle ASM 翻译系列第二十二弹:ASM Internal ASM file number 8

ASM file number 8 ASM元信息8号文件是磁盘空间使用目录Used Space Directory,简称USD,它记录了每个ASM磁盘组中每个磁盘的每个zone上被使用的AU数.一个磁盘的zone包含hot zone-热区(磁盘外圈,译者注)和cold zone-冷区(磁盘内圈,译者注).USD目录为每个磁盘提供了一个条目,条目信息记录了2个zone(COLD和HOT)的AU使用数. USD结构是在11.2版本中引入的,并且与智能数据存放特性有关.USD元数据文件在ASM兼容性参

Oracle ASM 翻译系列第二十弹:ASM Internal ASM file number 7

ASM file number 7 ASM元信息7号文件,是ASM的逻辑卷目录,用于跟踪与ADVM有关的文件. ASM动态逻辑卷设备是由ASM动态逻辑卷构建的.一个磁盘组中可以配置一个或多个ASM动态逻辑卷设备.ASM集群文件系统通过ADVM接口构建在ASM磁盘组之上.ADVM像数据库一样,也是ASM的一个客户端.当一个逻辑卷被访问时,相应的ASM文件会被打开并且ASM extent的信息会被发送到ADVM驱动. 有两种与ADVM逻辑卷相关的文件类型: · ASMVOL:逻辑卷文件,作为逻辑卷存

Oracle ASM 翻译系列第十四弹:ASM Internal Rebalancing act

在ASM中,每一个文件的extent都均匀的分布在它所在磁盘组的所有磁盘上,无论是在文件第一次创建或是文件创建之后的重新resize都是如此,这也意味着我们始终能保持磁盘组中的每一个磁盘上都有一个平衡的空间分配. Rebalance operation 虽然文件在新建或是resize过程中都能保证空间的均匀分配,但是磁盘组在某些情况下会自动触发重平衡的操作,例如添加.删除和resize磁盘的操作(这些操作显然会让磁盘组变得不再平衡),再如,移动一个文件从磁盘的hot区到cold区.我们还可以通过

Oracle ASM 翻译系列第十五弹:ASM Internal ASM File Directory

本篇主要介绍ASM的1号文件,ASM的1号文件是ASM的文件目录,它记录了磁盘组中的所有文件信息,由于在ASM中,每一个磁盘组都是独立的存储单元,所以每一个磁盘组都会有属于它自己的文件目录. 虽然这是一个内部的文件,但ASM实例会把它当做其它ASM文件一样管理,在ASM的文件目录中也会有它自己的条目(指向了它自己),在一个normal和high冗余的磁盘组中,它也会做镜像,随着新文件的产生,文件目录的大小也会相应地增长. 每一个ASM文件目录的条目都会包含如下的信息: · 文件大小 · 文件块大

Oracle ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility

amdu - ASM Metadata Dump Utility ASM Metadata Dump Utility,即ASM元数据导出工具,它的简写amdu更被人所熟知,常被Oracle技术支持人员和Oracle开发人员用来诊断和解决ASM故障.它能输出ASM的元数据信息并且从ASM磁盘组中抽取元数据和数据文件. amdu工具不依赖于ASM实例或者ASM磁盘组的状态,所以它能在ASM实例关闭和磁盘组未挂载的情况下正常使用,它甚至能在ASM磁盘出现故障或者不可见的场景下使用. Use amdu