Zrozumienie rozmiarów bloków

11

Moje pytanie dotyczy Postgres, ale odpowiedzi mogą być wystarczająco dobre, pochodzące z dowolnego tła bazy danych.

Czy moje założenia są prawidłowe:

  • Dyski mają stały rozmiar bloku?
  • Kontroler RAID może mieć inny rozmiar bloku? Czy jeden blok RAID jest dzielony na wiele bloków dysków rzeczywistych?
  • System plików ma również niezależny rozmiar bloku, który ponownie dzieli się na rozmiar bloku RAID?
  • Postgres działa ze stałymi blokami 8k. W jaki sposób odbywa się tutaj mapowanie do rozmiaru bloku systemu plików? Czy bloki Postgres 8k są spakowane razem przez system plików?

Czy podczas konfigurowania systemu najlepiej mieć wszystkie bloki na 8k? A może ustawienia nie mają znaczenia? Zastanawiałem się również, czy niektóre „błędne” ustawienia rozmiaru bloku mogą zagrozić integralności danych w przypadku awarii? Może jeśli blok Postgres 8k musi zostać podzielony na wiele bloków dyskowych?

Czy też nic się nie łączy, a zatem tracę miejsce na dysku przy każdym niedopasowaniu między zdefiniowanymi rozmiarami bloków?

Franz Kafka
źródło

Odpowiedzi:

16

Sektory dyskowe

Dysk ma stały rozmiar sektora, zwykle 512 bajtów lub 4096 bajtów na niektórych współczesnych dyskach; dyski te będą miały także tryb, w którym emulują sektory 512-bajtowe. Na dysku będą ścieżki o różnej liczbie sektorów; ścieżki bliżej zewnętrznej strony dysku mają więcej sektorów, ponieważ mają więcej miejsca dla danej gęstości bitów. Pozwala to na bardziej wydajne wykorzystanie miejsca na dysku; zwykle ścieżka ma na nowoczesnym dysku około 1000 sektorów 512 512 bajtów.

Niektóre struktury formatowania mogą również zawierać informacje dotyczące korekcji błędów w sekcjach, co przejawia się w tym, że dyski są formatowane na niskim poziomie za pomocą sektorów 520 lub 528 bajtów. W tym przypadku sektor nadal ma 512 bajtów danych użytkownika. Ani Windows, ani Linux nie obsługują tego bezpośrednio, chociaż i5OS (IBM iSeries) i różne kontrolery SAN.

Zwykle sektor / głowica / ścieżka jest tłumaczona na logiczny adres bloku; z powodu historycznych problemów z kompatybilnością wsteczną geometria (głowice x sektory x ścieżki) widziana przez system operacyjny (szczególnie na dyskach IDE i SATA) zwykle ma niewiele wspólnego z jego strukturą fizyczną.

Rozmiar paska RAID

Kontroler RAID może mieć rozmiar paska dla tablicy wykorzystującej paski (np. RAID-5 lub RAID-10). Jeśli tablica ma (na przykład) pasek 128k, każdy dysk ma 128k ciągłych danych, a następnie następny zestaw danych znajduje się na następnym dysku. Zwykle można spodziewać się uzyskania około jednego paska na obrót dysku, więc rozmiar paska może mieć wpływ na wydajność przy niektórych obciążeniach.

Wyrównanie partycji

Partycja dysku może, ale nie musi dokładnie wyrównywać się z paskiem RAID, i może spowodować obniżenie wydajności z powodu podzielonych odczytów, jeśli nie zostanie wyrównana. Niektóre systemy (np. Serwer Windows 2008) automatycznie skonfigurują partycje, aby dopasować je do rozmiarów pasków woluminu dysku. Niektóre (np. Serwer Windows 2003) tego nie zrobią i musisz użyć narzędzia do partycji, które obsługuje wyrównanie pasków, aby się upewnić.

Rozmiar bloku systemu plików

System plików przydzieli bloki pamięci w porcjach o określonej wielkości. Zasadniczo jest to konfigurowalne - na przykład NTFS będzie obsługiwał jednostki alokacji od (IIRC) 4K do 64K. Niewspółosiowość partycji i bloków systemu plików do pasków RAID może spowodować, że odczyt jednego bloku systemu plików wygeneruje wiele dostępów do dysku, przy czym tylko jeden byłby konieczny, gdyby bloki systemu plików były wyrównane prawidłowo z pasami RAID.

Rozmiar bloku bazy danych

Baza danych przydzieli miejsce w tabeli lub indeksie w określonym rozmiarze bloku. W przypadku SQL Server jest to 8K, a 8K jest wartością domyślną w wielu systemach. W niektórych systemach, takich jak Oracle, jest to konfigurowalne, aw PostgreSQL jest to opcja czasu kompilacji. W większości systemów przydzielanie przestrzeni do tabel odbywa się zwykle w większych porcjach, z blokami przydzielonymi w tych porcjach.

Niewłaściwe ustawienie systemu plików i bloków alokacji danych może generować wiele operacji we / wy dla pojedynczego zapisu bloku, co może prowadzić do zmniejszenia wydajności.

Chunking we / wy

Zwykle DBMS faktycznie wykonuje operacje we / wy w kawałkach więcej niż jednego bloku. Na przykład na serwerze SQL wszystkie operacje we / wy są wykonywane w częściach po 8 bloków, łącznie 64k). W Oracle można to konfigurować. Przypadkowa kontrola dokumentów PostgreSQL nie ujawnia konkretnego opisu, czy PostgreSQL to robi, więc nie jestem pewien, jak to działa na tej platformie.

Gdy porcja we / wy jest większa niż wielkość bloku systemu plików lub jest źle wyrównana z granicami pasków RAID, zapis dysku z bazy danych może spowodować zapis wielu dysków, co powoduje obniżenie wydajności.

Wykorzystanie miejsca na dysku

Nie marnuje się miejsca na dysku - operacje we / wy bazy danych wykorzystają jedną lub więcej fizycznych operacji we / wy na dysku do ukończenia - ale nieprawidłowo dostrojone operacje we / wy mogą generować nieefektywności, które spowalniają bazę danych. Główne rzeczy, które muszą być w linii, to:

  • Paski i partycje RAID - partycja powinna zaczynać się na granicy pasków RAID.

  • Alokacja we / wy systemu plików i granice pasków RAID / partycji - granica pasków RAID musi być wyrównana z jednostką alokacji systemu plików i powinna być wielokrotnością wielkości jednostki alokacji systemu plików.

  • Rozmiar zapisu na dysku i rozmiar jednostki alokacji systemu plików. Pomiędzy operacjami we / wy bazy danych a operacjami we / wy systemu plików powinna istnieć relacja 1: 1.

Niewspółosiowość nie stwarza większego problemu z integralnością danych niż byłby w innym przypadku. Baza danych i system plików mają mechanizmy zapewniające atomowe działanie systemu plików. Zasadniczo awaria dysku spowoduje utratę danych, ale nie problemy z integralnością danych.

ConcernedOfTunbridgeWells
źródło
Bardzo miła odpowiedź. Czuję się źle, że mogę dać wam tylko jeden głos ...
Franz Kafka
jeszcze jedno pytanie: co dokładnie masz na myśli mówiąc o wyrównaniu? Czy to wielokrotność mniejszego rozmiaru bloku? Np. 32k jest wyrównane do 8k? Czy są zaangażowane inne czynniki?
Franz Kafka
@FranzKafka - Nie, oznacza to, że kiedy coś (zazwyczaj partycja dysku) zaczyna się w miejscu, które nie jest integralną wielokrotnością tego, z czym musi się wyrównać. Na przykład, jeśli mam rozmiar paska RAID 128 KB, a partycja nie rozpoczyna się na wielokrotności 128 KB od „bloku 0”, to mogę mieć logiczne odczyty, które dzielą się na dwie fizyczne jednostki alokacji, co wymaga dwóch operacji odczytu, co powoduje kara za wyniki.
ConcernedOfTunbridgeWells