IBM Support

db2look -m の出力を別システムに適用する際にSQL1227Nが起きる

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以降で使用することができます。

[{"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Component":"DB2 Tools - db2look","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"9.8;9.7;9.5;10.1;10.5","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
16 June 2018

UID

swg21992200