クラスタという言葉は、色々な分野で使われています。例えば、英語でstar cluster(星団)は、星の集団のことを 言います。また、コンピュータ クラスタは、一定の範囲内で動作するコンピュータの集団です。その目的としては、 複雑な問題を解決するため(高性能クラスタ)であったり、可用性を高めるため(フェイルオーバクラスタ)であったりします。一般的にクラスタとは、 何らかの集団に関係することであると言えます。
コンピューティングの世界においては、もう1つ別の種類のクラスタがあります。誤解されやすい言葉ですが、それはデータクラスタです。データの クラスタ化とは、少ないIO処理でアクセスできるように、連続的にアクセスされるデータを近くに保存することを言います。データクラスタは、データベース チューニングにおいて、非常に重要な役割を果たします。コンピュータクラスタという言葉は、データベースの話をする上でも重要なものです。これが、 クラスタという単語があいまいになってしまう一因でも あります。「データベースのパフォーマンスを改善するのに、クラスタを使いましょう」という文は、コンピュータクラスタの話をしている可能性も あるし、データクラスタのことかもしれません。この章では、クラスタとは主に データクラスタのことであるとして、話を進めていきます。
協力してください
この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。
SQLデータベースにおける最もシンプルなデータクラスタは、行です。データベースは、ある行の全ての列を可能な限り同じデータベースブロックに 保存します。1つのブロックにデータが収まり切らない時だけがその例外になります。ラージオブジェクト(LOB)型が使われている場合などがそれに 当たります。
インデックスはデータをクラスタ化できます。この原則は、既に第1章1, 「 SQLインデックスの内部構造」で説明しました。 インデックスリーフノードは、近い値が隣同士になるように、インデックスを作った列を並べ替えて保存します。つまりインデックスは、近い値を 行のクラスタとして構成しているわけです。データをクラスタ化するこの機能は、 インデックスの強力さの2つ目として、非常に重要です。
以降の節では、データのクラスタ化のためにどのようにインデックスを使い、またどのようにクエリのパフォーマンスを向上させるかについて、 説明していきます。
この説明が気に入れば、きっと この本も 気に入るはず。