Oracle
 sql >> Base de données >  >> RDS >> Oracle

Ma requête s'exécute plus rapidement la deuxième fois, comment puis-je arrêter cela ?

Effacer les caches pour mesurer les performances est possible mais très compliqué.

Une très bonne mesure pour suivre les performances obtenues des efforts de réglage consiste à compter le nombre de blocs de lecture pendant l'exécution de la requête. L'un des moyens les plus simples de le faire est d'utiliser sqlplus avec autotrace, comme ceci :

set autotrace traceonly
<your query>

sorties

...
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          1  consistent gets
          0  physical reads
          0  redo size
        363  bytes sent via SQL*Net to client
        364  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

Le nombre de blocs lus, que ce soit depuis le cache ou depuis le disque, est consistent gets .

Une autre façon consiste à exécuter la requête avec des statistiques accrues, c'est-à-dire avec l'indice gather_plan_statistics puis en regardant le plan de requête depuis le cache du curseur :

auto autotrace off
set serveroutput off
<your query with hint gather_plan_statistics>
select * from table(dbms_xplan.display_cursor(null,null,'typical allstats'));

Le nombre de blocs lus est sorti dans la colonne buffers .

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation        | Name           | Starts | E-Rows | Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |                |      3 |        |     1 (100)|          |      3 |00:00:00.01 |       3 |
|   1 |  SORT AGGREGATE  |                |      3 |      1 |            |          |      3 |00:00:00.01 |       3 |
|   2 |   INDEX FULL SCAN| ABCDEF         |      3 |    176 |     1   (0)| 00:00:01 |    528 |00:00:00.01 |       3 |
---------------------------------------------------------------------------------------------------------------------