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
- js小技巧:tab页切换
- c#字符串操作方法实例
- Android中Fragment+ViewPager的配合使用
- 结合机器学习与生物医学技术,寻找Uber司机出行模式
- ASP.NET MVC 4 - 测试驱动 ASP.NET MVC
- LVS+Keepalived高可用环境部署梳理(主主和主从模式)
- 随着区块链的火爆,相关顶级域名“矿池”KC.com已建站
- Flash/Flex学习笔记(50):3D线条与填充
- LVM常规操作记录梳理(扩容/缩容/快照等)
- Flash/Flex学习笔记(55):背面剔除与 3D 灯光
- 资源等待类型sys.dm_os_wait_stats
- NVIDIA不再允许数据中心用GeForce驱动,提供区块链服务除外
- 非常强悍并实用的双机热备+负载均衡线上方案
- Apache 压力测试工具ab
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现图片识别汽车功能
- Mac下Anaconda的安装和使用教程
- linux ubuntu中安装、卸载和删除python-igraph的方法教程
- python实现汽车管理系统
- tp5框架基于ajax实现异步删除图片的方法示例
- Python3 jupyter notebook 服务器搭建过程
- PHP图像处理 imagestring添加图片水印与文字水印操作示例
- CentOS6.9下NFS服务安装配置教程
- Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
- PHP 枚举类型的管理与设计知识点总结
- Linux静态链接库使用类模板的快速排序算法
- TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
- php post换行的方法
- apache实现部署多个网站(一个ip部署多域名)的方法详解
- windows7 32、64位下python爬虫框架scrapy环境的搭建方法