ASM 翻译系列第二十三弹:ASM Internal ASM files number 12 and 254

原作者:Bane Radulovic

译者: 郭旭瑞

审核: 魏兴华

DBGeeK社群联合出品

ASM files number 12 and 254

staleness directory是ASM元信息的12号文件,包含了可以把staleness registry中的槽位映射给特定磁盘和客户端的元信息。staleness registry是ASM元信息254号文件,当磁盘offline时,用于跟踪AU的状态。这两个特性适用于COMPATIBLE.RDBMS设置为11.1或以上且NORMAL或HIGH冗余模式的磁盘组。只有在需要时staleness元信息才会被创建,本身的内容大小会随着offline磁盘的增多而增长。

译者注:这里的客户端可以理解成数据库实例。

● 当一个磁盘offline时,每个RDBMS实例都会从staleness registry中得到一个映射到该磁盘的槽位。这个槽位中的每一个比特位映射这个offline磁盘上的一个AU。当RDBMS实例对offline的磁盘发起写IO操作时,该实例会在staleness registry中修改对应的比特位。

● 当一个磁盘被online时,ASM会从冗余的extent中拷贝staleness registry比特位中记录的AU。因为只有offline时被改变过的AU会被更新,所以磁盘online操作的效率会高于该盘被drop并添加一块新盘的效率。

No stale disks

staleness元信息的结构在需要时会被创建,这意味着staleness directory和staleness registry在磁盘正常online时是不存在的。

SQL> SELECT g.name "Disk group",
 g.group_number "Group#",
 d.disk_number "Disk#",
 d.name "Disk",
 d.mode_status "Disk status"
FROM v$asm_disk d, v$asm_diskgroup g
WHERE g.group_number=d.group_number and g.group_number<>0
ORDER BY 1, 2, 3;
Disk group       Group#      Disk# Disk         Disk status
------------ ---------- ---------- ------------ ------------
DATA                  1          0 ASMDISK1     ONLINE
                                 1 ASMDISK2     ONLINE
                                 2 ASMDISK3     ONLINE
RECO                  2          0 ASMDISK4     ONLINE
                                 1 ASMDISK5     ONLINE
                                 2 ASMDISK6     ONLINE
SQL> SELECT x.number_kffxp "File#",
 x.disk_kffxp "Disk#",
 x.xnum_kffxp "Extent",
 x.au_kffxp "AU",
 d.name "Disk name"
FROM x$kffxp x, v$asm_disk_stat d
WHERE x.group_kffxp=d.group_number
 and x.disk_kffxp=d.disk_number
 and x.number_kffxp in (12, 254)
ORDER BY 1, 2;
no rows selected

Stale disks

Staleness信息在磁盘offline并且在针对该offline盘有写IO时会才被创建。

在下面的例子中,我会通过ALTER DISKGROUP OFFLINE DISK命令手动把一个磁盘offline。但是需要指出,staleness元信息的创建跟磁盘以何种方式何种原因offline无关。

SQL> alter diskgroup RECO offline disk ASMDISK6;
Diskgroup altered.
SQL> SELECT g.name "Disk group",
 g.group_number "Group#",
 d.disk_number "Disk#",
 d.name "Disk",
 d.mode_status "Disk status"
FROM v$asm_disk d, v$asm_diskgroup g
WHERE g.group_number=d.group_number and g.group_number=2
ORDER BY 1, 2, 3;
Disk group       Group#      Disk# Disk         Disk status
------------ ---------- ---------- ------------ ------------
RECO                  2          0 ASMDISK4     ONLINE
                                 1 ASMDISK5     ONLINE
                                 2 ASMDISK6     OFFLINE

数据库针对该磁盘组进行不断的写入,一会就可以观察到该磁盘组中已经创建了staleness directory 和 staleness registry。

SQL> SELECT x.number_kffxp "File#",
 x.disk_kffxp "Disk#",
 x.xnum_kffxp "Extent",
 x.au_kffxp "AU",
 d.name "Disk name"
FROM x$kffxp x, v$asm_disk_stat d
WHERE x.group_kffxp=d.group_number
 and x.disk_kffxp=d.disk_number
 and d.group_number=2
 and x.number_kffxp in (12, 254)
ORDER BY 1, 2;
     File#      Disk#     Extent         AU Disk name
---------- ---------- ---------- ---------- ------------------------------
        12          0          0         86 ASMDISK4
                    1          0        101 ASMDISK5
                    2          0 4294967294 ASMDISK6
       254          0          0         85 ASMDISK4
                    1          0        100 ASMDISK5
                    2          0 4294967294 ASMDISK6

Look inside

元信息中并没有很多有价值的信息,连kfed都无法分辨出这种类型元信息block。

$ kfed read /dev/oracleasm/disks/ASMDISK4 aun=86 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           21 ; 0x002: *** Unknown Enum ***
...
kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number:        4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn:                 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number:                 0 ; 0x014: 0x00000000
kffdnd.parent.incarn:                 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000
kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0
kfdsde.entry.incarn:                  1 ; 0x024: A=1 NUMM=0x0
kfdsde.entry.hash:                    0 ; 0x028: 0x00000000
kfdsde.entry.refer.number:   4294967295 ; 0x02c: 0xffffffff
kfdsde.entry.refer.incarn:            0 ; 0x030: A=0 NUMM=0x0
kfdsde.cid:                       +ASMR ; 0x034: length=5
kfdsde.indlen:                        1 ; 0x074: 0x0001
kfdsde.flags:                         0 ; 0x076: 0x0000
kfdsde.spare1:                        0 ; 0x078: 0x00000000
kfdsde.spare2:                        0 ; 0x07c: 0x00000000
kfdsde.indices[0]:                    0 ; 0x080: 0x00000000
kfdsde.indices[1]:                    0 ; 0x084: 0x00000000
kfdsde.indices[2]:                    0 ; 0x088: 0x00000000
...
$ kfed read /dev/oracleasm/disks/ASMDISK4 aun=85 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           20 ; 0x002: *** Unknown Enum ***
...
kfdsHdrB.clientId:           1297301881 ; 0x000: 0x4d534179
kfdsHdrB.incarn:                      0 ; 0x004: 0x00000000
kfdsHdrB.dskNum:                      2 ; 0x008: 0x0002
kfdsHdrB.ub2spare:                    0 ; 0x00a: 0x0000
ub1[0]:                               0 ; 0x00c: 0x00
ub1[1]:                               0 ; 0x00d: 0x00
ub1[2]:                               0 ; 0x00e: 0x00
ub1[3]:                               0 ; 0x00f: 0x00
ub1[4]:                               0 ; 0x010: 0x00
ub1[5]:                               0 ; 0x011: 0x00
ub1[6]:                               0 ; 0x012: 0x00
ub1[7]:                              16 ; 0x013: 0x10
ub1[8]:                               0 ; 0x014: 0x00
...

除了一些比特位,没有太多有价值信息。

Conclusion

staleness directory 和 staleness registry提供的元信息结构用来为ASM 11中引入的fast mirror resync新特性提供支持。staleness directory是ASM元信息12号文件,包含了可以把staleness registry中的槽位映射给特定磁盘和客户端的元信息。当磁盘offline时,staleness registry用于跟踪AU的状态。这个特性只在NORMAL或HIGH冗余模式的磁盘组中生效。

关于译者

郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高性能数据库云平台、QBackup数据库秒级备份恢复云平台等产品的整体交付管理与技术支持、维保服务工作。个人网站:www.dbalex.com

原文发布于微信公众号 - 沃趣科技(woqutech)

原文发表时间:2016-08-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逍遥剑客的游戏开发

NPK文件格式

72630
来自专栏杨建荣的学习笔记

Percona-toolkit的安装和配置(r8笔记第86天)

pt工具是非常实用有效的一个工具集,对于诊断常规问题还是非常有效的,相比于Oracle的工具,MySQL中没有那么多复杂的数据字典,在实现方式上相对更加轻巧,主...

46670
来自专栏idba

死锁案例之十

死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋...

11320
来自专栏杨建荣的学习笔记

MySQL InnoDB Cluster环境搭建和简单测试

InnoDB Cluster初印象 记得MySQL Group Replicatioin 刚开始的时候,MySQL界很是轰动,等待了多年,终于有了官方的这...

56470
来自专栏Guangdong Qi

ios 未能找到使用指定主机名的服务器原因之一

97520
来自专栏数据和云

忘记SQL Server 管理员密码不可怕,学会这招就够了

作者 | 邹建,资深数据库专家,精通各项 SQL Server 技术,具有丰富的管理、维护、优化能力以及业务应用经验。他一直热心于技术知识的分享、传播,持续活跃...

26530
来自专栏大宽宽的碎碎念

怎么避免MYSQL误删除避免混淆开发环境的DB和生产环境的DB用事务保护使用安全更新模式对DROP和TRUNCATE慎之又慎最终的招数最终的话

386130
来自专栏智能大石头

每天4亿行SQLite订单大数据测试(源码)

SQLite单表4亿订单,大数据测试 SQLite作为嵌入式数据库的翘楚,广受欢迎! 新生命团队自2010年以来,投入大量精力对SQLite进行学习研究,成功应...

1.2K60
来自专栏MongoDB中文社区

MongoDB事务模型分析

在了解写操作的事务性之前,需要先了解mongo层的每一个table,是如何与wiredtiger层的table(btree)对应的。mongo层一个最简单的ta...

35520
来自专栏杨建荣的学习笔记

一则orabbix报警的分析(r6笔记第65天)

最近使用zabbix监控之后,都会在凌晨收到1台数据库服务器的报警短信,报警的内容为: No data received from Orabbix 这个错误其实...

34580

扫码关注云+社区

领取腾讯云代金券