Question & Answer
Question
実動システムで使用するものと類似しているアクセス・プランをテスト・システム上で生成するために、実働システムの統計情報をdb2lookを利用してテスト・システムにコピーしようと考えています。どちらのシステムも非常に多くのデータが含まれているため、runstatsコマンドが実行されると時間がかかるため、db2look -m -r コマンドを使用してrunstatsコマンドが生成されないようにしています。 しかし、db2look -m -r の出力をテスト・システムに適用すると、時々SQL1227Nのエラーが発生することがあります。どのようにこのエラーを回避できますか。
Cause
-r オプションはrunstatsコマンドを含めずにdb2look -mの出力を得るためのものです。しかし、現在のdb2lookの動作としては -r オプションが指定されるとSYSSTAT.COLUMNSやSYSSTAT.INDEXESの情報がリセットされません。その結果、適用先のシステムの既存の統計情報と何らかの不整合(典型的には表のCARDが既に存在するCOLCARDより小さい場合など)を起こすことが時としてあり、SQL1227Nのエラーとなります。
Answer
10.5までのdb2lookコマンドを使用して統計情報の模造を行う際には -r オプションは使わないようにするか、-r オプションを使用する際には手動でSYSSTAT.COLUMNSをSYSSTAT.INDEXESをリセットするUPDATEステートメントを追加して下さい。この制限は10.5よりも後のリリース(V11.1以降)においては変更される予定です。
-rオプションを使わないdb2look -mはほとんどの場合はSQL1227Nが起きないはずですが、依然としてSQL1227Nエラーとなる可能性はあります。それは、db2look -mによって取得した元の統計情報に不整合があった場合です。以下のTechnoteにそのような例が記載されています。
Why COLCARD is sometimes bigger than CARD after RUNSTATS?
http://www.ibm.com/support/docview.wss?uid=swg21985376
Runstats may update unexpected HIGH2KEY and LOW2KEY statistic values which may cause SQL1227N
http://www.ibm.com/support/docview.wss?uid=swg21979066
上記のTechnoteに記載があるように、以下のような非公開のレジストリー変数を設定することで不整合がある統計情報を適用する際のエラーを回避することができます。設定後はインスタンスの再起動が必要です。
db2set DB2_STATISTICS=USCC:0
この変数は9.7FP9, 10.1FP4, 10.5以降で使用することができます。
Was this topic helpful?
Document Information
Modified date:
16 June 2018
UID
swg21992200