本連載はDB2 UDB V8のシステム管理者、およびアプリケーション開発者のために、パフォーマンス・チューニングに必要な技法を紹介する。記事の原文はIBM developerWorksで2004年4月に公開された「Best practices for tuning DB2 UDB v8.1 and its databases」で、DB2の設計、配置、構成、SQL、運用管理、モニタリングといった内容を、実践的な操作を中心に解説している。想定する読者はDB2データベース管理の中級レベルのスキルを持っているユーザーである。スクリーン・ショットなど一部のコンテンツは、日本語版のものに差し替えている。(編集局)
「設計アドバイザー」のおかげで、索引を設計する負担が大幅に減りました。「設計アドバイザー」は、特定のSQLワークロード(つまりSQLステートメントの集まり)に対して索引を推奨したり評価したりするために使われます。これについては、第6回で説明します。
それでもなお、索引に関して注意すべき点がいくつかあります。
クラスタ索引を作成すると、表の中の行を、希望する結果セットと同じ物理順序で並べることができます。クラスタ索引は、CREATE INDEXステートメントのCLUSTERオプションを使って作成します。揮発性表に対してクラスタ索引を作成してはいけません。その索引が使われることはないからです。最適なパフォーマンスのためには、小さなデータ型(integerやchar(10)など)、ユニーク列、および範囲検索で最も多く使われる列に対して索引を作成します。
クラスタ索引は、データ・ページに対するより直線的なパターンのアクセスとより効率的なプリフェッチを可能にし、ソートの必要性を減らします。つまり、挿入(INSERT)にかかる時間は長くなりますが、選択(SELECT)にかかる時間は短くなります。クラスタ索引を使用する場合は、多くの挿入を行えるように、データ・ページおよび索引ページのフリー・スペースを(PCTFREEのデフォルト値の「10」の代わりに)「15〜35」程度に増やしてください。大量の挿入が行われる表については、単一次元のMDC表(Multidimensional Clustering Table:マルチディメンション・クラスター化表)の使用を検討してください(おそらく、ID列/1000やINT(date)/100などの生成列を使用することになるでしょう)。これにより、行に対する索引ではなく(ディメンションに対する)ブロック索引が作成されます。作成される索引は小さくなり、挿入時のログの競合が大幅に減ります。
読み取り専用表に対する索引の場合は、PCTFREEを「0」に設定します。そのほかの場合は、使用可能なスペースを用意して挿入を高速化するために、PCTFREEを「10」に設定します。クラスタ索引を持つ表の場合は、クラスタ索引が細かくフラグメント化されないようにするために、この値をさらに大きくします。大量の挿入を行う場合は、「15〜35」程度の値が適切です。
索引の両方向スキャンを可能にするには、ALLOW REVERSE SCANSを使用します。これにより、結果セットの昇順および降順の素早い検索が可能になります。この機能をサポートするために内部的な索引構造が変更されることはないため、パフォーマンスに関する悪影響はありません。
INCLUDEを使用すると、索引付きでない列も索引ページ内に含めることができます。これにより、索引のみのアクセスが可能になり、データ・ページをフェッチせずに済みます。
UNIQUEを使用すると、列(または列の集まり)の固有性を効率的に強制できます。
タイプ2索引は、ネクスト・キー・ロッキング(next-key locking)を大幅に削減し、デフォルトの255bytesより大きな索引列の使用を可能にします。また、オンラインREORGとRUNSTATSの両方を可能にし、新しい多次元クラスタリング機能をサポートします。V8では(移行前の)タイプ1索引が表にすでに定義されている場合を除いて、新しい索引はすべてタイプ2索引として作成されます。タイプ1索引からタイプ2索引に変換するには、REORG INDEXESを使います。(次ページに続く)
Copyright © ITmedia, Inc. All Rights Reserved.