How To
Summary
表から不要なデータを削除しただけでは表のサイズは小さくなりません。表に割り当てられたエクステントを解放するために再編成を行う必要があります。
この Technote では、データベースに多数の表がある場合、どの表を優先的に再編成すべきかの判別方法を説明します。
Steps
以下の Technote に記述されているように、表スペースに割り当てられた領域を解放するには、まず表を再編成する必要があります。
再編成すべき表は REORGCHK コマンドの F2 および F3 に * がマークされているものを選択します。
例:すべてのユーザー表に対する REORGCHK を実行
db2 connect to <db_name> db2 reorgchk on table user
データベースに多数の表が含まれる場合、再編成すべき表を列挙するために、REORGCHK_TB_STATS プロシージャーと ADMINTABINFO 管理ビューが利用できます。
- 任意のエディターで以下のような reorg_sp.txt を作成します。
create user temporary tablespace USERTEMP1@ drop table session.reorgchk_results@ drop procedure reorgchk()@ create or replace procedure reorgchk() LANGUAGE SQL RESULT SETS 0 BEGIN DECLARE table_check RESULT_SET_LOCATOR VARYING; DECLARE table_schema, table_name, datapartitionname VARCHAR(128); DECLARE cardinality, overflow, npages, fpages, active_blocks, tsize INTEGER; DECLARE f1, f2, f3, f4, f5, f6, f7, f8 INTEGER; DECLARE reorg CHAR(3); DECLARE got_all INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET got_all = 1; DECLARE GLOBAL TEMPORARY TABLE session.reorgchk_results ( table_schema VARCHAR(128), table_name VARCHAR(128), cardinality INTEGER, overflow INTEGER, npages INTEGER, fpages INTEGER, active_blocks INTEGER, tsize INTEGER, f1 INTEGER, f2 INTEGER, f3 INTEGER, reorg CHAR(3), reorg_recommended CHAR(1) ) ON COMMIT PRESERVE ROWS NOT LOGGED ON ROLLBACK PRESERVE ROWS; CALL sysproc.reorgchk_tb_stats('T', 'ALL'); ASSOCIATE RESULT SET LOCATOR ( table_check ) WITH PROCEDURE sysproc.reorgchk_tb_stats; ALLOCATE table_cursor CURSOR FOR RESULT SET table_check; SET got_all = 0; fetch_table: LOOP FETCH table_cursor INTO table_schema, table_name, datapartitionname, cardinality, overflow, npages, fpages, active_blocks, tsize, f1, f2, f3, reorg; IF got_all = 1 THEN LEAVE fetch_table; END IF; INSERT INTO session.reorgchk_results (table_schema, table_name, cardinality, overflow, npages, fpages, active_blocks, tsize, f1, f2, f3, reorg, reorg_recommended) VALUES (table_schema, table_name, cardinality, overflow, npages, fpages, active_blocks, tsize, f1, f2, f3, reorg, CASE WHEN reorg LIKE '%*%' THEN 'Y' ELSE 'N' END ); END LOOP fetch_table; CLOSE table_cursor; END @
- データベースにデータベース管理者で接続し、reorg_sp.txt から reorgchk プロシージャーを作成します。
db2 connect to <db_name>
db2 -td@ -vf reorg_sp.txt - 作成した reorgchk プロシージャーを実行し、session.reorgchk_results ユーザー一時表に結果を格納します。
注:REORGCHK_TB_STATS プロシージャーは現在の統計情報をもとに再編成の必要性を報告します。
より正確な結果を得るには reorgchk コマンドの update statistics または runstats コマンドで統計を更新してからプロシージャーを実行してください。db2 connect to <db_name> db2 call reorgchk
- 以下のような reorg_recommend.sql を作成します。この SQL は再編成が推奨される表を物理サイズの大きい順に 50 表リストします。
SELECT char(r.table_schema,30)table_schema, char(r.table_name,30)table_name, t.data_object_p_size+t.index_object_p_size+t.lob_object_p_size as table_size_kb, case when t.lob_object_p_size > 0 then 'Y' else NULL end as LOB, r.f2, r.f3, r.reorg FROM session.reorgchk_results r join sysibmadm.admintabinfo t ON r.table_schema = t.tabschema and r.table_name = t.tabname WHERE f2 between 1 and 70 or f3 between 1 and 80 ORDER BY table_size_kb desc FETCH FIRST 50 ROWS ONLY;
- reorg_recommend.sql を実行します。
db2 connect to <db_name> db2 call reorgchk (接続してから reorgchk プロシージャーを実行していない場合) db2 -tvf reorg_recommend.sql
- (オプション) リストされた表を再編成するコマンドを生成するために以下のような reorg_gen.sql を作成します。
SELECT case when t.lob_object_p_size > 0 then 'REORG TABLE ' || TRIM(r.table_schema)||'.'|| TRIM(r.table_name)||' LONGLOBDATA ;' else 'REORG TABLE ' || TRIM(r.table_schema)||'.'|| TRIM(r.table_name)||';' end FROM session.reorgchk_results r join sysibmadm.admintabinfo t ON r.table_schema = t.tabschema and r.table_name = t.tabname WHERE f2 between 1 and 70 or f3 between 1 and 80 ORDER BY t.data_object_p_size+t.index_object_p_size+t.lob_object_p_size desc FETCH FIRST 50 ROWS ONLY;
- (オプション) 生成されたコマンドで再編成を実行します。
db2 connect to <db_name>
db2 call reorgchk (接続してから reorgchk プロシージャーを実行していない場合) db2 -xtf reorg_gen.sql > reorg.db2 db2 -tvf reorg.db2
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":"a8m500000008PlYAAU","label":"Database Objects-\u003ETables"}],"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:
15 August 2023
UID
ibm16457489