11.20.5 ディクショナリ表およびシステム表の状態や使用量を確認する方法
ディクショナリ表(実表)またはシステム表(実表)の状態,使用量および格納効率を確認する方法について説明します。
(1) ディクショナリ表(実表)およびシステム表(実表)の状態や使用量を確認する
ディクショナリ表(実表)およびシステム表(実表)の状態や使用量を確認する場合は,adbdbstatusコマンドで「表のサマリ情報」を出力してください。
adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスのadbdbstatus(データベースの状態解析)を参照してください。
- 実行するコマンドの例
-
ここでは,システム表(実表)のSTATUS_CHUNKS表について,サマリ情報を出力します。
adbdbstatus -d summary -c table -n "HADB"."STATUS_CHUNKS" -S M --shared-lock
コマンドを実行すると,標準出力にシステム表HADB.STATUS_CHUNKSのサマリ情報が出力されます。adbdbstatusコマンドによる出力結果の確認項目を次に示します。
- 再編成前のデータが残っているかどうかを確認する場合
-
Pending_delete_chunksの出力内容を確認してください。Pending_delete_chunksに出力されている値が1の場合,再編成前のデータ(削除仕掛中のチャンク)が残っています。
adbreorgsystemdataコマンドを再実行すると,再編成前のデータを削除できます。
- ディクショナリ表(実表)およびシステム表(実表)の使用量を確認する場合
-
MB_Used_pagesの出力内容を確認してください。コマンドの実行例では,システム表用DBエリア内に格納されているシステム表(実表)のデータが使用している領域を,メガバイト単位で確認できます。また,ディクショナリ表(実表)についてサマリ情報を出力した場合は,ディクショナリ用DBエリア内に格納されているディクショナリ表(実表)のデータが使用している領域を,メガバイト単位で確認できます。
なお,--shared-lockオプションを指定した場合は,MB_Used_pagesの出力内容に,削除仕掛中のチャンクが使用している領域は含まれません。MB_Used_pagesの出力内容に,削除仕掛中のチャンクが使用している領域を含めたい場合は,--shared-lockオプションを指定しないでください。
(2) ディクショナリ表(実表)およびシステム表(実表)の格納効率を確認する
ディクショナリ表(実表)およびシステム表(実表)の格納効率を確認する場合は,SQLトレース機能を使用する必要があります。
手順
-
SQLトレース情報が出力されるようにする
SQLトレース機能を使用して,次に示すSQLトレース情報が出力されるようにしてください。
-
アクセスパス情報
-
アクセスパスの統計情報
SQLトレース情報の出力については,「10.11.5 SQLトレース情報を出力するための準備」を参照してください。
- メモ
-
次に示すサーバ定義のオペランドにYを指定すれば,アクセスパス情報およびアクセスパスの統計情報が出力されます。
-
adb_sql_trc_outオペランド
-
adb_sql_trc_accesspathオペランド
サーバ定義のオペランドについては,「7.2.6 SQL文に関するオペランド(set形式)」を参照してください。
また,HADBサーバを開始している場合は,adbchgsqltrcコマンドを使用してください。adbchgsqltrcコマンドについては,マニュアルHADB コマンドリファレンスのadbchgsqltrc(SQLトレース情報の出力開始・停止)を参照してください。
-
-
-
SQL文でディクショナリ表またはシステム表の行数を確認する
格納効率を確認するディクショナリ表またはシステム表に対して,DBA権限を持つHADBユーザで,行数を出力するSQL文を実行してください。SQL文を実行して出力された行数が,対象表の行数となります。なお,SQL_AUDITS表については監査管理権限を持つHADBユーザで,SQL文を実行してください。
ディクショナリ表またはシステム表の対象行数を求めるSQL文を次に示します。
表11‒14 ディクショナリ表またはシステム表の対象行数を求めるSQL文 項番
DBエリア名
表名
実行するSQL文
1
ディクショナリ用DBエリア
SQL_TABLES
SELECT COUNT(TABLE_TYPE) FROM MASTER.SQL_TABLES
2
SQL_COLUMNS
SELECT COUNT(COLUMN_ID) FROM MASTER.SQL_COLUMNS
3
SQL_INDEXES
SELECT COUNT(TABLE_ID) FROM MASTER.SQL_INDEXES
4
SQL_DIV_TABLE
SELECT COUNT(TABLE_ID) FROM MASTER.SQL_DIV_TABLE
5
SQL_DIV_INDEX
SELECT COUNT(INDEX_ID) FROM MASTER.SQL_DIV_INDEX
6
SQL_DBAREAS
SELECT COUNT(DBAREA_TYPE) FROM MASTER.SQL_DBAREAS
7
SQL_SCHEMATA
SELECT COUNT(SCHEMA_DEFINER) FROM MASTER.SQL_SCHEMATA
8
SQL_VIEWS
SELECT COUNT(IS_UPDATABLE) FROM MASTER.SQL_VIEWS
9
SQL_VIEW_TABLE_USAGE
SELECT COUNT(TABLE_TYPE) FROM MASTER.SQL_VIEW_TABLE_USAGE
10
SQL_DEFINE_SOURCE
SELECT COUNT(SOURCE_TYPE) FROM MASTER.SQL_DEFINE_SOURCE
11
-
SQL_DEFINE_ENVIRONMENT
-
SQL_VIEW_OBJECT※
SELECT COUNT(DEFINE_VR) FROM MASTER.SQL_DEFINE_ENVIRONMENT
12
SQL_USERS
SELECT COUNT(USER_ID) FROM MASTER.SQL_USERS
13
SQL_TABLE_CONSTRAINTS
SELECT COUNT(CONSTRAINT_TYPE) FROM MASTER.SQL_TABLE_CONSTRAINTS
14
SQL_INDEX_COLINF
SELECT COUNT(INDEX_ID) FROM MASTER.SQL_INDEX_COLINF
15
SQL_KEY_COLUMN_USAGE
SELECT COUNT(COLUMN_ORDER) FROM MASTER.SQL_KEY_COLUMN_USAGE
16
SQL_REFERENTIAL_CONSTRAINTS
SELECT COUNT(IS_DISABLE) FROM MASTER.SQL_REFERENTIAL_CONSTRAINTS
17
SQL_TABLE_PRIVILEGES
SELECT COUNT(GRANTEE_TYPE) FROM MASTER.SQL_TABLE_PRIVILEGES
18
SQL_AUDITS
SELECT COUNT(OPERATION_TYPE) FROM MASTER.SQL_AUDITS
19
SQL_FOREIGN_SERVERS
SELECT COUNT(SERVER_OWNER) FROM MASTER.SQL_FOREIGN_SERVERS
20
SQL_DATATYPE_DESCRIPTORS
SELECT COUNT(TYPE_NAME) FROM MASTER.SQL_DATATYPE_DESCRIPTORS
21
システム表用DBエリア
STATUS_TABLES
SELECT COUNT(COLLECT_TIME) FROM MASTER.STATUS_TABLES
22
STATUS_COLUMNS
SELECT COUNT(DATA_TYPE_CODE) FROM MASTER.STATUS_COLUMNS
23
STATUS_INDEXES
SELECT COUNT(COLLECT_TIME) FROM MASTER.STATUS_INDEXES
24
STATUS_CHUNKS
SELECT COUNT(NVL(CREATE_TIME,CURRENT_TIMESTAMP)) FROM MASTER.STATUS_CHUNKS
25
STATUS_SYNONYM_DICTIONARIES
SELECT COUNT(CREATE_TIME) FROM MASTER.STATUS_SYNONYM_DICTIONARIES
- 注※
-
SQL_VIEW_OBJECT表は検索できません。そのため,同じタイミングでディクショナリ表を更新するSQL_DEFINE_ENVIRONMENT表を検索して行数を確認してください。また,adbreorgsystemdataコマンドで再編成する場合は,両方の表を再編成するようにしてください。
-
-
無効な行データの行数を確認する
手順2.で実行したSQL文によって出力されたSQLトレース情報のアクセスパス情報から,ディクショナリ表またはシステム表の「無効な行データの行数」を確認してください。次の条件に該当するアクセスパス情報の「Data_deleted_rows_cnt」の値を確認してください。
-
スキーマ名が「HADB」である。
-
表名が「手順2.で実行したSQL文に該当するディクショナリ表またはシステム表」である。
条件に該当する「Data_deleted_rows_cnt」の値が,対象表にある無効な行データの行数となります。
-
-
ディクショナリ表(実表)またはシステム表(実表)の格納効率を求める
手順2.と手順3.で求めた値を基に,対象のディクショナリ表(実表)またはシステム表(実表)の格納効率を求めてください。計算式を次に示します。
計算式
ディクショナリ表(実表)およびシステム表(実表)の格納効率 = 手順2.の結果 ÷ (手順2.の結果 + 手順3.の結果)計算式で求めた値が0に近い場合は,対象のディクショナリ表(実表)またはシステム表(実表)の格納効率が悪いと判断できます。adbreorgsystemdataコマンドで,ディクショナリ表およびシステム表を再編成してください。