web-dev-qa-db-ja.com

「コスト」は信頼できないという主張を前提として、クエリの相対的なパフォーマンスを測定する

コストフィールドは、特定のプランに最適なコストを決定するために内部で使用される比較コストです。異なるステートメントのコストは、実際には直接比較できません。

出典

これにより、同じ最終目標を持つように設計された同様のクエリの相対的なパフォーマンス(CPU、I/O、または時間)を測定するために使用できる、より信頼性の高いメトリックの余地ができますか?

4
Lewis Norton

使用できるさまざまなメトリックがあります。

実際にクエリを実行する場合、オラクルは相対的なパフォーマンスを評価するためのさまざまなメトリックを提供します。 SQL * Plusでは、autotraceを有効にすると、クエリを実行した後、いくつかの実行統計のクイックリストが表示されます。ほとんどの場合、論理I/O(自動トレース出力の「一貫性のある取得」メトリック)を削減すると、応答時間が改善されます。

SQL> set autotrace on;
SQL> select ename from emp;

ENAME
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS

ENAME
----------
JAMES
FORD
MILLER

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    14 |    84 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    14 |    84 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------


Statistics
----------------------------------------------------------
        340  recursive calls
          0  db block gets
         71  consistent gets
          8  physical reads
          0  redo size
        715  bytes sent via SQL*Net to client
        523  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          7  sorts (memory)
          0  sorts (disk)
         14  rows processed

ただし、さらに詳しく知りたい場合は、Oracleがはるかに多くのメトリックを提供します。クエリを実行するとV$STATNAME、利用可能な何百もの統計が表示されます。 V$SESSTATには、セッションのすべての統計の現在の値が含まれているため、「前」のデータを取得してクエリを実行し、「後」のデータを取得して、関心のあるほぼすべてのパフォーマンス統計の変化を確認できます。トムKyteはNice runstats package をまとめました。これはこれを自動化するため、テストハーネスを自分で作成する必要はありません。

2
Justin Cave