IBM Support

[Db2] SQL が SQL1585N で失敗する場合の対処方法

Question & Answer


Question

SQL ステートメントの実行が SQL1585N でエラー終了します。原因と解決策を教えてください。
SQL1585N ページ・サイズに互換性のある SYSTEM TEMPORARY 表スペースが存在しないため、一時表を作成できませんでした。

Cause

TEMPORARY 表スペースには、ソートや結合などの操作を実行する際にデータベース・マネージャーが必要とする一時データが保持されます。結果セットを処理するために追加のスペースが必要になるためです。
SQL1585N は、次のいずれかの原因が考えられます。
  1. SYSTEM TEMPORARY 表スペースがオフラインになっている。
  2. 生成されるシステム一時表の行の長さが、現在「正常」状態になっている SYSTEM TEMPORARY 表スペースに最大ページ・サイズで収容できる長さを上回っている。
  3. システム一時表に必要な列数が、 データベース内で最大の SYSTEM TEMPORARY 表スペースに適用できる制限を超えた。

Answer

1) MON_GET_TABLESPACE 表関数を使用して、必要なページ・サイズを持つ TEMPORARY 表スペースが存在するか確認します。

※TBSP_CONTENT_TYPE=SYSTEMP が SYSTEM TEMPORARY 表スペースです。
以下の例では、 データベースに一つだけ SYSTEM TEMPORARY スペースがが定義されており、その表スペース (TEMPSPACE1) のページ・サイズは 8KB です。

出力例:
  1. 該当のデータベースへ接続します。
    db2 connect to sample
  2. 以下の SQL を実行して表スペースのリストを確認します。
    db2 "select varchar(TBSP_NAME,20)as TBSP_NAME, TBSP_ID, TBSP_CONTENT_TYPE, TBSP_PAGE_SIZE, varchar(TBSP_STATE,30) as TBSP_STATE from table(MON_GET_TABLESPACE(null, null)) as t"
    
    TBSP_NAME        TBSP_ID TBSP_CONTENT_TYPE TBSP_PAGE_SIZE TBSP_STATE
    ---------------- ------- ----------------- -------------- ----------
    SYSCATSPACE            0 ANY                         8192 NORMAL
    TEMPSPACE1             1 SYSTEMP                     8192 NORMAL
    USERSPACE1             2 LARGE                       8192 NORMAL
    IBMDB2SAMPLEREL        3 LARGE                       8192 NORMAL
    SYSTOOLSPACE           4 LARGE                       8192 NORMAL
    
     5 record(s) selected.
2) 必要なページ・サイズを持つ表スペースが存在しない場合は、新たに SYSTEM TEMPORARY 表スペースを作成します。

32K SYSTEM TEMPORARY 表スペースを作成する例:
  1. (データベースに存在しない場合) 32K ページ・サイズのバッファープールを作成します。
    db2 create bufferpool <新規バッファープール名> pagesize 32K
  2. 32K ページ・サイズの SYSTEM TEMPORARY 表スペースを作成します。
    db2 "CREATE SYSTEM TEMPORARY TABLESPACE <一時表スペース名> PAGESIZE 32K BUFFERPOOL <バッファープール名>"
  • db2 create bufferpool bp32K pagesize 32K
    db2 create system temporary tablespace temp32K pagesize 32K bufferpool bp32K
SYSTEM TEMPORARY 表スペースに適用できる制限値は以下マニュアル・ページの表 9. を参照します。

SQL と XML の制限
表 9. データベース・マネージャーのページ・サイズ固有の制限値
説明 4K ページ・サイズの制限値 8K ページ・サイズの制限値 16K ページ・サイズの制限値 32K ページ・サイズの制限値
選択リスト内のエレメントの最大数
5004
1012
1012
1012
GROUP BY 節中の列の最大数
500
1012
1012
1012
GROUP BY 節中の列の合計長の最大値 (バイト単位)
4005
8101
16,293
32,677


3) 必要なページ・サイズを持つ表スペースが存在する場合は、MON_GET_TABLESPACE 表関数の TBSP_STATE 列で正常 (NORMAL) 状態かどうか判別します。
  • 表スペースが正常 (NORMAL) ではない場合、表スペースを「正常」状態に移行します。例えば、表スペースをドロップして再作成します。
  • 表スペースが正常 (NORMAL) の場合、上記の制限値を超えているため、より大きなページ・サイズの SYSTEM TEMPORARY 表スペース を作成するか、制限値を超えないように SQL の修正が必要です。

運用上の考慮点 関連情報
パスポート・アドバンテージによく寄せられる質問
SQL1585N
MON_GET_TABLESPACE 表関数 - 表スペース・メトリックの取得
表スペースの状態
ソート・パフォーマンスのチューニング

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

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlZAAU","label":"Database Objects-\u003ETablespaces"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
14 April 2022

UID

swg22013508