Den minsta enheten för dataåtkomst i Oracle Database är ett block. Inte en rad.
Varje block kan lagra många rader.
Databasen kan komma åt ett block i aktuellt eller konsekvent läge.
- Nuvarande =eftersom blocket existerar "just nu".
- Konsekvent =eftersom den blockerade fanns när din fråga startade.
Frågan och aktuella kolumner rapporterar hur många gånger databasen har åtkomst till ett block i konsekvent (fråga) och aktuellt läge.
När du kommer åt ett block kan det redan finnas i buffertcachen (minnet). Om så är fallet behövs ingen diskåtkomst. Om inte måste den göra en fysisk avläsning (pr). Diskkolumnen är en räkning av det totala antalet fysiska avläsningar.
Statistiken för varje rad i planen är siffrorna för den operationen. Plus summan av alla dess underordnade operationer.
Enkelt uttryckt bearbetar databasen planen genom att först komma åt det första barnet. Skickar sedan raderna upp till föräldern. Sedan gör alla andra barnoperationer av den föräldern i ordning. Underordnade operationer dras in från deras överordnade i displayen.
Så databasen behandlade din fråga så här:
- Läs 2 000 rader från CUSTOMER. Detta krävde 749 konsekventa block-gets och 363 diskläsningar (cr- och pr-värden på den här raden). Detta tog 10 100 mikrosekunder.
- Läs 112 458 rader från BOKNING. Detta gjorde 8 203 konsekventa läsningar och noll diskläsningar. Detta tog 337 595 mikrosekunder
- Förenade dessa två tabeller med en hash-join. Värdena för CR, PR, PW (fysisk skrivning) och tid är summan av operationerna under detta. Plus vad den här operationen än gjorde. Så hashen join:
- gjorde 8 952 - ( 749 + 8 203 ) =noll konsekventa läsningar
- gjorde 363 - ( 363 + 0 ) =noll fysiska avläsningar
- tog 1 363 447 - ( 10 100 + 337 595 ) =1 015 752 mikrosekunder att köra
Lägger du märke till att CR &PR-summorna för hash-join matchar frågan och disksummorna i hämtningsraden?
Räknekolumnen rapporterar antalet gånger som åtgärden hände. En hämtning är ett anrop till databasen för att hämta rader. Så klienten ringde databasen 7 499 gånger. Varje gång den fick tak ( 112 458 / 7 499 ) =15 rader.
CPU är den totala tiden i sekunder som serverns processorer exekverade det steget. Förfluten är den totala väggklockans tid. Detta är CPU-tiden + eventuellt extra arbete. Såsom diskläsning, nätverkstid, etc.