Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



26.10.2020

Nowa wersja nVision

Można już pobierać nową wersję nVision
26.10.2020

Monitorowanie infrastruktury

Vertiv Environet Alert
23.10.2020

Telefonia w chmurze

NFON Cloudya
23.10.2020

Nowości w EDR

Bitdefender GravityZone
23.10.2020

Wykrywanie anomalii

Flowmon ADS11
23.10.2020

Mobilny monitor

AOC 16T2
22.10.2020

HP Pavilion

HP zaprezentowało nowe laptopy z linii Pavilion.
22.10.2020

Inteligentny monitoring

WD Purple SC QD101
22.10.2020

Przełącznik 2,5GbE

QNAP QSW-1105-5T

Oracle Database

Data publikacji: 15-06-2020 Autor: Kamil Stawiarski

W poprzednim numerze „IT Professional” omówiliśmy sposób, w jaki baza danych Oracle składuje różne typy danych, i obaliliśmy jeden podstawowy mit, raz na zawsze potwierdzając prawdę objawioną – typy danych mają znaczenie!

 

Tym razem przyjrzymy się fizycznemu odczytowi danych przez bazę. Każdy wiersz tabeli składowany jest w bloku – rozmiar bloku jest wybierany na etapie kreowania bazy danych i wynosi domyślnie 8192 bajty. Wiele bloków danych ułożonych pod rząd w pliku danych to ekstent, a ekstent jest największym zbiorem bloków, który może być odczytany na jeden raz w odczycie multiblokowym.


Jednoczesne odczyty wielu bloków zachodzą w trakcie odczytów typu TABLE ACCESS FULL lub INDEX FAST FULL SCAN. Żeby zobrazować tę sytuację, stwórzmy zupełnie nową tabelę w nowej przestrzeni tabel.

 

 

Włączmy teraz śledzenie zapytania SQL ze wszystkimi zdarzeniami oczekiwania i zobaczmy, jak Oracle przeprowadza fizyczne odczyty.

 

 

> Przebieg odczytów z dysku


Każdy fizyczny odczyt z dysku jest oczekiwaniem na zasób zewnętrzny, który serwer bazodanowy Oracle rejestruje jako zdarzenie oczekiwania w klasie User I/O – najpopularniejsze z nich to:

 

  • db file scattered read – wieloblokowy odczyt buforowany w BUFFER CACHE;
  • db file sequential read – jednoblokowy odczyt buforowany w BUFFER CACHE;direct path read – wieloblokowy odczyt niebuforowany w BUFFER CACHE.
  •  

Maksymalny rozmiar pojedynczego odczytu wieloblokowego wyznaczony jest przez parametr DB_FILE_MULTIBLOCK_READ_COUNT, ustawiony domyślnie na 128 bloków dla bloku o wartości 8 KB – daje nam to 1 MB odczytu na jeden raz. Zobaczmy, jak wygląda rozkład odczytów dla TABLE ACCESS FULL na nowej tabeli:

 

 

Na powyższym przykładzie widzimy dwa zdarzenia oczekiwania:

 

  • db file sequential read
  • db file scattered read.

 

Ilość bloków odczytanych w jednej operacji IO przedstawiona jest w parametrze „blocks=”. Można to sprawdzić za pomocą prostego skryptu:

 

 

Jak widać, maksymalna ilość bloków odczytanych w jednej operacji IO to 61. Czyli mniej niż połowa możliwości bazy. Dlaczego? Przyjrzyjmy się graficznej reprezentacji rozkładu naszej tabeli w przestrzeni tabel (rys. 1). W tym celu użyjemy narzędzia Oracle Database Block Visualizer (ODBV), dostępnego na GitHub: github.com/ora600pl/odbv.

 


Miejsce na dysku tylko pozornie jest ciągłe – baza danych podzieliła naszą tabelę na ekstenty, które rozdzielone są blokami oznaczonymi na wizualizacji wykrzyknikiem. Oznacza to, że maksymalna wielkość pojedynczego ekstentu to właś­nie 61 bajtów. Jeśli chcemy mieć pewność maksymalnego odczytu 1 MB dla każdej operacji IO przy db file scattered read oraz direct path read, należałoby stworzyć przestrzeń tabel o stałym rozmiarze ekstentów:

 

[...]

 

Autor jest laureatem Oracle ACE Director i członkiem stowarzyszenia Oracle OakTable, zrzeszającego około stu najlepszych specjalistów na świecie.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"