IBM Support

[Db2] CTE0310 エラーで索引更新ができない

Question & Answer


Question

Net Search Extender (NSE) の索引更新を実施したら、CTE0310 エラーとなりました。空きスペースはあるように思うのですが、エラーになるのはなぜですか。

Answer

索引更新の前に実施される空きスペース・チェックにおいて、空きスペース不足と判断された可能性があります。


NSE は、デフォルトで索引更新前に空きスペースのチェックを実施します。更新対象となる索引ファイルのサイズの少なくとも 3 倍の空きスペースがファイル・システム上に存在しない場合、チェック時に 以下のような CTE0310 エラーが戻され、更新操作は開始されません。
    CTE0310 Index update is not allowed due to insufficient disk space for index "schema01"."idx01" in database "sample", required disk space: "410******", available disk space: "399******".

    参考 - CTE0310N
事前チェックをスキップさせるには、UPDATE INDEX コマンド実行時に SKIPDISKSPACECHECK オプションを指定します。ただし、SKIPDISKSPACECHECK オプションは V9.7 においては、フィックスパック 5 以降の実装となり、それ以前のフィックスパックでは使用することができません。
SKIPDISKSPACECHECK オプションの使用には以下の問題の発生の可能性をを留意してください。

NSE の索引更新中、索引用のスペースとは別に、作業ディレクトリー用に新たに一時スペースが必要となります。
もし索引更新中に作業ディレクトリーのためのファイル・システムがディスク・スペースを使い果たして一時スペースが使用できない状態となった場合、索引ファイルが破損することがあります。索引ファイルの破損への対処は、索引再作成以外ありません。デフォルトのように SKIPDISKSPACECHECK オプションを指定しなければ、破損を避けるために CTE0310 エラーが出て索引更新を実行しないようにすることができます。
空きスペース・チェックには、以下のような計算式が用いられます。
いくつかの項目の数値を確認すれば、計算式から索引更新に必要なサイズの見積もることができ、適切な対処が可能となります。


空きスペース・チェックの計算式

索引更新前の空きスペースのチェックは、以下の計算式に基づいて行われます。
    必要なスペースのサイズ = ( ( A / B ) × C + A ) × 3

    A = 既存索引ファイルのサイズ
    B = 索引中の文書の数
    C = 索引更新対象となる文書の数
ファイル・システム上の空きスペースが、計算式の結果サイズよりも大きい場合に、索引更新が実行されますが、小さい場合には、CTE0310 エラーとなって索引更新は実行されません。

たとえば、以下のような状態であった場合、計算式の結果は 125,681,160,064 バイト となり、空きスペースに 125,681,160,064 ( 約117 GB) 以上が必要となります。
    A = 40,943,333,006 バイト
    B = 3,901,000 文書
    C = 90,551 文書

    (上記は例となります)

計算式の各項目の確認方法

上記の A, B, C それぞれの項目の確認は、対象のデータベースに接続した状態で、次のように行います。
  • A (既存索引ファイルのサイズ) の確認方法
    対象索引の名前をもとに以下の SELECT ステートメントを実行します

    db2 "select INDEXDIRECTORY, WORKDIRECTORY from db2ext.textindexes where INDNAME = 'テキスト索引名'"

    参考- db2ext.textindexes ビュー


    確認例: (Linux/Unix 上での例となります)

    db2 "select LOGVIEWNAME, INDEXDIRECTORY, WORKDIRECTORY from db2ext.textindexes where INDNAME = 'IDX_CATEGORY_NAME'"
    LOGVIENAME     INDEXDIRECTORY             (略) WORKDIRECTORY  
    -------------- --------------------------      --------------------------------
    LOGIX123456    /DB2/nse/db2inst1/proddb1       /DB2/nse/db2inst1/proddb1/work


    索引データのファイル名は、LOGVIEWNAME の結果から "IX" とそれに続く 6 桁の数値で確認可能です。上記の例では "IX123456" となります。

    SELECT ステートメントの結果から、INDEXDIRECTORY および WORKDIRECTORY でそれぞれ示されたディレクトリーおよびその配下において、該当索引のファイル名を含むファイルの総計をご確認ください。

    上記の例ですと、 /DB2/nse/db2inst1/proddb1 および /DB2/nse/db2inst1/proddb1/work ディレクトリーに含まれる "IX123456"を含む全ての拡張子のファイルに加え、""IX123456" というサブディレクトリー配下の全てのファイルが対象となります。

    サブディレクトリーの配下のファイルのサイズは、 Linux/Unix であれば、以下のように du コマンドを用いる方法があります。

    du -s /DB2/nse/db2inst1/proddb1/IX123456 /DB2/nse/db2inst1/proddb1/work/IX123456

    確認方法、およびコマンドのオプションはお使いの OS にあわせて変更してください。

  • B (索引中の文書の数) の確認方法
    以下の SELECT ステートメントを実行します

    db2 "select INDNAME, TABNAME, COLNAME, LOGVIEWNAME, NUMBER_DOCS from db2ext.textindexes"

    照会結果から、該当索引についての NUMBER_DOCS の項目の数値を確認します。
  • C (索引更新対象となる文書の数) の確認方法
    以下の SELECT ステートメントを実行します

    db2 "select LOGVIEWNAME from db2ext.textindexes where INDNAME = 'テキスト索引名'"

    得られた結果を元に、以下の SELECT COUNT を実行します。

    db2 "select count(*) from db2ext.LOGVIEWNAMEの名前"

    確認例:
    db2 "select LOGVIEWNAME from db2ext.textindexes where INDNAME = 'IDX_CATEGORY_NAME'"
    LOGVIEWNAME
    ----------------------------- (..略..)
    LOGIX123456
    LOGIX123456


    db2 "select count(*) from db2ext.LOGIX123456"




関連情報

A formula for calculating the amount of free space needed to have the Net Search Extender (NSE) update operation complete without the CTE0310 error
[DB2 LUW] Net Search Extender 問題発生時の取得資料
Net Search Extender Knowledge Collection
パスポート・アドバンテージによく寄せられる質問


運用上の考慮点

NSE は Db2 バージョン 9.7 にて推奨されない機能となっており、将来的に廃止される可能性があります。

DB2 サーバーのアップグレードに影響を与える、推奨されないか廃止された機能 (v9.7)
DB2 サーバーのアップグレードに影響を与える、推奨されないか廃止された機能 (v10.1)
DB2 サーバーのアップグレードに影響を与える、推奨されないか廃止された機能 (v10.5)
DB2 サーバーのアップグレードに影響を与える、推奨されないか廃止された機能 (v11.1)

Net Search Extender の非推奨


お問合せ先

技術的な内容に関して、サービス契約のもと IBM サービス・ラインにお問い合わせください。
IBM サービス・ライン

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

Document Information

Modified date:
16 June 2018

UID

swg22011375