Oracle Exadataのストレージインデックス機能とは?仕組みとI/O削減効果を解説
Oracle® Exadata®システムは、データベースパフォーマンスを大幅に向上させる「ストレージインデックス(Storage Index)」という機能を備えています。ストレージインデックスは、主要な統計情報を保持するメモリ内の構造体であり、すべての行を読み込む前にまずインデックスを確認して対象データを絞り込むことで、ディスクI/O操作やクエリ処理を高速化します。
ストレージインデックスに関する重要な注意点として、ExadataでI/O削減効果を得るには、インデックスデータがセルサーバーのリージョンインデックスのメモリ構造に事前にロード(プライミング)されている必要があるという点が挙げられます。そのため、初めてクエリを実行した時点では、リージョンインデックスに該当データが存在しないため、ストレージインデックスによるI/O削減効果は期待できません。
ストレージインデックスの仕組み
ストレージインデックスの主な目的は、Exadata Smart Scanのリクエスト処理に必要なディスクI/O量を削減することです。実際にスキャンされた行数を基準にすることで、ストレージインデックスから得られるI/O削減効果を測定できます。
ストレージインデックスが使用されるのは、以下の条件を満たす場合です。
- ダイレクトパス読み取り(direct-path read)操作が実行されている
- クエリに述語(WHERE句)が含まれている
- 基盤となるASM(Automatic Storage Management)ディスクグループに
cell.smart_scan_capable=TRUE属性が設定されている
つまり、ストレージインデックスは、述語を含むSQL文に対してExadata Smart Scanを補完する役割を果たします。また、クエリ述語の列に対してデータが適切に順序付けされている場合に、最大のパフォーマンス向上効果が得られます。
Oracle Exadataアーキテクチャにおける位置づけ
設計の観点から見ると、ストレージインデックスは従来のOracle B*Treeインデックスなどのインデックスタイプとは根本的に異なります。ストレージインデックスは、データベース内にセグメントとして格納される物理的な構造ではなく、Exadataのストレージセル上に存在するメモリ構造です。
従来のインデックスの目的が表内の行を迅速に検索することにあるのに対し、ストレージインデックスの目的は、インデックスの値から要求されたデータが該当行に含まれていないと判断できる場合に、セルサービスソフトウェアへ物理的な行読み取りをスキップするよう指示する、非常に効率的な手段を提供することにあります。
ストレージ領域のデータが、クエリ述語でよく使われる列に関して適切に順序付けされていれば、Cell Server(CELLSRV)プロセスは物理I/O要求をバイパスし、ディスクI/Oを節約できます。この効果は、システム統計「cell physical IO bytes saved by storage index」によって測定可能です。
一方、データが適切に順序付けされていない場合、各ストレージ領域に特定の列の幅広い値が混在している可能性が高くなるため、ストレージインデックスの効果は限定的またはほぼゼロとなります。従来のB*Treeインデックスと同様に、クラスタリング(データの物理的な整列度合い)はストレージインデックスにおいて重要な考慮点です。
興味深い点として、ExadataのCELLSVRプロセスは、クエリの述語値が各ストレージ領域のリージョンインデックスで追跡されている最小値・最大値の範囲外にある場合にのみこれらを活用します。ストレージ領域が実際に追跡範囲内のデータを含んでいるかどうかは判定されません。
具体例で見るストレージインデックスの動作
あるストレージ領域に、テーブルの10行分のデータが格納されているとします。この中にFIRST_NAMEという列があり、領域には「john」「anto」「max」「leigh」「theo」「rachel」「lauren」「bob」「denise」「jen」という名前の行が含まれていると仮定しましょう。
FIRST_NAME="chris"で検索した場合:「chris」はアルファベット順で「anto」と「theo」の間に位置するため、既存のストレージインデックスではこの領域へのアクセスを排除できません。FIRST_NAME="victor"で検索した場合:この値は追跡範囲の最小値・最大値の外側にあるため、CELLSVRはこのストレージ領域への物理I/Oをバイパスします。
このことから、ストレージインデックス機能は(I/O要求の発行を許可するという意味で)誤検出(false positive)を返すことはあっても、見落とし(false negative)を返すことは決してない、ということが分かります。
I/Oのバイパスは物理読み取りのスキップを意味し、結果として処理時間の短縮につながります。次の図は、ストレージインデックスの動作を論理的に表現したものです。
画像出典: John Clarke著『Oracle Exadata Recipes』
まとめ
Exadataは、アプリケーションの利用状況に応じて時間ベースのストレージインデックスを自動的に維持します。Exadata Database Machine管理者(DMA)がストレージインデックスの動作に直接介入できる余地は少なく、データの並べ替えによって活用を促したり、アプリケーションのクエリ述語を見直したりする程度にとどまります。
ストレージインデックスの活用を検討すべき主なケースは以下の通りです。
- ダイレクトパス読み取り操作を行う場合
- スマートスキャン(Smart Scan)を利用する場合
- クエリに述語(WHERE句)が含まれる場合
ストレージインデックスは、Oracle Exadataが提供する最も知的な機能のひとつであり、最速かつ最適化された形でのデータ検索を支えています。
本記事に関するご意見やご質問は、フィードバックタブよりお寄せください。
専門家による環境の最適化・管理・構成サポート
RackspaceのApplication Services(RAS)のエキスパートは、幅広いアプリケーションポートフォリオにわたり、以下のプロフェッショナルサービスおよびマネージドサービスを提供しています。
- eコマースおよびデジタルエクスペリエンスプラットフォーム
- ERP(Enterprise Resource Planning)
- ビジネスインテリジェンス(BI)
- Salesforce CRM(Customer Relationship Management)
- データベース
- メールホスティングおよび生産性向上ツール
Rackspaceがお約束する価値は以下の通りです。
- 中立的な専門知識:モダナイゼーションの道のりをシンプルにし、即座に価値を発揮する機能に焦点を当てて伴走します。
- Fanatical Experience™:「Process first. Technology second.®」のアプローチと専任テクニカルサポートを組み合わせ、包括的なソリューションを提供します。
- 比類なきポートフォリオ:豊富なクラウド経験を活かし、適切なクラウドに適切なテクノロジーを選択・導入するお手伝いをします。
- アジャイルなデリバリー:お客様の現在地に合わせて柔軟に対応し、お客様の成功を私たち自身の成功と捉えます。
導入をご検討の方は、ぜひチャットでお気軽にご相談ください。
-
Oracle Autonomous Database DedicatedとExadataクラウドインフラストラクチャの徹底解説
本記事では、Oracle® Autonomous Database DedicatedおよびExadata®クラウドインフラストラクチャに関する情報を、複数の公式資料をもとにわかりやすく解説します。 はじめに Oracle Autonomous Database Technical Overviewによると、「Oracle Autonomous Databaseは、クラウドの柔軟性と機械学習の力を組み合わせ、データ管理をサービスとして提供します」とされています。さらに同ドキュメントには、「Oracle Autonomous Databaseには、Oracle ExadataおよびExadata
-
Windows 10 バージョン1909(2019年11月更新)のダウンロードとインストール方法を徹底解説
Microsoftは2019年11月12日、Windows 10の最新機能更新プログラムであるバージョン1909(2019年11月の更新)をリリースしました。その後数日のうちに、すべてのユーザーがWindows Update経由でこの更新プログラムをダウンロード・インストールできるようになります。 Windows 10バージョン1909は、バージョン1903と同じシステムファイルを共有しているのが特徴です。つまり、バージョン1909へのアップデートとは、すでにPCにインストール済みでありながら休止状態となっていた新機能を有効化することを意味します。これは、2019年10月8日に配信されたWin