Hitachi

Hitachi Advanced Database システム構築・運用ガイド


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トレース機能を使用する必要があります。

手順

  1. 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トレース情報の出力開始・停止)を参照してください。

  2. 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コマンドで再編成する場合は,両方の表を再編成するようにしてください。

  3. 無効な行データの行数を確認する

    手順2.で実行したSQL文によって出力されたSQLトレース情報のアクセスパス情報から,ディクショナリ表またはシステム表の「無効な行データの行数」を確認してください。次の条件に該当するアクセスパス情報の「Data_deleted_rows_cnt」の値を確認してください。

    • スキーマ名が「HADB」である。

    • 表名が「手順2.で実行したSQL文に該当するディクショナリ表またはシステム表」である。

    条件に該当する「Data_deleted_rows_cnt」の値が,対象表にある無効な行データの行数となります。

  4. ディクショナリ表(実表)またはシステム表(実表)の格納効率を求める

    手順2.と手順3.で求めた値を基に,対象のディクショナリ表(実表)またはシステム表(実表)の格納効率を求めてください。計算式を次に示します。

    計算式

    ディクショナリ表(実表)およびシステム表(実表)の格納効率 = 
                     手順2.の結果 ÷ (手順2.の結果 + 手順3.の結果)

    計算式で求めた値が0に近い場合は,対象のディクショナリ表(実表)またはシステム表(実表)の格納効率が悪いと判断できます。adbreorgsystemdataコマンドで,ディクショナリ表およびシステム表を再編成してください。