Oracle   Oracleのパフォーマンス分析に役立つSQLメモ
  2004/02/21

●ライブラリキャッシュのヒット率
V$LIBRARYCACHEのGETHITRATIOを見てオブジェクト参照時のキャッシュヒット率を表示します。 SQL AREAのヒット率が90%を割っている場合には、アプリケーション・コードの改善を検討します。

select namespace, gethitratio
       from v$librarycache;

●キャッシュミス率
V$LIBRARYCACHEのRELOADS,PINSを見てキャッシュミス率を表示します。 ミス率が1%を越える場合には、SHARED_POOL_SIZEを増やしましょう。

select sum(pins) "EXECUTIONS",
       sum(reloads) "MISSES",
       sum(reloads)/sum(pins)*100 "MISS RATE"
       from v$librarycache;

●実際に使われている共有プールのサイズ

set serveroutput on size 10000
declare
  ln_mem_object number;
  ln_mem_sql    number;
  ln_mem_cursor number;
begin
  -- オブジェクトが使っているサイズ
  SELECT SUM(SHARABLE_MEM) INTO ln_mem_object
    FROM V$DB_OBJECT_CACHE;

  -- SQL文が使っているサイズ
  SELECT SUM(SHARABLE_MEM) INTO ln_mem_sql
    FROM V$SQLAREA;

  -- カーソルが使っているサイズ
  SELECT 250 * SUM(USERS_OPENING) INTO ln_mem_cursor
    FROM V$SQLAREA;

  DBMS_OUTPUT.PUT_LINE('オブジェクト:' || TO_CHAR(ln_mem_object));
  DBMS_OUTPUT.PUT_LINE('SQL文       :' || TO_CHAR(ln_mem_sql));
  DBMS_OUTPUT.PUT_LINE('カーソル    :' || TO_CHAR(ln_mem_cursor));
end;
/

●INVALIDATIONS
V$LIBRARYCACHEのINVALIDATIONSを見て解析結果が無効にされた回数を表示します。 解析結果の無効化を避けるには、事前に明示的にコンパイルするなどの対策が必要です。

select namespace, pins, reloads, invalidations
       from v$librarycache;

●表領域とデータファイルの空きの表示

SELECT '表領域とデータファイルの空きを表示' FROM DUAL;
SELECT A.TABLESPACE_NAME || ' ' || B.FILE_NAME || ' ' ||
       TO_CHAR(
         ROUND((B.BYTES-SUM(A.BYTES))*100 / B.BYTES, 2)
       , '90.99')
  FROM DBA_FREE_SPACE A,
       DBA_DATA_FILES B
 WHERE A.FILE_ID = B.FILE_ID
 GROUP BY A.TABLESPACE_NAME, B.FILE_NAME, B.BYTES;

●ヒントを使う
コストベースのオプティマイザを有効にしたときに、 表を分析すると自動的にルールベースからコストベースに切り替わりますが、 コストベースの際に採用されるハッシュジョインが遅い、 ルールベースの索引に基づくジョインに戻したい、というときに、「RULE」ヒントが使えます。

SELECT /*+ RULE */ a.ORDER_ID, a.UNIT_PRICE
  FROM ORDER a
 WHERE ...

  もくじ
Oracle   (C) 2002-2003 MISUMI URANO (2002/02/18 - 2004/02/21)