ASM 翻译系列第二十一弹:ASM Attributes Directory
译者: 郭旭瑞
审核: 魏兴华
DBGeeK社群联合出品
ASM Attributes Directory
ASM的元数据9号文件,是ASM属性目录,包含了磁盘组的属性信息。属性目录只有在磁盘组的compatible.asm属性设置为11.1或以上时才会存在。
直到ASM 11.1版本开始,才引入了磁盘组属性的概念,它被用来细粒度的调整磁盘组的属性。有些属性只能在磁盘组创建时指定(如au_size),有些属性可以在任何时候指定(如disk_repair_time)。有些属性保存在磁盘头中(如au_size),有些属性被存储在【成员关系和状态表】中或磁盘头中,这取决于ASM的版本。
译者注:成员关系和状态表即partnership and status table的信息请参考本系列的【partnership and status table】篇的详细介绍。
Public attributes
大多数属性存放在属性目录并且可以通过查询v$asm_attribute视图获得。我们通过查询这个视图来看下我的所有磁盘组的属性信息:
SQL> SELECT g.name "Group", a.name "Attribute", a.value "Value"
FROM v$asm_diskgroup g, v$asm_attribute a
WHERE g.group_number=a.group_number and a.name not like 'template%';
Group Attribute Value
----- ----------------------- ----------------
ACFS disk_repair_time 3.6h
au_size 1048576
access_control.umask 026
access_control.enabled TRUE
cell.smart_scan_capable FALSE
compatible.advm 11.2.0.0.0
compatible.rdbms 11.2
compatible.asm 11.2.0.0.0
sector_size 512
DATA access_control.enabled TRUE
cell.smart_scan_capable FALSE
compatible.rdbms 11.2
compatible.asm 11.2.0.0.0
sector_size 512
au_size 1048576
disk_repair_time 3.6h
access_control.umask 026
SQL>
一个我们可以在任何时候修改的属性是disk repair time。以下是通过asmcmd修改DATA磁盘组的命令:
$ asmcmd setattr -G DATA disk_repair_time '8.0h'
$ asmcmd lsattr -lm disk_repair_time
Group_Name Name Value RO Sys
ACFS disk_repair_time 3.6h N Y
DATA disk_repair_time 8.0h N Y
$
Hidden attributes
前文提到,属性目录位于ASM元数据9号文件。现在我们定位到2号磁盘组的属性目录。
SQL> SELECT 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=9
ORDER BY 1, 2;
Disk# Extent AU Disk name
----- ------ ---- ---------
0 0 1146 ASMDISK1
1 0 1143 ASMDISK2
2 0 1150 ASMDISK3
SQL>
现在用kfed工具进行查看。
$ kfed read /dev/oracleasm/disks/ASMDISK3 aun=1150 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 23 ; 0x002: KFBTYP_ATTRDIR
...
kfede[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfede[0].entry.hash: 0 ; 0x028: 0x00000000
kfede[0].entry.refer.number: 4294967295 ; 0x02c: 0xffffffff
kfede[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0
kfede[0].name: disk_repair_time ; 0x034: length=16
kfede[0].value: 8.0h ; 0x074: length=4
...
kfede[i]字段包含了磁盘组属性的名称和值。我们结合egrep命令查看所有的ASM磁盘组的属性值:
$ kfed read /dev/oracleasm/disks/ASMDISK3 aun=1150 | egrep "name|value"
kfede[0].name: disk_repair_time ; 0x034: length=16
kfede[0].value: 8.0h ; 0x074: length=4
kfede[1].name: _rebalance_compact ; 0x1a8: length=18
kfede[1].value: TRUE ; 0x1e8: length=4
kfede[2].name: _extent_sizes ; 0x31c: length=13
kfede[2].value: 1 4 16 ; 0x35c: length=6
kfede[3].name: _extent_counts ; 0x490: length=14
kfede[3].value: 20000 20000 214748367 ; 0x4d0: length=21
kfede[4].name: _ ; 0x604: length=1
kfede[4].value: 0 ; 0x644: length=1
kfede[5].name: au_size ; 0x778: length=7
kfede[5].value: ; 0x7b8: length=9
kfede[6].name: sector_size ; 0x8ec: length=11
kfede[6].value: ; 0x92c: length=9
kfede[7].name: compatible ; 0xa60: length=10
kfede[7].value: ; 0xaa0: length=9
kfede[8].name: cell ; 0xbd4: length=4
kfede[8].value: FALSE ; 0xc14: length=5
kfede[9].name: access_control ; 0xd48: length=14
kfede[9].value: FALSE ; 0xd88: length=5
以上,我们还窥探到了许多隐藏的磁盘组属性。我们看到_REBALANCE_COMPACT属性是TRUE。这个属性关系到磁盘组rebalance中的compact环节。我们还可以看到extent的增长方式(_EXTENT_SIZES),初始化大小会从1个AU到4个AU再到16AU。_EXTENT_COUNTS表示extent增长的断点,前20000个extent只包含1个AU,接下来20000个extent包含4个AU,再往后的extent都会包含16个AU。
Conclusion
每个磁盘组都具有一些磁盘组的属性,磁盘组属性用来细粒度的控制磁盘组的特性。大多数属性存放在属性目录并且可以通过查询v$asm_attribute视图获得。
[1] 在ASM 11.1之前的版本,我们也可以在创建磁盘组时指定AU的大小,这是通过ASM隐含参数_ASM_AUSIZE来实现的,在ASM 11.1及之后的版本,由于ASM磁盘组属性的出现,就可以通过设置ASM磁盘组的AU_SIZE属性值来达到同样的目的。
关于译者
郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高性能数据库云平台、QBackup数据库秒级备份恢复云平台等产品的整体交付管理与技术支持、维保服务工作。个人网站:www.dbalex.com
- Android 7.0中ContentProvider实现原理
- 《iOS APP 性能检测》
- iOS 11 安全区域适配总结
- Linux下巧用chattr、watch命令的实例
- 【特斯拉组件】iOS高性能PageController
- SUSE Linux系统在线安装软件命令zypper参数详解
- Linux下通过rdesktop连接Windows远程桌面
- 微信iOS收款到账语音提醒开发总结
- React Native按需加载 手Q狼人杀探索之路
- nginx日志切割及7天前的历史日志删除脚本
- 《ios爆内存问题解决方案-OOMDetector组件》
- Linux/SUSE安装svn客户端的问题记录
- 《广研Android卡顿监控系统》
- 替换WordPress默认搜索为百度站内搜索(知更鸟主题可照搬)
- 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 数组属性和方法
- PHP lcfirst()函数定义与用法
- Qt音视频开发38-USB摄像头解码linux方案
- python3 简单实现组合设计模式
- 基于django2.2连oracle11g解决版本冲突的问题
- 浅谈php使用curl模拟多线程发送请求
- PHP模型Model类封装数据库操作示例
- 解决django migrate报错ORA-02000: missing ALWAYS keyword
- PHP封装的数据库模型Model类完整示例【基于PDO】
- PHP的简单跳转提示的实现详解
- PHP多进程通信-消息队列使用
- PHP implode()函数用法讲解
- PHP精确到毫秒秒杀倒计时实例详解
- django 装饰器 检测登录状态操作
- 使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
- Django Session和Cookie分别实现记住用户登录状态操作