首页 > 数据库 > Oracle > 正文
3.4.5 Interleaving griddisk
2015-11-03 15:41:52     我来说两句      
收藏    我要投稿

在传统griddisk的创建过程中,一块cellDisk被分成多个部分,首先会在Cell盘的最外圈划分一定的区域创建以data为前缀的gridisk,这一部分区域是磁盘访问速度最快的区域,被称为hot zone。在ASM中,这些griddisk被用于创建DATA磁盘组,用来存放数据库的数据文件。接下来创建以reco为前缀的griddisk,这一部分是磁盘访问速度较慢的区域,被称为cold zone,在ASM中,这一部分griddisk被用来创建RECO磁盘组,从而存放flash recovery area以及archived log。当然,通常情况下还有一个称为DBFS的磁盘组,这个磁盘组用来存放RAC使用的OCR和voting disk,以及用来创建数据库文件系统DBFS。DBFS使用的griddisk位于磁盘的最内圈,访问速度是最慢的。并不是所有的盘上都可以创建以dbfs为前缀的griddisk,前两块磁盘并没有创建以dbfs为前缀的griddisk,因为这一部分空间已经被cell的操作系统使用了。

图3-11的左边是传统的griddisk,在这块磁盘中,griddisk 1位于外圈,访问速度最快;griddisk 2位于内圈,访问速度相对较慢。


 

除了传统的griddisk以外,还有一种特殊的griddisk称为interleaved griddisk。

interleave本身的意思是交织、交错。图3-11的右侧就是interleaved griddisk了。

interleave的过程实际上是在创建celldisk的时候发生的,一块interleaved griddisk的容量来自两个方面。图3-11右侧griddisk 3的空间就是由最外圈部分的浅灰色区域以及中间部分的深灰色区域拼凑而成,同理griddisk 4就是由次外侧的深灰色区域以及最内侧的深灰色区域组成。

再来看一个具体的实例。图3-12为一个容量为600GB的高性能(HP)磁盘(实际可用的celldisk空间为558GB),在创建celldisk的时候制定了interleaving为normal_redundancy,并且创建了两块griddisk,其中一块名为data1_interleaving_test,大小为200GB,另一块名为data2_interleaving_test,大小为358GB。


 

通过图3-12可以清楚地看到每块griddisk的构成,首先是interleaving属性为normal redundancy的celldisk,它将celldisk的空间划分为两块面积均等的部分,即两部分各占50%的空间(如果其属性为highredundancy,则会分成三个均等分,即各占33.33%的空间)。然后,在创建griddisk的时候会从各个部分中取一半出来(即50%的一半),例如data1_interleaving_test的大小是200GB,那会从其中的一个50%中取100GB,从另外一个50%中再取100GB(图3-12中标注的两个50%),data2_interleaving_test的情况类似。

可能有读者还是不明白,interleaving griddisk到底有何用处,这种分法究竟有何目的呢?

其实,大多数情况下,interleaved只是性能折中的一种方案。传统的griddisk的处理方式更加极端,使用最外圈创建出来的griddisk,其性能可能是使用最内圈创建出来的griddisk的好几倍,这会导致使用内圈创建出来的gridisk性能比较糟糕,在某些场景下这可能是不适用的,例如在某些对ASM磁盘要求性能比较均衡,且归档量比较大的数据仓库应用中。

那么interleaving griddisk又有什么好处呢?

我们知道,在ASM的normal redundancy中,每一个分配的extent都有一个primary copy和一个secondary copy,它们分别称为primary extent和secondaryextent。如果需要读取这个extent的内容,则默认会从primary extent中读取,而不会从secondary copy读取。如果使用了interleaving griddisk,则会默认将primary extent放置在外圈的那50%空间中,secondary extent则放置在内圈的50%空间中,因为外圈的访问速度较内圈快,所以这样做在一定程度上就能提高ASM读取数据的速率。

下面简单对比普通的griddisk和interleaving griddisk的创建过程,以便加深读者对interleaving grididk的认识。

首先创建普通的celldisk:

CellCLI> create celldisk all
CellDisk FD_00_cell1 successfully created
CellDisk FD_01_cell1 successfully created
CellDisk FD_02_cell1 successfully created
CellDisk FD_03_cell1 successfully created
CellDisk CD_disk01_cell1 successfully created
CellDisk CD_disk02_cell1 successfully created
CellDisk CD_disk03_cell1 successfully created
CellDisk CD_disk04_cell1 successfully created
CellDisk CD_disk05_cell1 successfully created
CellDisk CD_disk06_cell1 successfully created
CellDisk CD_disk07_cell1 successfully created
CellDisk CD_disk08_cell1 successfully created
CellDisk CD_disk09_cell1 successfully created
CellDisk CD_disk10_cell1 successfully created
CellDisk CD_disk11_cell1 successfully created
CellDisk CD_disk12_cell1 successfully created

查看任意一块celldisk的详细属性:

CellCLI> list celldisk CD_disk01_cell1 detail
 name:            CD_disk01_cell1
 comment:         
 creationTime:    2013-05-22T14:16:59+08:00
 deviceName:      /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 devicePartition: /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 diskType:        HardDisk
 errorCount:      0
 freeSpace:       944M
 freeSpaceMap:    offset=48M,size=944M
 id:              03a9c752-0553-4f06-82e0-4adb017e04d2
 interleaving:    none
 lun:             /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 physicalDisk:    /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 raidLevel:       "RAID 0"
 size:            992M
 status:          normal

在笔者的测试环境中,每块celldisk的空间为992MB。请留意正常情况下其freespace、freepaceMap和interleaving的值。freespace为一块celldisk实际可用的空间,计算方式为:992M-48M=944MB。因为默认情况下没有指定interleaving的属性,所以其属性为none。然后创建interleaving为normal冗余的celldisk:

[root@cell ~]# cellcli -e create celldisk all  interleaving='normal_redundancy'
CellDisk FD_00_cell1 successfully created
CellDisk FD_01_cell1 successfully created
CellDisk FD_02_cell1 successfully created
CellDisk FD_03_cell1 successfully created
CellDisk CD_disk01_cell1 successfully created
CellDisk CD_disk02_cell1 successfully created
CellDisk CD_disk03_cell1 successfully created
CellDisk CD_disk04_cell1 successfully created
CellDisk CD_disk05_cell1 successfully created
CellDisk CD_disk06_cell1 successfully created
CellDisk CD_disk07_cell1 successfully created
CellDisk CD_disk08_cell1 successfully created
CellDisk CD_disk09_cell1 successfully created
CellDisk CD_disk10_cell1 successfully created
CellDisk CD_disk11_cell1 successfully created
CellDisk CD_disk12_cell1 successfully created

在没有创建任何griddisk之前,来看一下celldisk的信息:

CellCLI> list celldisk CD_disk01_cell1 detail
 name:            CD_disk01_cell1
 comment:         
 creationTime:    2013-05-22T14:30:58+08:00
 deviceName:      /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 devicePartition: /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 diskType:        HardDisk
 errorCount:      0
 freeSpace:       944M
 freeSpaceMap:    offset=48M,size=944M
 id:              bfec4ef8-faaa-482b-b925-9030ac27423c
 interleaving:    normal_redundancy
 lun:             /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 physicalDisk:    /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 raidLevel:       "RAID 0"
 size:            992M
 status:        normal

注意这里的interleaving属性变为:normal_redundancy。

另外freespace显示还有944MB的空间可用,即其可用地址空间为(offset 48M,offset 992M),合计为944MB。

接下来在celldisk CD_disk01_cell1中创建一块大小为500MB的interleaving griddisk:
CellCLI> create griddisk data_CD_disk01_cell1 celldisk=CD_disk01_cell1, size=500M
GridDisk data_CD_disk01_cell1 successfully created
再次查看celldisk:

CellCLI> list celldisk CD_disk01_cell1 detail
 name:            CD_disk01_cell1
 comment:         
 creationTime:    2013-05-22T14:30:58+08:00
 deviceName:      /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 devicePartition: /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 diskType:        HardDisk
 errorCount:      0
 freeSpace:       448M
 freeSpaceMap:    offset=288M,size=224M
                  offset=768M,size=224M
 id:              bfec4ef8-faaa-482b-b925-9030ac27423c
 interleaving:    normal_redundancy
 lun:             /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 physicalDisk:    /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 raidLevel:       "RAID 0"
 size:            992M
 status:          normal

可以看到,在使用了500MB空间以后,celldiskCD_disk01_cell1的可用空间只剩下448MB了,这部分剩余空间分为两段,分别是(offset 288MB,offset 512MB)以及(offset 768MB, offset 992MB)这两段地址空间,每段可用空间均为224MB,合计为448MB。

继续创建一块大小为300MB的griddisk:

CellCLI> create griddisk data_CD_disk01_cell2 celldisk=CD_disk01_cell1, size=300M
GridDisk data_CD_disk01_cell2 successfully created

然后查看celldisk中的可用空间信息:

CellCLI> list celldisk CD_disk01_cell1 detail
 name:            CD_disk01_cell1
 comment:         
 creationTime:    2013-05-22T14:30:58+08:00
 deviceName:      /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 devicePartition: /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 diskType:        HardDisk
 errorCount:      0
 freeSpace:       160M
 freeSpaceMap:    offset=432M,size=80M
                  offset=912M,size=80M
 id:              bfec4ef8-faaa-482b-b925-9030ac27423c
 interleaving:    normal_redundancy
 lun:             /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 physicalDisk:    /opt/oracle/cell11.2.3.2.1_LINUX.X64_130109/disks/raw/disk01
 raidLevel:       "RAID 0"
 size:            992M
 status:          normal

在创建了一块500MB和一块300MB的griddisk以后,celldisk CD_disk01_cell1的可用空间为160MB,这160MB分别分布在(offset 432MB,offset 512MB)以及(offset 912MB,offset 992MB)这两段地址空间中,同时也可以推测到griddisk data_CD_disk01_cell2所占用的空间分布在(offset 288MB,offset 432MB)以及(offset 768MB,offset 912MB)区间。

interleaving griddisk支持对其进行resize,可以使用以下方式对interleaving griddisk的大小进行调整:

CELLCLI> alter griddisk griddisk_name size=actualsize

例如,要将data_CD_disk01_cell2的大小调整为400MB,就可以使用如下命令进行调整:

CELLCLI> alter griddisk  data_CD_disk01_cell2 size=400M

不过执行此命令前端命令行会挂起,直到resize完成。也可以加上nowait选项,命令行会立即返回,但是实际的resize过程会放在后台来完成:

CELLCLI> alter griddisk  data_CD_disk01_cell2 size=400M nowait
执行过程中查看griddisk的lastResizeStatus,如果正在运行,则为working:
CellCLI> list griddisk data_CD_disk01_cell2 attributes lastResizeStatus
                             working

如果执行完成,则状态变为complete:

CellCLI> list griddisk data_CD_disk01_cell2 attributes lastResizeStatus
                              complete

同时可以使用如下命令来查看resize的完成时间:

CellCLI> list griddisk data_CD_disk01_cell2 attributes lastResizeTime

如果失败,则可用如下命令来查看错误信息:

CellCLI> list griddisk  data_CD_disk01_cell2  attributes resizeError

并且每一次resize都会在cell的alert中有一条对应的记录,如果发生错误,则会记录对应的错误信息。例如最常见的错误信息一般都是空间不足导致无法进行resize:

CellCLI>  alter griddisk   data_CD_disk01_cell2 size=100G

CELL-02661: The grid disk resize operation has failed for data_CD_disk01_cell2: actual griddisk size is different from requested ( may be because of insufficient  space for the specified allocation).

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.4.4 Griddisk
下一篇:3.4.6 Exadata ASM 磁盘管理
相关文章
图文推荐
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站