MDC(Multidimensional Clustering:多次元クラスタリング)は、複数の次元に沿った、柔軟で、継続的で、自動的なデータのクラスタリングを可能にします。MDCを使用すると、照会のパフォーマンスが向上し、REORGの必要性やINSERT、UPDATE、DELETE時に索引を保守する必要性が大幅に減ります。
MDCは、物理的に表のデータを、複数の次元に沿って同時にクラスタ化します。これは、複数の独立したクラスタ索引を表に持つことと似ています。MDCは主に、大きな表に対する複雑な照会のパフォーマンスを高速化するために使われます。MDCは、各次元におけるクラスタリングを自動的かつ動的に保守するため、REORGを使って索引を再クラスタ化する必要はありません。
MDCが最も有効なのは、範囲述部、等価述部、結合述部を持ち、多くの行にアクセスする照会を実行する場合です。ユニーク列を次元として使用してはいけません。表が必要以上に大きくなってしまうからです。それぞれの次元値の組み合わせ(すなわちセル)を持つ行があまり多くない場合は、多くの次元を使用することは避けてください。最適なパフォーマンスを得るためには、少なくとも、各セルのブロック全体(その表が存在している表スペースのエクステント・サイズと同じ大きさ)を満たすだけの十分な行が必要になります。
MQT(Materialized Query Table:マテリアライズ照会表)を使用すると、OLAP関数のGROUP BY、GROUPING、RANK、ROLLUPを使用する照会のパフォーマンスを改善できます。MQTの使用はユーザーにとっては透過的であり、最適化のためにMQTをいつ使用すべきかはDB2が選択します。MQTは、要求されるグループ化の要約結果を内部的に保守するためにDB2によって使われます。これによりユーザーは、大量のデータを読み進める代わりに、保守されたグループにアクセスして答えを得ることができます。また、MQTをパーティション間で複製すると、それらの情報をパーティション間でブロードキャストする必要がなくなるため、コロケーテッド結合のパフォーマンスが向上します。
30bytes以下の列に対してVARCHARデータ型を使用することは避けてください。多くの場合、スペースが無駄に消費されるからです。そのような列に対しては、VARCHARの代わりにCHARを使用してください。スペースを浪費してしまうと、ボリュームが非常に大きい場合に、照会に時間がかかることがあります。
IDENTITYやSEQUENCEを使用する場合は、デフォルトのキャッシュ・サイズである20以上を使用してください(番号付けにおけるギャップが大きな問題となる場合は除きます)。このようにすると、DBM(DATABASE MANAGER:データベース・マネージャー)に頼らずに必要なときに番号を生成でき、番号の生成に伴うロギングを避けることができます。
VALUE COMPRESSIONおよびCOMPRESS SYSTEM DEFAULTを使用すると、多くのNULL値やシステム・デフォルト値を表が使用する場合に、ディスク・スペースを節約できます。システム・デフォルト値とは、特定の値を指定しない場合に、そのデータ型に対して使用されるデフォルト値です。これは、ボリュームが非常に大きい場合に照会時間を改善するためにも役立ちます。圧縮される列に値を挿入したり更新したりする場合、少しのオーバーヘッドが生じます。
大量の挿入が行われる表に対してAPPEND ONを使用すると、挿入プロセス時にフリー・スペースが検索されることなく、単に表の終わりに行が追加されます。ただし、表の中の行が特別な順序で並んでいることが要求され、REORGを実行する余裕がない場合は、APPEND ONを使用しないでください。
読み取り専用の表や排他アクセスの表については、LOCKSIZEをTABLEに設定します。これにより、行をロックする時間が不要になり、必要なLOCKLISTの量を削減できます。
将来のINSERT、LOAD、REORGのためにフリー・スペースを維持するには、PCTFREEを使用します。デフォルト値は10です。クラスタ索引を持ち、大量の挿入が行われる表の場合は、20〜35に設定してください。APPEND ONを使用している場合は、PCTFREEを0に設定します。
索引スキャンの実行を奨励するには、VOLATILEを使用します。VOLATILEは、表のカーディナリティが、非常に大きなものから空に至るまで大きく変わる可能性のあることを示します。これはオプティマイザに対して、表の統計情報に関係なく、表スキャンではなく索引を使用するように奨励するのに役立ちます。ただし、これが機能するのは、参照される列がすべて索引に含まれる場合や、索引スキャンの中で索引が述部を使用できる場合だけです。
トランザクションの間(つまりCOMMITするまで)ロギングをオフにするには、NOT LOGGED INITIALLYを使用します。
VALUE COMPRESSIONとCOMPRESS SYSTEM DEFAULTは、ALTER TABLEコマンドでも使用可能です。(次回に続く)
Fraser McArthur氏は、分散プラットフォーム(Windows/UNIX)用のDB2 UDBを開発しているIBMトロント研究所のコンサルタントです。同氏はData Management Partner Enablement organizationのメンバーであり、IBMビジネス・パートナーとともに、DB2へのアプリケーションの移行とパフォーマンス・チューニングに取り組んでいます。また同氏は、DB2管理とアプリケーション開発の両方におけるDB2 Certified Solutions Expertです。
Copyright © ITmedia, Inc. All Rights Reserved.