※RAC関連の新機能概要は「連載:徹底解説!Oracle Database 12cのすべて」の中で解説していますので、併せてご参照ください。
Flex ASMで障害点を減らす
ASM(自動ストレージ管理)はOracle Databaseのボリューム・マネージャ兼ファイル・システムとしてディスクを仮想化するための機能です。RACに不可欠な機能と言っても過言ではなく、Oracle Database 11g(以下、11g)以降のRACではおよそ9割がASMを使用しているとも言われています。ASM以外にもRAWデバイス、クラスタ・ファイル・システム、NFSといった選択肢がありますが、12cではRAWデバイスが非サポートになったため、これまで以上にASMの重要性が高まると考えられます。
新機能を説明する前に、ASMの基本について復習しておきましょう。ASMにはストライピング、ミラーリング、リバランシングなど性能と可用性を両立させるための機能が搭載されており、データが格納されている位置をASMインスタンスで管理するという仕組みになっています。この位置情報はエクステント・マップと呼ばれ、データベース・インスタンス(以下、DBインスタンス)がディスクI/Oを行う際に参照されます。これがなければ目的のデータに辿りつけないため、ASMインスタンスは非常に重要な役割を担っていると言えます。
誤解されやすいのですが、「ディスクI/Oが発生するたびにASMインスタンスに問い合わせる」という仕組みではないのでご注意ください。エクステント・マップはDBインスタンスのSGA内にキャッシュされているため、毎回ASMインスタンスに問い合わせる必要はありません。また、「ASMインスタンスを経由してデータにアクセスする」という仕組みでもありません。エクステント・マップさえあればASMインスタンスを経由せず直接ディスクI/Oを実行できるため、オーバーヘッドが出ないようになっています。
ASMにおける真の課題は性能ではなく、「ASMインスタンスに障害が発生するとDBインスタンスも併せてダウンしてしまう」という動作にあります。ASMインスタンスはRAC内の全ノードで起動する必要があるため、ノード数に比例して障害点が増えてしまいます。ASMを使用する上で仕方のないこととは言え、止まらないシステムを目指すRACにおいて障害点が増えてしまうというのは望ましいことではありません。
この課題を解決するために、12cではFlex ASMという構成を採ることができるようになりました。Flex ASMでは、ASMインスタンスとDBインスタンスを同じノードで起動せずに分離できるため、結果的にASMインスタンスの数(=障害点)が少なくなります。デフォルトではクラスタ全体で3つのASMインスタンスが起動するようになっており、以下のように5ノードのクラスタを構成している場合は2ノード分のASMインスタンスを削減できます。なお、ASMインスタンスがないノードは、ネットワークを経由して別ノードにあるASMインスタンスにリモート接続して処理を行います。
Flex ASMは標準機能なので導入にあたっての敷居は高くありませんが、ASMのネットワークが新しく追加されるなど従来のASMから変更された点もいくつかあります。そこで今回は、Flex ASMの性能と可用性についての検証を行ってみます。