2011-07-26 2 views
2

Je voudrais être en mesure d'exécuter une sorte d'un plan d'exposition (similaire à SYBASE) dans l'oracle qui montrera ce qui suit, sur chaque procédure de requête ou stockée:IO physique et logique compte

  1. IO physique de utilisé sur chaque déclaration.
  2. E/S logiques utilisées pour chaque instruction.
  3. Les index utilisés pour chaque instruction.

Ceci est très simple pour moi dans sybase. J'ai un outil d'analyse qui fait cela et je passe le plus clair de mon temps à résoudre les éléments d'E/S élevés.

On m'a dit de faire ce qui suit:

set autotrace on statistics; 
EXPLAIN PLAN FOR 
SELECT * FROM SOMETABLE 
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY()); 

Cela est bien mais ce qui est RANGS? Est-ce l'IO physique ou logique? Aussi, quelle est la valeur de hachage du Plan: 1611616177? Est-ce que c'est l'IO total? Je suis relativement nouveau à Oracle et j'ai beaucoup de questions à étudier.

+0

Au risque de donner un bouchon sans vergogne, j'ai écrit quelques articles sur l'analyse comparative requêtes et le code dans Oracle - http://betteratoracle.com/articles/2-the-oracle-developers-benchmarking-toolkit J'ai un article sur l'utilisation d'Autotrace, comment expliquer les plans etc. –

Répondre

5

Dans SQL * Plus, vous pouvez faire quelque chose comme

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

    EMPNO ENAME 
---------- ---------- 
     7623 PAV 
     7369 smith 
     7499 ALLEN 
     7521 WARD 
     7566 JONES 
     7654 MARTIN 
     7698 BLAKE 
     7782 CLARK 
     7788 SCOTT 
     7839 KING 
     7844 TURNER 

    EMPNO ENAME 
---------- ---------- 
     7876 ADAMS 
     7900 SM0 
     7902 FORD 
     7934 MILLER 
     1234 BAR 

16 rows selected. 


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

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


Statistics 
---------------------------------------------------------- 
      1 recursive calls 
      0 db block gets 
      7 consistent gets 
      0 physical reads 
      0 redo size 
     997 bytes sent via SQL*Net to client 
     535 bytes received via SQL*Net from client 
      3 SQL*Net roundtrips to/from client 
      0 sorts (memory) 
      0 sorts (disk) 
     16 rows processed 

En regardant les statistiques en bas, cohérente obtient est une mesure d'E/S logique. Les lectures physiques mesurent le nombre de lectures physiques nécessaires. Cela montre également le plan de requête qui inclut des choses comme l'estimation de l'optimiseur du nombre de lignes qui seront retournées à chaque étape de la requête (ie l'optimiseur estime correctement qu'une analyse complète de la table EMP retournera 16 lignes comprenant 160 octets de Les données).

+0

Comment obtenez-vous pour voir les statistiques? Je ne vois pas cela dans mon exécution: mettre les statistiques autotrace sur; Expliquer le plan pour SELECT * FROM "SCGFAD". "SECURITIES"; SELECT PLAN_TABLE_OUTPUT FROM TABLE (DBMS_XPLAN.DISPLAY()); –

+1

@Saro Khatchatourian - Vous voyez des statistiques lorsque la requête est réellement exécutée. Pas lorsque vous générez un plan de requête. –