技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Oracle --> Oracle ASM存储方式浅析

Oracle ASM存储方式浅析

浏览:3062次  出处信息

   AU

   ASM的最小分配单元,默认是1M,可以在创建diskgroup时指定。在diskgroup中的每个盘都被切分为很多个AU,可以是1, 2, 4, 8, 16, 32, or 64MB。

   File Extent

   由一个或多个AU组成,一个file extent总是在一块磁盘上(不跨磁盘分配AU),这里的file extent和数据库中的extent是不同的,我们可以这样理解,这里的file extent是物理容器,而数据库中的extent是逻辑概念。

   下图是AU和file extent的示意图,可以看到刚开始时一个file extent对应一个AU,到达某个数量级后,一个file extent对应8个AU,Oracle称之为Variable size file extent.

   

   Mirror和Stripe

   ASM如何做mirror和stripe,其实我们可以把ASM想象为一个存储设备,ASM的方式不是常见的磁盘对磁盘作RAID的方式,我猜测是类似于3PAR这种存储所采用的虚拟化方式,我们看看3PAR是如何处理的。3PAR将每块磁盘都切分为256M的单元(称为chunklet),创建logical disk(定义RAID类型),我们假设为RAID 10,系统自动选取不同磁盘上的chunklet先作mirror,然后再在这些mirror后的chunklet pair上做stripe,条带跨在logical disk上的所有物理磁盘,这样做的好处是因为磁盘被切分为很小的单元,可以实现动态负载迁移。而我们通常的存储,是要先固定的选取一些磁盘,比如8块磁盘,然后创建RAID group,然后在RAID group上创建逻辑盘,这种方式RAID group是固定的,除非重建否则没有办法动态调整。

   Oracle ASM也有动态负载迁移的功能,我想Oracle应该是采用差不多的方式,所以Oracle也对磁盘首先划分为AU,AU组成了file extent,然后用file extent来做mirror,但并不是磁盘相同位置的extent来作mirror,Oracle只确保mirror的extent在不同的磁盘或者failure group上。有人问我一个问题,Oracle ASM是RAID10还是RAID 01,我的回答是从AU的角度去看,ASM是RAID 10,因为是先做了mirror,再做stripe。但是如果从磁盘的角度去看,因为不存在两个镜像盘的概念,所以它不是RAID 10,而是介于两者之间的一个东西。假设一个disk group中坏了一块磁盘,这时如果另一个disk group中包含了损坏的disk group上的mirror AU的磁盘也同时损坏,这个ASM就不可以恢复了。但ASM不是RAID 01,因为一个disk group中坏掉一块磁盘,并不意味着整个disk group坏掉,因为RAID 01的概念也是针对于磁盘的。

   ASM的stripe有两种,分别是fine和Coarse,fine的stripe depth是128K,coarse的stripe depth等于AU的大小,默认是1M。Oracle对不同文件的条带大小是不同的,数据文件的条带是1M,而redo等小文件的条带是128K。Oracle的条带是跨在disk group的所有磁盘上,假设某个disk group有8块磁盘,当Oracle需要分配1M的extent时,如果stripe size是128K,则在每块磁盘的AU上分配128K,如果stripe size是1M,则在第一个磁盘上分配一个AU(这时实际上就没有stripe了)。如果Oracle需要分配4M的extent,而stripe size是128K,则在第一个磁盘分配128k,依次类推到第8块磁盘,然后接着从第一块磁盘开始分配,最后每个disk上分配了512K的空间(但是不连续的),而stripe size是1M,则在前四个disk上各分配一个AU。

   从Oracle的角度看,extent是逻辑连续的,而ASM则根据stripe将其分散在不同的物理磁盘上,由ASM来维护AU,file extent,Oracle extent的对应关系,其实ASM就是一个存储管理软件。

建议继续学习:

  1. HFile存储格式    (阅读:14415)
  2. 我对技术方向的一些反思    (阅读:9688)
  3. 淘宝图片存储架构    (阅读:9647)
  4. 海量小文件存储    (阅读:7386)
  5. HBase技术介绍    (阅读:6582)
  6. 存储基础知识之——硬盘接口简述    (阅读:5925)
  7. 在perl中连接和使用sqlite做数据存储    (阅读:4919)
  8. 如果用户在5分钟内重复上线,就给他发警告,问如何设计?    (阅读:4815)
  9. Redis新的存储模式diskstore    (阅读:4353)
  10. HTML5本地存储初探(二)    (阅读:4337)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1