REORGのドキュメント のコメント:
[〜#〜]ビルド[〜#〜]
Builds indexes. Updates index statistics.
しかし、私は常にREORG/RUNSTATSをペアリングする必要があるかのように聞いています。 「インデックス統計の更新」がRUNSTATSと同じことを達成することを誰かが確認できますか?
REORG
は、DB2が正確なデータをポイントするのに役立ちます(つまり、インデックスは新しいデータを認識し、削除されたデータを含まないようにする必要があります)。インデックス。また、より効率的なアクセスのために、相互に関連するデータを移動するのにも役立ちます(特にクラスターインデックスの場合に当てはまります)。
RUNSTATS
は、テーブルおよびインデックス内のデータのボリュームや分布に関する更新された統計を収集するために使用されます。この情報はシステムテーブルに格納され、オプティマイザなど、データをクエリするための最適なパスを決定するために使用されます。これは、データが増えるにつれて特に当てはまります。データは、オプティマイザがアクセスパスに以前にはなかったインデックスを含めるように分散する可能性があります(またはその逆で、インデックスを使用しないことを選択します)。 RUNSTATS
は、REORG
の実行方法にも影響を与える可能性があります-少なくとも古いバージョンのDB2では。
私がDB2 DBAから読んだ内容に基づいて、一般的に実行したい
RUNSTATS
REORG
RUNSTATS
最初のRUNSTATS
は、REORG
が適切かつ効率的に機能するのに役立ちます。 RUNSTATS
の後は、ページ上のすべてのデータ移動を考慮して、統計が正確であることを確認するためのものです。読む場所によっては、DB2の新しいバージョンでは、最後のRUNSTATS
は不要であるとDBAが言及している場合があります。これに関する明確な回答は見当たらず、ほとんどのDB2 DBAは上記の順序に従うと聞いたので、当社はその順序を使用することを選択しました(レコードの場合、DB2 LUW 9.7 FP4にあり、移行する予定です。 V 10.1来年いつか)。
また、完全を期すために、一般に統計を更新し、オプティマイザーに影響を与える場合は、DB2を呼び出すすべてのアプリケーションがそれらの新しい最適化を確実に活用できるようにする必要があります。そのため、パッケージのREBIND
は、静的パッケージが更新された統計と最適化されたクエリパスを知っていることを確認し、FLUSH PACKAGE CACHE DYNAMIC
は、Hibernateなどから動的クエリを削除して、更新されたクエリパスでクエリが再バインドされるようにします。 ([〜#〜] note [〜#〜]:z/OSでは、BIND
およびREBIND
オプションがあるようです。おそらくFLUSH PACKAGE CACHE DYNAMIC
はそれらの下にあるか、zで別の名前になっています。)
したがって、最終的には次のようにします。
RUNSTATS
REORG
RUNSTATS
REBIND
パッケージFLUSH PACKAGE CACHE DYNAMIC
(LUW上)またはz/OS上の同等のもの。IBM iでDB2を実行している場合は、そのすべてが処理されます。インデックスはリアルタイムで維持されます。統計は自動的に更新されます。プランは動的に最適化されます。