Derbyにはシステム表式が用意されており、データベースの状態やデータベースへの接続の診断情報を取得できます。
以下の表にはDerbyの診断表式の名称と種類を記します。
診断表式 | 式の種類 |
---|---|
SYSCS_DIAG.ERROR_LOG_READER | 表関数 |
SYSCS_DIAG.ERROR_MESSAGES | 表 |
SYSCS_DIAG.LOCK_TABLE | 表 |
SYSCS_DIAG.SPACE_TABLE | 表関数 |
SYSCS_DIAG.STATEMENT_CACHE | 表 |
SYSCS_DIAG.STATEMENT_DURATION | 表関数 |
SYSCS_DIAG.TRANSACTION_TABLE | 表 |
SYSCS_DIAG.ERROR_LOG_READER診断表関数からは、derby.logファイルや指定した任意のログファイルにある全てのSQL文が得られます。
この診断表関数を使うことで、活動中のトランザクションおよび任意の時点のトランザクションを知ることができます。たとえばデッドロックやロックの時間切れが発生した場合、エラーログからタイムスタンプ(timestampConstant)を見つけることができます。
SYSCS_DIAG.ERROR_LOG_READER診断表関数を使うには、SQL表関数の構文に基づく必要があります。
SELECT * FROM TABLE (SYSCS_DIAG.ERROR_LOG_READER()) AS T1ここでT1はユーザが指定した表の名前で、これは任意の識別子です。
SYSCS_DIAG.ERROR_LOG_READER診断表関数には、随意で指定する引数としてログファイルの名前を与えることができます。ログファイルの名前を指定する場合、ファイル名はJavaで文字列とみなせる式でなければなりません。
SELECT * FROM TABLE (SYSCS_DIAG.ERROR_LOG_READER('myderbyerrors.log')) AS T1
SYSCS_DIAG.ERROR_MESSAGES診断表には、全てのSQLState、地域に対応したエラーメッセージ、 Derbyデータベースでの例外深刻度が記述されます。 文にて直接にSYSCS_DIAG.ERROR_MESSAGES診断表を参照することができます。
SELECT * FROM SYSCS_DIAG.ERROR_MESSAGES
SYSCS_DIAG.LOCK_TABLE診断表には、現在時点のDerbyデータベースの全ロックが記述されます。 SYSCS_DIAG.LOCK_TABLE診断表は文にて直接参照することができます。
SELECT * FROM SYSCS_DIAG.LOCK_TABLE
SYSCS_DIAG.LOCK_TABLE診断表が文にて参照される場合、表のロックのスナップショットが撮られます。 このスナップショットは診断表を参照しても、アプリケーションの通常処理時間や処理の流れに影響が出ないように用意されるものです。 このスナップショットが撮られる時、ロックが状態遷移中である可能性があります。
SYSCS_DIAG.SPACE_TABLE診断表関数では、指定した表とその索引が利用している領域を表示できます。 この診断表関数により表や索引を圧縮することで、どれだけ領域を節約できるか知ることができます。
SYSCS_DIAG.SPACE_TABLE診断表関数を使うには、SQL表関数の構文に従う必要があります。 この診断表関数は二つの引数をとります。スキーマ名と表名です。 表名は必須です。スキーマ名を指定しなかった場合、現在のスキーマが適用されます。
SELECT T2.* FROM SYS.SYSTABLES systabs, TABLE (SYSCS_DIAG.SPACE_TABLE(systabs.tablename)) AS T2 WHERE systabs.tabletype = 'T'ここでT2はユーザ指定の表名で、任意の識別子を指定できます。
スキーマ名と表名は、何れもJavaの文字列型とみなされる式でなければなりません。 スキーマ名と表名がデリミトされない識別子であった場合、名前は大文字で指定しなければなりません。
SELECT * FROM TABLE (SYSCS_DIAG.SPACE_TABLE('MYSCHEMA', 'MYTABLE')) AS T2
SYSCS_DIAG.STATEMENT_CACHE診断表にはSQL文キャッシュの内容が記述されます。 SYSCS_DIAG.STATEMENT_CACHE診断表は文から直接参照できます。
SELECT * FROM SYSCS_DIAG.STATEMENT_CACHE
SYSCS_DIAG.STATEMENT_DURATION診断表関数を使って、derby.logファイルや指定したログファイルにあるSQL文の実行時間を知ることができます。
この診断関数を使うことで、アプリケーションのJDBCコードのどこにボトルネックがあるかの、手がかりを得ることができます。
SYSCS_DIAG.STATEMENT_DURATION診断表関数を使うには、SQLの表関数構文に基づく必要があります。
SELECT * FROM TABLE (SYSCS_DIAG.STATEMENT_DURATION()) AS T1ここでT1はユーザが指定した表名で、任意の識別子を指定できます。
SYSCS_DIAG.STATEMENT_DURATION診断表関数には随意の引数としてログファイルを指定できます。 ログファイル名を指定した場合、ファイル名はJavaの文字列とみなせる式でなければなりません。
SELECT * FROM TABLE (SYSCS_DIAG.STATEMENT_DURATION('somederby.log')) AS T1
SYSCS_DIAG.TRANSACTION_TABLE診断表には現在データベースに存在する全トランザクションが記述されます。SYSCS_DIAG.TRANSACTION_TABLE診断表は文から直接参照できます。
SELECT * FROM SYSCS_DIAG.TRANSACTION_TABLE
文にてSYSCS_DIAG.TRANSACTION_TABLE診断表が参照されると、トランザクション表のスナップショットが撮られます。スナップショットは診断表を参照しても、アプリケーションの通常処理時間や処理の流れに影響が出ないよう用意されます。トランザクションはスナップショットの作成時に状態遷移中である場合もあります。