EXPLAINを使ってアクセスプランの取得ができますが、ちょっと削除したい要件がありました。
作るのは簡単だけど削除ってあまり情報なかったので自分がやったことまとめました。
環境
バージョンによってEXPLAINのオブジェクト構成が違うようです。
検証した環境を記載しておきます。
OS :Redhat Enterprise Linux 8
DB2: DB2 luw v11.5
EXPLAIN関連のテーブル、インデックス、関数削除
とりあえず削除する方法です。
EXPLAIN表を作成すると、Function、Index、Tableが作成されました。
FunctionとTableに関係性があったりするので、Functionから削除する必要があるようです。
実際にはもうちょっとやりようがあると思いますが、以下の順に削除することができました。
※ DB2が起動していて、削除権限をもつユーザでDBに接続している状態で実施します。
■ Function削除
db2 "drop function <スキーマ名>.EXPLAIN_GET_MSGS"
■ Index削除
db2 "drop index <スキーマ名>.ARG_I1"
db2 "drop index <スキーマ名>.EXP_DIAG_DAT_I1"
db2 "drop index <スキーマ名>.IDX_I1"
db2 "drop index <スキーマ名>.IDX_I2"
db2 "drop index <スキーマ名>.MQT_I1"
db2 "drop index <スキーマ名>.MQT_I2"
db2 "drop index <スキーマ名>.OBJ_I1"
db2 "drop index <スキーマ名>.PRD_I1"
db2 "drop index <スキーマ名>.PRT_I1"
db2 "drop index <スキーマ名>.STM_I1"
db2 "drop index <スキーマ名>.STMT_I1"
■ Table削除
db2 "drop table <スキーマ名>.ADVISE_INDEX"
db2 "drop table <スキーマ名>.ADVISE_INSTANCE"
db2 "drop table <スキーマ名>.ADVISE_MQT"
db2 "drop table <スキーマ名>.ADVISE_PARTITION"
db2 "drop table <スキーマ名>.ADVISE_TABLE"
db2 "drop table <スキーマ名>.ADVISE_WORKLOAD"
db2 "drop table <スキーマ名>.EXPLAIN_ACTUALS"
db2 "drop table <スキーマ名>.EXPLAIN_ARGUMENT"
db2 "drop table <スキーマ名>.EXPLAIN_DIAGNOSTIC"
db2 "drop table <スキーマ名>.EXPLAIN_DIAGNOSTIC_DATA"
db2 "drop table <スキーマ名>.EXPLAIN_INSTANCE"
db2 "drop table <スキーマ名>.EXPLAIN_OBJECT"
db2 "drop table <スキーマ名>.EXPLAIN_OPERATOR"
db2 "drop table <スキーマ名>.EXPLAIN_PREDICATE"
db2 "drop table <スキーマ名>.EXPLAIN_STATEMENT"
db2 "drop table <スキーマ名>.EXPLAIN_STREAM"
db2 "drop table <スキーマ名>.OBJECT_METRICS"
作成されるEXPLAIN関連オブジェクトの確認
EXPLAIN表の作成
インスタンスホーム以下にあるEXPLAIN.DDLを、作りたいスキーマで実行するだけなので難しいことはないです。
# コネクト
$ db2 connect to <DB名>
# スキーマ名
$ db2 set schema <スキーマ名>
# DDL実行
$ db2 -tvf <instanceHome>/sqllib/misc/EXPLAIN.DDL
EXPLAINオブジェクトの確認
上記の通りDDL実行するだけなので、このEXPLAIN.DDL の中のCREATE文から削除するオブジェクトを抜き出してきました。
違うバージョンでは削除するオブジェクトが変わると思いますので、こちらでオブジェクトを取得するといいと思います。
$ grep CREATE <instanceHome>/sqllib/misc/EXPLAIN.DDL
CREATE TABLE EXPLAIN_INSTANCE ( EXPLAIN_REQUESTER VARCHAR(128 OCTETS) NOT NULL,
CREATE TABLE EXPLAIN_STATEMENT ( EXPLAIN_REQUESTER VARCHAR(128 OCTETS) NOT NULL,
:(後略)

コメント