Oracle ASM


(一)ASM概述

        提到Oracle ASM,相信大家都有熟悉又陌生的感覺,熟悉在於目前11g ARC數據庫基本都使用ASM,陌生在於平時只是基本的使用,對ASM了解並不全面。例如數據庫實例是如何與ASM交互與分工的、ASM存在哪些特性、數據庫各種文件是怎樣存放於ASM存儲中、他的元數據是怎么存放的。

        Oracle 10g之前,存儲設備的使用情況:UNIX/Linux操作系統上安裝邏輯卷管理器(LVM),通過LVM將多個磁盤做成卷組,在卷組上划分邏輯卷(logical volume),然后在邏輯卷上創建文件系統,RAC環境下需要第三方共享集群軟件。Oracle 10g之后引入的專用文件系統ASM,為數據庫文件的管理提供了很好的支持。DBA能夠完全在Oracle框架內執行許多任務,利用ASM來將一組磁盤轉換成一個可伸縮的和高性能的文件系統/卷管理器。ASM磁盤組提供了直接作為原始設備來訪問這個空間,並提供文件系統的便利性和靈活性。

        ASM對DBA有許多好處,使用ASM可以避免:

  •  I/O性能優化
  •  數據文件移動和重新組織
  • 文件名管理
  • 邏輯卷管理
  • 文件系統管理
  • 集群文件系統管理
  • 裸設備管理

使用ASM可以顯著減少:

  • 邏輯單元號(LUN)管理,邏輯單元數量較少,大小較大
  • 數據庫管理員對系統管理員的依賴性
  • 手動執行任務時可能發生的錯誤

(二)RAC環境下的ASM結構

        RAC環境下的ASM結構如圖:


                                                             圖1. RAC環境下的ASM結構

ASM的出現是為RDBMS管理文件存儲,ASM中適合存放的文件類型包括:數據文件(data file)、控制文件(control file)、重做日志文件(redo log file)、歸檔日志文件(archive log file)、閃回日志文件(flashback log file)、參數文件(spfile)、RMAN備份以及block tracking file、datapump文件。

ASM不會代替RDBMS去實施I/O讀寫,很多人對這一點存在誤解,認為RDBMS發送I/O請求給ASM,ASM去執行I/O,這樣的想法是錯誤的。ASM只負責將存儲空間地址返回給RDBMS,真正的I/O還是會由RDBMS進程去完成,和不用ASM的裸設備一樣,因此ASM不是I/O的中間層,也就不存在因為ASM而出現I/O瓶頸。

(三)ASM實例

        ASM實例的主要任務之一就是管理ASM metadata元數據。ASM instance在10.2中使用與RDBMS一樣的二進制軟件,到11.2中分開獨立實例,它類似於ORACLE RDBMS INSTANCE,有其SGA和大多數后台進程。

ASM Instance結構如下圖:

  

                                                          圖2.ASM Instance結構圖

(1)ASM Instance中的內存結構主要包括4個部分:

  • Share Pool:用於元數據信息
  • Large Pool:用於並行操作ASM

       SQL> show parameter large_pool_size

       NAME                            TYPE         VALUE

       ------------------------------- -----------  ------------------------------

       large_pool_size                 big integer  12M

  • ASM高速緩存:用於重新平衡操作期間讀取和寫入塊
  • Free Memory:可用的未分配內存

(2)ASM的主要進程:

  • RBAL:在搜索過程中打開所有設備文件並協調重新平衡活動
  • ARBn:一個或多個從屬過程,用於執行重新平衡活動
  • GMON:負責管理磁盤活動,例如刪除或脫機以及提高ASM磁盤兼容性
  • MARK:根據需要將ASM分配單元標記為過時

此外,ASM Instance還有一下進程:

  • ARCn:歸檔進程
  • CKPT:檢查點進程
  • DBWn:數據庫寫進程
  • DIAG:診斷進程
  • Jnnn:作業隊列進程
  • LGWR:日志寫進程,ASM實例的SGA不包含log buffer,該實例也不使用聯機重做日志文件,ASM實例的LGWR進程將事件記錄信息復制到ASM磁盤組。
  • PMON:進程監視進程
  • SMON:系統監視進程
  • PSP0:進程衍生進程
  • QMNn:隊列監視進程
  • RECO:恢復器進程
  • VKTM:虛擬計時器進程

對於ASM實例,這些進程執行的任務與數據庫實例中的不同。例如,ASM實例的SGA不包含日志緩沖區,該實例也不使用聯機重做日志,ASM實例中的LGWR進程將事件記錄信息復制到ASM磁盤。

如果ASM是以集群方式建立的,則將在ASM實例中運行與集群管理相關的附加進程。其中一些進程如下:

  • LMON:全局入隊服務監視器進程
  • LMDn:全局入隊服務守護進程
  • LMSn:全局高速緩存服務進程
  • LCKn:鎖定進程

(四)初始化參數

ASM由參數文件控制,通常設置的參數包括:

  • instance_type:對於asm實例來說,要設置成asm,對於數據庫,則設置成RDBMS
  • ASM_POWER_LIMITE:默認為1,表示ASM磁盤組在進行rebalance時的並行度,值從1到11,1最慢,該參數可動態修改alter system set asm_power_limit=5;
  • ASM_DISKSTRING:是一個與操作系統有關的值,ASM使用它來限制搜索時考慮的磁盤集。默認為空字符串,表示ASM查找系統中所有ASM擁有讀寫權限的所有設備;
  • ASM_DISKGROUP:表示啟動實例時,自動Mount那些磁盤組,可以寫多個磁盤組
  • MEMORY_TARGET:默認自動啟動內存管理,即使未明確設置MEMORY_TARGET參數也是如此,該參數建議不小於1536M。

通常,這幾個參數的值如下:

asm_diskgroups                                           string     

asm_diskstring                              string     

asm_power_limit                            integer     1

asm_preferred_read_failure_groups         string 

memory_target                              big integer  0

(五)數據庫實例與ASM實例的交互

        例如,一個數據文件的創建,數據庫實例與ASM實例是怎么交互分工來完成的?

 

                                                                 圖3.數據庫實例與ASM實例交互

文件創建過程如下:

1.用戶在RDBMS發出create file命令,RDBMS會發起一個與ASM實例的連接,RDBMS端這個連接是ASMB后台進程,而ASM端則是個前台進程,接着,創建文件的指令通過這個鏈接提交給ASM實例;

2.ASM根據創建文件的指令,從磁盤中分配AU,ASM會根據指定的模板(template)或diskgroup默認的template來決定文件的冗余、條帶策略;

3.AU分配完成后,ASM就把文件的Extent map發送給RDBMS;

4.RDBMS發起I/O操作,初始化(格式化)這個ASM文件;

5.初始化完成后,RDBMS向ASM發送commit請求,ASM把相應的allocation table、file directory、alias directory異步寫回磁盤;

6.提交確認會隱式關閉該文件。將來發生I/O時,數據庫實例需要重新打開該文件。

注意:用戶在讀寫數據時,第4步不同,其它均相同

        經常有人問,數據庫實例使用ASM作為存儲,只需要在文件名中加上磁盤組名即可,而在數據庫中沒有ASM相關的靜態配置,那么是怎么找到ASM磁盤組的?

其實ASM實例掛載磁盤組后,ASM會把disk group、asm instance name、oracle home path等信息注冊到CSS,當數據庫實例打開或創建名字以“+”開頭的文件時,它會通過CSS來查看disk group和mount該DG的ASM實例的信息,再通過CSS中這些信息構造connect string連接ASM實例的。

ASM概念圖如下:

 

                 圖4.數據庫邏輯結構與ASM物理結構的關系

(六)磁盤組、磁盤、AU、ASM文件、EXTENT MAP

(6.1)ASM磁盤組(ASM diskgroup)

一個Disk Group由多個ASM Disk組成,該Diskgroup空間使用信息的元數據均完整的包含在這個磁盤組中,通過v$asm_diskgroup視圖查看磁盤組信息。

 SQL> select * from v$asm_diskgroup;

GROUP_NUMBER    NAME        SECTOR_SIZE  BLOCK_SIZE  ALLOCATION_UNIT_SIZE   STATE        TYPE      TOTAL_MB    FREE_MB     COLD_USED_MB  USABLE_FILE_MB  VOTING_FILES
------------    ---------   -----------  ----------  --------------------   ----------   ------    ----------  ----------  ------------  --------------  ------------
           1    ARC         1024         4096        1048576                CONNECTED    EXTERN    204800       178612     26188         178612           N
           2    DATA        1024         4096        1048576                CONNECTED    EXTERN    2048000      1523261    524739        1523261          N
           3    OCRVOTE     1024         4096        1048576                MOUNTED      EXTERN    6144         5716       428           5716             Y

我們可以看到一共有3個DG,名字分別為ARC、DATA、OCRVOTE,磁盤組的Block Size大小為4096b(4kb),AU大小為1Mb,STATE狀態有CONNECTED,說明數據庫實例正在連接使用該DG;狀態為MOUNTED,說明DG已經掛載,隨時可以使用。TYPE類型顯示為外部冗余,總容量和空閑容量在這也有顯示。

磁盤組冗余有三種選擇:

  • External Redundancy:沒有Fialure Group,不提供任何鏡像;
  • Normal Redundancy:至少要求2個Failure Group,默認支持雙向鏡像;
  • High Redundancy:要求3個Failure Group,默認支持三向鏡像。

(6.2)ASM磁盤(ASM disk)

對於ASM而言LUN Disk可以是裸設備也可以直接是塊設備,可以通過v$asm_diskgroup來查看磁盤信息:

SQL> select * from v$asm_disk;
 
GROUP_NUMBER  DISK_NUMBER  MOUNT_STATUS  MODE_STATUS  LIBRARY    OS_MB      TOTAL_MB  FREE_MB  NAME           FAILGROUP      PATH                VOTING_FILE  SECTOR_SIZE   FAILGROUP_TYPE
------------  -----------  ------------  -----------  -------    --------   --------  -------  -------------- ------------   ------------------  -----------  -----------   --------------
           3  0            CACHED        ONLINE       System     6144       6144      5716     OCRVOTE_0000   OCRVOTE_0000   /dev/rdisk/disk18   Y            1024          REGULAR
           1  0            CACHED        ONLINE       System     204800     204800    186864   ARC_0000       ARC_0000       /dev/rdisk/disk19   N            1024          REGULAR
           2  0            CACHED        ONLINE       System     1024000    1024000   761637   DATA_0000      DATA_0000      /dev/rdisk/disk20   N            1024          REGULAR
           2  1            CACHED        ONLINE       System     1024000    1024000   761624   DATA_0001      DATA_0001      /dev/rdisk/disk21   N            1024          REGULAR

我們可以看到ASM Disk,其中/dev/rdisk/disk19屬於diskgroup1,/dev/rdisk/disk20和/dev/rdisk/disk21屬於diskgroup2,/dev/rdisk/disk18屬於diskgroup3。通過ASM磁盤信息,我們也可以看到磁盤的使用情況。

        創建ASM磁盤的方法主要有:ASMLIB和UDEV。通常不建議使用ASMLIB創建ASM磁盤,缺點有:

              1.對於多路徑設備,需要配置ORACLEASM_SCANORDER及ORACLEASM_SCANEXCLUDE;

              2.因為ASM Instance使用ASMLIB提供的ASM disk,所以增加了額外的層面;

    3.不是每個版本的Linux Kernel都支持ASMLIB;

    4.使用ASMLIB意味着要花費更多的時間去創建和維護。

(6.3)AU

        AU(allocation unit)是Disk Group的分配單元,一個ASM磁盤上的可用空間總是整數倍個AU。在每一個ASM Disk的頭部均有一個表,該表的一個記錄代表ASM Disk的一個AU。

   在創建磁盤組時可以配置AU大小,AU默認大小為1MB,AU足夠小,能夠緩存數據庫,但足夠大,能夠提供高效的訪問。AU的大小可設置為:1,2,4,8,16,32或64MB。

(6.4)ASM文件

        ASM文件由一組分配單元(AU)組成,這些文件只屬於某個磁盤組,不可跨越磁盤組,每個ASM文件都具有唯一的系統生成的名稱,ASM文件的文件名以“+”號開頭,如“+data/orcl/datafile/system.256.689832921”。如果在創建ASM文件時指定了文件的名稱,如“+data/orcl/tbs01.dbf”,則該名稱為ASM文件的別名,ASM會將該別名與實際創建的文件名稱相關聯。

   ASM中可以存放數據文件、日志文件、控制文件、歸檔日志文件等。

(6.5)區映射(EXTENT MAP)

區映射是ASM的Extent指針(pointer)給出了ASM Disk Number和AU號,這就描述了該Extent的物理位置。

 

                           圖5.ASM區映射

文件區與分配單元(AU)之間的關系如下所示。區包含:

  • 1個AU用於前20000個區(0-19999)
  • 4 AUs用於接下來的20000個區(20000-39999)
  • 16 Aus用於40000以上的區

將可變大小的區與大型分配單元結合使用,可滿足非常大的ASM存儲文件的需要。

X$KFFXP是ASM自動存儲管理特性的重要內部視圖,該視圖反應了File Extent Map映射關系。

(七) ASM故障組

    ASM怎么實現冗余,failure group采用同一份數據的多份拷貝,保證不會出現單點錯誤,冗余拷貝單位為Extent。多份冗余拷貝不會存在同一個failure group 的磁盤中,換句話說,一個failure group中只有一份拷貝的數據,不會有第二份。

   failure group又是什么概念呢?個人理解,failure group是diskgroup的一個子集,在創建diskgroup的時候,我們可以指定磁盤組的failure group的數量,如果不指定,則diskgroup中的每個磁盤都是一個failure group。對於冗余級別為external的diskgroup, 只保留一份數據,因此只需要有1個diskgroup即可,對於冗余級別為normal的diskgroup, 需要保留一份數據及其鏡像,因此至少需要有2個diskgroup,對於冗余級別為high的diskgroup, 需要保留一份數據及兩份鏡像,因此至少需要有3個diskgroup。

以下示例,一個normal redundancy的diskgroup中存在8個disk,並使用2個failure group,可以看到每個failure group存一份數據。

 

                      圖6.ASM Normal Redundancy Extents分布圖示

當disk H發生故障時,這個失敗要求在失敗磁盤上的所有的Extent均被修復,Extent3和Extent5會從現存的磁盤中復制到failure group 2中可用的區域。在此例子中,Extent 5被從disk A中復制到disk F,Extent 3從disk拷貝到disk G,最后將失敗的磁盤從diskgroup中drop出去。

 

                      圖7.失效時的磁盤分配

(八)ASM磁盤數據rebalance

ASM怎么平衡組內磁盤的數據?Rebanlance將在diskgroup范圍內將數據在disk上移動,以保證文件均勻分布在diskgroup上的各個磁盤中。一旦diskgroup發生了存儲配置變化,如增加或刪除磁盤,resize會自動出發一次rebanlance。power參數將決定有多少個slave進程參與數據移動。

以下示例Rebanlance。磁盤組diskgroup中有2個磁盤disk A和disk B,這時,我們再增加一個磁盤disk C,這時disk C並沒有數據。在Rebanlance后,三個磁盤數據達到平衡。

                     圖8.ASM磁盤數據rebanlance

 (九) ASM條帶化

在ASM中,條帶化主要有2個用途:

  • 在磁盤組的所有磁盤中執行I/O負載平衡;
  • 改善I/O等待時間

ASM條帶化一共有2種類型,粗粒度條帶化和細粒度條帶化。

(9.1)粗粒度條帶化(主要用於平衡I/O)

        粗粒度條帶化條帶大小固定為AU大小,條帶寬度固定為1。因此,粗粒度條帶化在分配文件時,ASM會在所有磁盤中分布分配單元,有時無法非常平均,但隨着時間的流逝,會變得幾乎相等。下圖顯示了一個具有5個分配單元的文件,這些AU在條帶化之后,分布在一個冗余級別為external的磁盤組中,該磁盤組一共有8個磁盤。

                         圖8.粗粒度條帶化

(9.2)細粒度條帶化(主要用於改善等待時間)

   細粒度條帶化極少使用,默認都是粗粒度。細粒度條帶化條帶大小為128KB(默認),AU大小為1MB(默認),條帶寬度為8。細粒度條帶化將數據區拆分為128KB的塊,然后許多磁盤分布每個區的負載,從而改善特定文件類型的等待時間,默認情況下,細粒度條帶化用於控制文件和聯機重做日志文件。

 例子:具有8個磁盤構成的磁盤組,采用外部冗余的模式,AU大小為1MB,細粒度條帶化條帶大小為128KB,AU大小為1MB。第一個1MB區在8個AU中以128KB條帶形式寫入。因此,1MB數據分布在8個磁盤中,而不是1個磁盤中。

               圖9.第一個1MB區在8個AU中以128KB條帶形式寫入

當第二個1MB區數據進來后,繼續分配在每個磁盤AU的第2個128KB塊中,這種模式一直繼續,直到第1組AU寫滿,然后再分配下一組AU。

                      圖9.第二個1MB區繼續在8個AU中以128KB條帶形式寫入

(十)ASM常用視圖

視圖名稱 x$基表名 描述
 V$ASM_DISKGROUP  X$KFGRP  實施磁盤發現disk discovery和列出磁盤組
 V$ASM_DISKGROUP_STAT X$KFGRP_STAT
 顯示磁盤組狀態
 V$ASM_DISK X$KFDSK,X$KFKID
 實施磁盤發現disk discovery和列出磁盤以及磁盤的使用量
 V$ASM_DISK_STAT X$KFDSK_STAT,X$KFKID
 列出磁盤及度量信息
 V$ASM_FILE X$KFFIL
 列出ASM文件,也包括了元數據信息
 V$ASM_ALIAS X$KFALS  列出ASM的別名,文件和目錄
 V$ASM_TEMPLATE X$KFTMTA
 列出可用的模板及屬性
 V$ASM_CLIENT X$KFNCL
列出連接到ASM實例的會話客戶端
 V$ASM_OPERATION X$KFGMG
列出rebalance重平衡操作
 V$ASM_DISK_IOSTAT X$KFNSDSKIOST I/O統計信息

 

 

【完】

 

 

注:本文整理自雲和恩墨的線上講座,原文:https://wenku.baidu.com/view/752e450fdc36a32d7375a417866fb84ae45cc391.html。感謝作者的分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM