sql >> Database >  >> RDS >> Oracle

Mijn query wordt de tweede keer sneller uitgevoerd, hoe stop ik dat?

Het wissen van de caches om de prestaties te meten is mogelijk, maar erg onpraktisch.

Een zeer goede maatstaf voor het bijhouden van de bereikte prestaties van afstemmingsinspanningen is het tellen van het aantal leesblokken tijdens het uitvoeren van de query. Een van de gemakkelijkste manieren om dit te doen, is door sqlplus met autotrace te gebruiken, zoals:

set autotrace traceonly
<your query>

uitgangen

...
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

Het aantal gelezen blokken, of het nu uit de cache of van schijf is, is consistent gets .

Een andere manier is om de query uit te voeren met verhoogde statistieken, d.w.z. met de hint gather_plan_statistics en kijk dan naar het queryplan vanuit de cursorcache:

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

Het aantal gelezen blokken wordt weergegeven in kolom 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 |
---------------------------------------------------------------------------------------------------------------------


  1. Wat is "rowversion" in SQL Server?

  2. Verbind ODBC-applicaties op Windows met Zoho CRM

  3. Maak een bereik in postgres

  4. php-formulier:kan de database niet bijwerken, query met meerdere join