首页 > 数据库 >Oracle 11g asm中不同au size下datafile的au分布初探

Oracle 11g asm中不同au size下datafile的au分布初探

时间:2023-04-06 11:34:55浏览次数:52  
标签:... 11g SET read datafile 29 write au 512


今天有朋友问11g中asm 的au size不为1m的情况下,datafile的au 分布是怎么样的?通过10g的方式去kfed read,
发现不对了,原帖地址:~~【高手请进】在oracle11g中通过kfed找到ASM AU空间分布信息?

下午花了一点时间研究了一下,其中还有些没有明白,不过基本上搞清楚了,下面是简单的实验过程:

开始我也没明白其中的关系,首先尝试用strace 去跟踪amdu的过程,我们知道amdu是可以直接抽取datafile的,开始
我是这样想的:既然amdu在读取asm disk的时候,可以直接将文件读取出来,那么也就比如需要现在知道该datafile的
au 分布情况,于是我使用strace 进行跟踪,完全没有搞明白,如下:
命令如下:strace -o amdu.log  amdu -dis ‘/dev/sdb’ -extract data2.256
其中产生的部分log信息如下:


stat64("/dev/sdb", {st_mode=S_IFBLK|0777, st_rdev=makedev(8, 16), ...}) = 0
access("/dev/sdb", F_OK)                = 0
statfs("/dev/sdb", {f_type=0x1021994, f_bsize=4096, f_blocks=129388, f_bfree=129358, f_bavail=129358, f_files=129388, f_ffree=128781, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
open("/dev/sdb", O_RDWR|O_LARGEFILE)    = 7
mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb759d000     --257   
_llseek(7, 0, [0], SEEK_SET)            = 0
read(7, "\1\202\1\1\0\0\0\0\0\0\0\200\2519\325\222\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576) = 1048576
_llseek(7, 1048576, [1048576], SEEK_SET) = 0               --256
read(7, "\1\202\3\1\0\1\0\0\0\0\0\200\241?\303\257\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576) = 1048576
_llseek(7, 2097152, [2097152], SEEK_SET) = 0                --512
read(7, "\1\202\3\1\0\2\0\0\0\0\0\200\241\374\301\257\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576) = 1048576
_llseek(7, 3145728, [3145728], SEEK_SET) = 0                --768
read(7, "\1\202\3\1\0\3\0\0\0\0\0\200\241\275\307\257\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1048576) = 1048576
stat64("/dev/sdb", {st_mode=S_IFBLK|0777, st_rdev=makedev(8, 16), ...}) = 0
access("/dev/sdb", F_OK)                = 0
statfs("/dev/sdb", {f_type=0x1021994, f_bsize=4096, f_blocks=129388, f_bfree=129358, f_bavail=129358, f_files=129388, f_ffree=128781, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
open("/dev/sdb", O_RDWR|O_LARGEFILE)    = 8
_llseek(8, 8384512, [8384512], SEEK_SET) = 0             ---2047
read(8, "\1\202\23\1\377\7\0\0\0\0\0\200_\204\324\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
open("/home/ora11g/11.2/grid/rdbms/mesg/amduus.msb", O_RDONLY) = 9
fcntl64(9, F_SETFD, FD_CLOEXEC)         = 0
lseek(9, 0, SEEK_SET)                   = 0
read(9, "\25\23\"\1\23\3\t\t\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 256) = 256
lseek(9, 512, SEEK_SET)                 = 512
read(9, "Z\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
lseek(9, 1024, SEEK_SET)                = 1024
read(9, "\311\0\323\0/\1\223\1Z\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
lseek(9, 2048, SEEK_SET)                = 2048
read(9, "\n\0\312\0\1\0D\0\313\0\1\0\\\0\314\0\1\0\200\0\315\0\1\0\257\0\316\0\2\0\333\0"..., 512) = 512
lseek(9, 512, SEEK_SET)                 = 512
read(9, "Z\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
lseek(9, 1024, SEEK_SET)                = 1024
read(9, "\311\0\323\0/\1\223\1Z\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 512) = 512
lseek(9, 1536, SEEK_SET)                = 1536
read(9, "\f\0d\0\0\0P\0e\0\1\0q\0f\0\1\0\244\0g\0\1\0\315\0h\0\2\0\334\0"..., 512) = 512
write(2, "AMDU-00204: Disk N0001 is in cur"..., 63) = 63
write(2, "AMDU-00201: Disk N0001: '/dev/sd"..., 35) = 35
write(4, "AMDU-00204: Disk N0001 is in cur"..., 63) = 63
write(4, "AMDU-00201: Disk N0001: '/dev/sd"..., 35) = 35
write(4, "** HEARTBEAT DETECTED **\n", 25) = 25
munmap(0xb759d000, 1052672)             = 0
close(7)                                = 0
close(8)                                = 0
write(4, "           Allocated AU's: 24\n", 30) = 30   ---这里其实是比较关键的,到这里为止,amdu起码就知道了au的分布情况了。
write(4, "                Free AU's: 488\n", 31) = 31
write(4, "       AU's read for dump: 0\n", 29) = 29
write(4, "       Block images saved: 0\n", 29) = 29
write(4, "        Map lines written: 0\n", 29) = 29
write(4, "          Heartbeats seen: 1\n", 29) = 29
write(4, "  Corrupt metadata blocks: 0\n", 29) = 29
write(4, "        Corrupt AT blocks: 0\n", 29) = 29
write(4, "\n", 1)                       = 1
write(4, "\n", 1)                       = 1
write(4, "------------------------ SUMMARY"..., 79) = 79
write(4, "           Allocated AU's: 24\n", 30) = 30
write(4, "                Free AU's: 488\n", 31) = 31
write(4, "       AU's read for dump: 0\n", 29) = 29
write(4, "       Block images saved: 0\n", 29) = 29
write(4, "        Map lines written: 0\n", 29) = 29
write(4, "          Heartbeats seen: 1\n", 29) = 29
write(4, "  Corrupt metadata blocks: 0\n", 29) = 29
write(4, "        Corrupt AT blocks: 0\n", 29) = 29
write(4, "\n", 1)                       = 1


首先来看看statfs部分:


statfs("/dev/sdb", {f_type=0x1021994, f_bsize=4096, f_blocks=129388, f_bfree=129358, f_bavail=129358, f_files=129388,
 f_ffree=128781, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
 
该函数的结构:
 
int statfs(const char *path, struct statfs *buf);
 
该函数的详细参数解析:
struct statfs {
 long f_type; /* 文件系统类型 */
 long f_bsize; /* 经过优化的传输块大小 */
 long f_blocks; /* 文件系统数据块总数 */
 long f_bfree; /* 可用块数 */
 long f_bavail; /* 非超级用户可获取的块数 */
 long f_files; /* 文件结点总数 */
 long f_ffree; /* 可用文件结点数 */
 fsid_t f_fsid; /* 文件系统标识 */
 long f_namelen; /* 文件名的最大长度 */
 };
 
从上面可以得出整个/dev/sdb的情况如下:
 
block大小为4096;
总的block为:129388个
可用的block为:129358  ---所以用掉的block也就是30个。
 
关于llseek函数:
_llseek(8, 8384512, [8384512], SEEK_SET) = 0    
 
关于该函数的描述为:_llseek - reposition read/write file offset
 
8384512 指的是offset,由于block大小为4096,所以8384512/4096=2047



标签:...,11g,SET,read,datafile,29,write,au,512
From: https://blog.51cto.com/databasenotes/6172466

相关文章

  • neondatabase 开源的k8s postgres autoscaling 工具
    autoscalingneondatabase开源的pg扩展工具(核心是解决neondatabase的一些问题),但是设计上有不少值得学习参考的地方参考架构  说明autoscaling设计上实现了自己的一个vm(支持在线迁移业务影响小),实现了自己的scheduler,也算是一个不错的k8s扩展开发参考项目参考资料......
  • 在Dynamics 365用Power Automate根据模板生成PDF
    在Dynamics365的项目中经常遇到需要把CRM的表单根据模板生成PDF以便打印的需求,本文以合同表单根据合同模板生成PDF文件为例,介绍通过PowerAutomate的云端流实现该需求的方法。先看最终效果:   下面是详细的步骤step1环境需求我在PowerAutomate中......
  • 用python的pywinauto组件控制微信Windows版
    使用pywinauto组件可以比较容易的操纵微信Windows版进行信息发送和接受 前提如下1、已经安装有关python组件。2、微信已经打开和登录,下面的代码不负责登录操作。3、微信版本3.9.2.23具体实现有两个类1、帮助类HelperimportdatetimeclassHelper:"""帮助类......
  • libcurl第五课 Digest Authentication摘要验证使用
    场景在安迅士摄像机网页上,配置系统选项,HTTP/RTSPPasswordSettings中,选择Encryptedonly。获取设备的云台状态信息,使用的是摘要认证例子voidCAnXunShiConn::TestlibCurlHTTPDegistAuth(){CURL*pCurlHandle=curl_easy_init();curl_easy_setopt(pCurlHand......
  • Auto Chess (双指针, 极角排序)
    题目大意:释放一个45都的技能去尽可能消灭更多的敌人(在一个平面里面)  思路:技能是无线长的,于是抛弃无用信息,只保留斜率即可然后利用双指针,或者二分去做即可 ......
  • Linux centos7虚拟机安装Oracle11g完全教程
                      Linuxcentos7虚拟机安装Oracle11g完全教程Linux下安装Oracle相比windows安装Oracle要显得繁琐很多,繁琐在前期准备工作很多,Oracle有两次安装前的检查,前期的准备工作其实也就是围绕这两次检查来做的。第一次检查:Oracle安装程......
  • openGauss备份恢复之gs_probackup
    一、概述1、基础信息gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss实例进行定期备份,以便在数据库出现故障时能够恢复服务器。可用于备份单机数据库,也可对主机或者主节点数据库备机进行备份,为物理备份。可备份外部目录的内容,如脚本文件、配置文件、日......
  • Unity-NaughtAttributes
    SpecialAttributesAllowNestingStruct需要嵌套时使用DrawerAttributesAnimator显示下拉参数publicAnimatorsomeAnimator;[AnimatorParam("someAnimator")]publicintparamHash;Button直接执行函数[Button("ButtonText")]privatevoidMethodTwo(){}Ani......
  • MySQL AutoIncrement--PXC集群批量插入操作获取自增ID异常问题
    问题描述由于MySQLPXC集群的所有节点均可读写,因此当PXC集群中节点增加和减少时,PXC集群会自动调整集群各节点的自增ID步长,避免不同集群节点生成相同自增ID值产生冲突。当PXC集群中读节点数量发生变化时,客户端执行BatchInsert方法可能返回错误的自增ID值。问题原因由于MySQL数......
  • AltiumDesigner导入AutoCAD文件DXF,DWG格式
    这里有一篇关于导入DXF的文章,方法还可以。文章......