How To
Summary
Db2 9.7 以降に作成された自動ストレージ表スペースおよび DMS 表スペースは ALTER TABLESPACE によるエクステント移動で未使用の領域を解放できます。
Objective
再利用可能 (RSE) 表スペースは ALTER TABLESPACE の REDUCE や LOWER HIGH WARTER MARK ステートメントでエクステント移動を指示して未使用の領域を解放できます。ALTER TABLE ステートメントは非同期のため、この文書ではエクステント移動をモニターする方法とエクステント移動を停止する方法を案内します。
Environment
Db2 9.7 以降で作成された再利用可能表スペースを持つデータベース
再利用可能表スペースかどうかは db2pd -tablespace -alldbs コマンドを実行し、RSE が Yes かどうかで確認できます。
また、SQL で MON_GET_TABLESPACE 表関数を使用して RECLAIMABLE_SPACE_ENABLED が 1 であることでも確認できます。
db2 "select char(TBSP_NAME,12)TBSP_NAME, TBSP_ID, TBSP_TYPE, TBSP_USING_AUTO_STORAGE, RECLAIMABLE_SPACE_ENABLED from table(MON_GET_TABLESPACE(null, null)) as t"
TBSP_NAME TBSP_ID TBSP_TYPE TBSP_USING_AUTO_STORAGE RECLAIMABLE_SPACE_ENABLED
------------ --------- --------- ----------------------- -------------------------
SYSCATSPACE 0 DMS 1 1
TEMPSPACE1 1 SMS 1 0
USERSPACE1 2 DMS 1 1
自動ストレージ表スペースと非自動ストレージの DMS 表スペースで使用可能なオプションが異なります。
db2pd -tablespace -alldbs で AS が Yes なら自動ストレージ表スペース、No なら非自動ストレージ表スペースです。
また、上記の SQL で TBSP_USING_AUTO_STORAGE が 1 なら自動ストレージ表スペース、0 なら非自動ストレージ表スペースです。
Steps
ここでは USERSPACE1 表スペースに対するエクステント移動を例として使用します。
エクステント移動の開始方法
インスタンス・オーナーでデータベースに接続し、以下のいずれかのステートメントを実行します。
いずれのステートメントも非同期で実行されるため、ステートメント自体は即座に戻ります。
インスタンス・オーナーでデータベースに接続し、以下のいずれかのステートメントを実行します。
いずれのステートメントも非同期で実行されるため、ステートメント自体は即座に戻ります。
- 自動ストレージ表スペースの場合
db2 alter tablespace USERSPACE1 reduce max
- 非自動ストレージの DMS 表スペースの場合
db2 alter tablespace USERSPACE1 lower high water mark
エクステント移動のモニター方法
エクステントの移動は db2pd -extentmovement または MON_GET_EXTENT_MOVEMENT_STATUS 表関数でモニターできます。
- db2pd コマンド
- インスタンス・オーナーでデータベース・サーバーにログインします。
- 以下のコマンドを実行します。
$ db2pd -db <db_name> -extentmovement
以下の出力例では USERSPACE1 表スペースで 32433 エクステントが移動され、あと 9879426 残っていることを示しています。Extent Movement: Address TbspName Current Last Moved Left TotalTime 0x00002AAB356D4BA0 USERSPACE1 1168 1169 32433 9879426 329636
- MON_GET_EXTENT_MOVEMENT_STATUS 表関数
- データベース管理者でデータベースに接続します。
$ db2 connect to <db_name>
- 以下の照会でエクステント移動をモニターします。
$ db2 "select TBSP_NAME, NUM_EXTENTS_MOVED, NUM_EXTENTS_LEFT, TOTAL_MOVE_TIME from TABLE(SYSPROC.MON_GET_EXTENT_MOVEMENT_STATUS('', -1))"
以下の出力例では USERSPACE1 表スペースで 32433 エクステントが移動され、あと 9879426 残っていることを示しています。TBSP_NAME NUM_EXTENTS_MOVED NUM_EXTENTS_LEFT TOTAL_MOVE_TIME ----------- ----------------- ---------------- --------------- USERSPACE1 32433 9879426 329636
- データベース管理者でデータベースに接続します。
エクステント移動の中止方法
エクステント移動はオンライン作業のため、DDL や DML の実行を妨げません。ただし、BACKUP や RESTORE、LOAD のようなユーティリティーとは互換性がなく互いに待つ可能性があります。このような理由で、いったんエクステント移動を現時点までコミットして中止するには以下のステートメントを実行します。
- 自動ストレージ表スペースの場合
db2 alter tablespace USERSPACE1 reduce stop
- 非自動ストレージの DMS 表スペースの場合
db2 alter tablespace USERSPACE1 lower high water mark stop
エクステント移動の完了確認方法
エクステントの移動が完了すると ADM6008I が管理通知ログと db2diag.log に記録されます。
以下のような db2diag コマンドで、直近 24 時間以内に完了したエクステント移動を一覧できます。
$ db2diag -H 1d -g msg:=ADM6008I
2020-07-07-23.59.00.343044+540 E122254A575 LEVEL: Info
PID : 4202 TID : 139854637312 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-41714 APPID: *LOCAL.DB2.200707145303
AUTHID : DB2INST1 HOSTNAME: db2server
EDUID : 60614 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, buffer pool services, sqlbLockAndMoveExtents, probe:4972
MESSAGE : ADM6008I Extents within the following table space have been updated:
"USERSPACE1". Table space ID: "2".
なお、何らかの理由でエクステント移動が完了前に中止された場合、ADM6030E が記録されます。
運用上の考慮点
- エクステント移動の進行中にデータベースを非活動化するとエクステント移動は中止され、その時点までの状態がコミットされます。このとき、db2diag.log に以下のようなログが記録されます。
2020-07-07-23.53.07.732323+540 I3156798E1071 LEVEL: Severe PID : 4202 TID : 139854637312 PROC : db2sysc 0 INSTANCE: db2inst1 NODE : 000 DB : SAMPLE APPHDL : 0-41714 APPID: *LOCAL.DB2.200707145303 AUTHID : DB2INST1 HOSTNAME: db2server EDUID : 60614 EDUNAME: db2agent (SAMPLE) FUNCTION: DB2 UDB, buffer pool services, sqlbMoveHighestExtent, probe:3620 MESSAGE : ZRC=0x80040003=-2147221501=SQLD_INTRP "USER INTERRUPT DETECTED" DIA8003C The interrupt has been received. 2020-07-07-23.53.07.753167+540 I3158820E788 LEVEL: Error PID : 4202 TID : 1398854637312 PROC : db2sysc 0 INSTANCE: db2inst1 NODE : 000 DB : SAMPLE APPHDL : 0-41714 APPID: *LOCAL.DB2.200707145303 AUTHID : DB2INST1 HOSTNAME: db2server EDUID : 60614 EDUNAME: db2agent (SAMPLE) FUNCTION: DB2 UDB, buffer pool services, sqlbLockAndMoveExtents, probe:6095 MESSAGE : ZRC=0x80040003=-2147221501=SQLD_INTRP "USER INTERRUPT DETECTED" DIA8003C The interrupt has been received. DATA #1 : String, 67 bytes Internal error occurred during extent movement, please contact IBM. DATA #2 : String, 12 bytes USERSPACE1
- エクステント移動は BACKUP DB、RESTORE DB、LOAD などのユーティリティーと互換性のないロックを取得します。エクステント移動をこのような操作と並行で実行すると、ロック・イベントモニターに以下のようなロック・タイムアウト・イベントが大量に生成されることがあります。
---------------------------------- Lock Name : 0x0200000000000000000000006D Lock wait start time : 2020-12-07-05.30.11.975518 Lock wait end time : 2020-12-07-05.30.21.975127 Lock Type : EXTENT_MOVEMENT Lock mode requested : Exclusive Lock mode held : Share Lock Status : Waiting Tablespace TID : 2 Tablespace Name : USERSPACE1 Attributes Requester Owner --------------------- ------------------------------ ------------------------------ Participant No 1 2 Application Handle 21512 21217 Application ID *LOCAL.DB2.201207133011 192.168.0.10.39102.21207133011 Application Name db2ExtMov db2bp Authentication ID DB2INST1 APPUSER Requesting AgentID 52889 849972 Coordinating AgentID 52889 0 Agent Status Connect Completed UOW Waiting Application Action No action Performing Load
Document Location
Worldwide
[{"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":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0"}]
Was this topic helpful?
Document Information
Modified date:
20 March 2024
UID
ibm16855579