sql >> Databáze >  >> RDS >> Oracle

Můj dotaz běží podruhé rychleji, jak to zastavím?

Vymazání mezipaměti za účelem měření výkonu je možné, ale velmi nepraktické.

Velmi dobrým měřítkem pro sledování dosaženého výkonu ladění je počítání počtu přečtených bloků během provádění dotazu. Jedním z nejjednodušších způsobů, jak toho dosáhnout, je použít sqlplus s autotrace, například takto:

set autotrace traceonly
<your query>

výstupy

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

Počet přečtených bloků, ať už z mezipaměti nebo z disku, je consistent gets .

Dalším způsobem je spuštění dotazu se zvýšenou statistikou, tj. s nápovědou gather_plan_statistics a pak se podívejte na plán dotazů z mezipaměti kurzoru:

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

Počet přečtených bloků je uveden ve sloupci 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. SELECT dotaz se znaky literatur (dvojtečka, středník) v Oracle

  2. Vytvoření systému zasílání zpráv v DB (zejména MySQL)

  3. Změňte datový typ sloupce z Text na Integer v PostgreSQL

  4. Kolik hodnot v klauzuli in je příliš mnoho v dotazu SQL?