SQL

統計情報の項目説明

  • このエントリーをはてなブックマークに追加

SQLのパフォーマンスチューニングを行うには実行計画と統計情報を確認するという作業が必須になってきます。

INDEXを使ってSQLが実行されているかを実行計画で確認できます。また、SQLのコストが高い、低いも実行計画で確認できます。

実行計画を確認することも大切ですが、INDEXを使っていてコストも低いのに遅いSQLも存在します。そういった場合、統計情報からパフォーマンスが劣化している原因を見つける事ができます。

統計情報の各項目の意味を紹介したいと思います。

実行計画と統計情報

SELECT
  COUNT(1)
FROM
  TB_MAIN X
    LEFT JOIN TB_SUB Y ON X.ID = Y.ID
WHERE
  Y.ID IS NULL
;

実行計画
----------------------------------------------------------
Plan hash value: 3416551698

----------------------------------------------------------------------------------------------
| Id  | Operation              | Name        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |             |     1 |    10 |       |  2011   (1)| 00:00:25 |
|   1 |  SORT AGGREGATE        |             |     1 |    10 |       |            |          |
|*  2 |   HASH JOIN RIGHT ANTI |             |   500K|  4882K|  8304K|  2011   (1)| 00:00:25 |
|   3 |    TABLE ACCESS FULL   | TB_SUB      |   500K|  2441K|       |   226   (1)| 00:00:03 |
|   4 |    INDEX FAST FULL SCAN| SYS_C007642 |  1000K|  4882K|       |   571   (1)| 00:00:07 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("X"."ID"="Y"."ID")

統計 ---------------------------------------------------------- 0 recursive calls 0 db block gets 2905 consistent gets 0 physical reads 0 redo size 549 bytes sent via SQL*Net to client 523 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed

統計情報の項目説明

No 統計項目 説明
1 recursive calls SQL実行時に内部で発行されたリカーシブコール数
(再帰的コールの回数)
2 db block gets DMLやSELECT FOR UPDATEを発行したときなどに発生する
カレントモードで読み込まれたブロック数
3 consistent gets SELECTを発行したときなどに発生する
読み取り一貫性モードで読み込まれたブロック数
※「一貫性読み込み回数」とは取り消し(ROLLBACK)される
可能性のあるデータは扱わずに、確定(COMMIT)された
データのみを扱う
4 physical reads ディスクアクセスによって読み込まれたブロック数
5 redo size REDOログに書き込まれたサイズ(byte)
6 bytes sent via
SQL*Net to client
クライアントへ送られた合計byte数
7 bytes received via
SQL*Net from client
クライアントから受信した合計byte数
8 SQL*Net roundtrips
to/from client
クライアントに送受信されたNetメッセージの合計数
9 sorts (memory) メモリソート回数
10 sorts (disk) ディスクソート回数
11 rows processed SQLが処理した件数

以上です

  • このエントリーをはてなブックマークに追加

コメントを残す

*