だから安心!「Oracle ASM」の内部動作を理解しよう
Oracle Database 10gから搭載されている自動ストレージ管理機能「Oracle Automatic Storage
Management(ASM)」は、Oracle
Databaseの目玉機能の1つだ。ストレージ機器の機能に依存せず、高信頼/高可用なシステムを実現できるとあって、すでに世界中で幅広く利用されて
おり、Oracle Real Application Cluster(RAC)環境での利用率は約6割に、Oracle Database
11gでの利用率は約9割に達する。また近年では、Oracle
Exadataを支える技術基盤として多くの企業で利用されている。今回は、Oracle
Database/Exadataのユーザーだけでなく、これらの導入を検討中の方にもぜひ知っておいていただきたいOracle
ASMの動作の仕組みを、日本オラクルの堅田康祐氏(テクノロジー製品事業統括本部 データベースソリューション本部 Sustaining
Engineering プリンシパルエンジニア)と宮永真実氏(テクノロジー製品事業統括本部 アライアンス技術本部 データベース製品技術部
エンジニア)に聞いた。
■ストレージのパフォーマンス改善を自動化する「Oracle ASM」

日本オラクル
テクノロジー製品事業統括本部
データベースソリューション本部
Sustaining Engineering
プリンシパルエンジニア
堅田康祐氏
日本オラクル
テクノロジー製品事業統括本部
アライアンス技術本部
データベース製品技術部
エンジニア
宮永真実氏
■ストレージのパフォーマンス改善を自動化する「Oracle ASM」
データベースのパフォーマンスを考えるうえで、今日、非常に重要なファクターとなっているのがストレージに対するI/O処理である。ストレージのパフォーマンスを大きく改善できれば、それがボトルネックの解消につながり、システム全体の性能も高められるからである。
ストレージに関するパフォーマンス改善策にはいくつかの考え方があるが、よく使われている手法の1つに、ストレージの並列化によ
る処理の分散が挙げられる。Oracle Databaseが利用するストレージに対してそれを実現するのがOracle ASMだ。Oracle
ASMは複数のストレージを束ねることによって帯域を拡大し、それぞれのストレージにI/O処理を効率良く分散することによってパフォーマンスを改善す
る。具体的には、複数のストレージに細かくデータを振り分けて性能向上を図る「ストライピング」により、ストレージのパフォーマンスを引き上げる。また、
データを二重化/三重化してストレージに保存することで可用性を高める「ミラーリング」、ストレージの追加や削除を行う際に自動的にデータを再配置する
「リバランシング」といった機能を備えていることも、Oracle ASMの大きなメリットである。以降、それらOracle
ASMの機構を詳しく見ていこう。
■Oracle ASMによるディスク・アクセスの流れ
Oracle ASMを利用する場合、Oracle
Databaseのインスタンス(データベース・インスタンス)に加えて、Oracle
ASM独自のインスタンス(ASMインスタンス)が立ち上がる。ASMインスタンスの役割は、データが物理ディスクのどの位置に保存されているのかを記録
した「メタデータ」を管理することだ。それぞれのデータベースからストレージにアクセスする際には、このメタデータを参照することになる。
データベースとASMインスタンスが管理するメタデータ、そしてストレージの関係を倉庫管理に例えて図示すると、次のようになる。
図中の倉庫(ストレージ)には、ワインや書類、家財道具(データ)などが収められており、それぞれ専門の倉庫業者(データベー
ス)が荷物の出し入れを行う。どの倉庫に何が保管されているのかは、総合倉庫管理業者(ASMインスタンス)が管理する。各倉庫業者は、総合倉庫管理業者
から、どこに何が保管されているのかが書かれたマップ(メタデータ)を入手し、そのマップに従って倉庫を利用するというわけだ。
Oracle ASMを利用している環境でディスクI/Oが発生した際の処理の流れは、下図のようになる。
データベースからストレージへのI/Oが発生すると、その処理は「Oracle
I/Oレイヤー」に引き渡される。ここまではOracle ASMを使わない場合でも同じだが、Oracle ASMを利用している場合は、Oracle
I/Oレイヤー内の「ASM
I/Oレイヤー」からSGA(システム・グローバル領域)に保存されたエクステントマップにアクセスする。エクステントマップは前述のメタデータに含まれ
る情報の1つで、データの保存場所が書かれたリストである。このエクステントマップをSGAに配信するのがASMインスタンスというわけだ。
この仕組みのポイントは、ディスクI/Oが発生する度にASMインスタンスに問い合わせたり、あるいはASMインスタンスを経由してストレー
ジにアクセスしたりするわけではないことである。SGAに保存されたエクステントマップを参照するものの、SGAはデータベース側のメモリ領域であるた
め、それによってオーバーヘッドが生じることはない。また、SGAを参照した後の処理は通常のディスクI/Oと同じになる。
■ストレージ(ディスク)障害発生時の動作の仕組み
次に、障害発生時のOracle ASMの動作を説明しよう。Oracle ASMにおける障害は、次の2つに大別できる。1つはASMインスタンス自身の障害、もう1つはストレージ(ディスク)の障害だ。
ストレージ(ディスク)障害に関しては、データを二重化、三重化して保護する「ミラーリング」の機能を使って対応する。当然ながら、ミラーリングを利用していない場合はRAID機能に代表されるストレージ側の機能を使用することになる。
ここで、ミラーリング機能を利用している場合のディスク障害時の動作を見てみよう。ミラーリング利用時の書き込みは、2つまたは
3つのディスクに対して処理を行うことになる。このうち、いずれかのディスクで書き込みの失敗を検知すると、当該ディスクをいったんオフラインにする。オ
フラインとは、ディスクとしては認識しているが、データ更新は一時的に停止しているという状態だ。そのうえで、他のディスクへの書き込みが成功している場
合は、データベース側の処理を継続する。
ディスクがオフラインになった場合の対応はいくつか考えられる。完全に故障しているのなら、そのディスクをドロップ、つまりOracle ASMのディスク・グループから外し、残りのディスクで運用を継続するようリバランスを行う。
一方、故障したと思ったが、一度ケーブルを抜き差ししたら問題なく動作したといったケースもあるだろう。Oracle
ASMでは従来、ディスク破損を伴わない一時的なI/O障害でも不要なリバランスが行われていた。そこでOracle Database 11g
R1から追加されたのが、「高速ミラー再同期」と呼ばれる仕組みだ。これは、オフラインになっていたディスクがオンライン状態に復帰すると、そのタイミン
グでオフライン中に発生した更新内容を自動的に同期するというものである。この場合はリバランスが発生しないため、より高速な復旧が可能になるというメ
リットがある。
■ASMインスタンス障害発生時の整合性担保の仕組み
ASMインスタンスが何らかの理由で停止した際に大切なことは、ディスク・グループの整合性を担保することだ。例えば、表領域を
作成する際にはASMインスタンスが新規ASMファイルを作成するが、仮にそのファイルの作成途中でASMインスタンスが停止したとしてもディスク・グ
ループに不整合が起こることなく、その後の処理を継続できる必要がある。当然ながら、Oracle
ASMにはこのような不慮の事態においても、整合性を担保するための仕組みを内部で持っている。
下の図は、10個のアロケーション・ユニットから構成される新しいASMファイルを作成する際の処理の流れを示したものだ。
このとき、ミラーリングを行っている場合なら、「(1)プライマリ・ディスクにデータを書き込む領域(エクステント)を確保す
る」、「(2)セカンダリ・ディスクにデータを書き込む領域を確保する」、「(3)エクステントマップにそれぞれをマッピングする」という3段階の処理が
行われる。
それでは、(1)の処理が終わった直後にASMインスタンスが落ちてしまった場合にはどうなるのか。セカンダリ・エクステントの
確保は行われておらず、さらにエクステントマップにもマッピング情報が書き込まれていないので、このままの状態ではディスク・グループの不整合が起きてし
まうことになる。つまり、上記3つの処理は1セットで「成功」か「失敗」かが担保されなければならない。
こうした事態への備えとして、Oracle ASMは「Active Change
Directory(ACD)」と呼ばれるOracle Database
のREDOログと類似の仕組みを搭載している。必ずセットで実行しなければならない処理をあらかじめACDに登録しておけば、もし処理の途中でASMイン
スタンスが停止しても、再起動後にこのログを適用することで不整合を起こすことなく処理を継続できるのである。
また、「Continuing Operation
Directory(COD)」と呼ばれる仕組みも備えており、こちらはOracle Database
のUNDOログと同様の役割を持つ。Oracle
ASMは、まずACDを適用して最低限、整合性のとれた状態に回復した後、CODに基づいて途中で処理が終わってしまったファイル作成をロールバックする
のである。
なお、ACDとCODを使ったディスク・グループの整合性担保の動作は、Oracle
ASMの自動管理により内部的に行われる。そのため、データベース管理者は、これらの動作を意識した特別な対処を行う必要はない。特にクラスタ構成の場合
は、1つのASMインスタンスが停止した場合でも、自動管理で障害インスタンスを切り離し、残ったノードで通常運用が可能なため、さらに高い可用性を実現
することができる。
このように、Oracle
ASMはストレージのパフォーマンス改善に利用できるほか、システムの可用性を高めるうえでも高い効果を発揮する。また何よりも嬉しいのは、Oracle
Databaseに最適化されており、手間をかけずに利用できる使い勝手の良さだ。ぜひ有効に活用し、パフォーマンス改善と可用性向上、そしてストレージ
管理の負担軽減に役立てていただきたい。
オラクルエンジニア通信:「【セミナー動画/資料】だから安心!「Oracle ASM」の内部動作を理解しよう」
http://blogs.oracle.com/oracle4engineer/entry/material_asm_architecture
http://blogs.oracle.com/oracle4engineer/entry/material_asm_architecture
