Jaki jest najlepszy system plików Linux dla MySQL (InnoDB)?


48

Próbowałem poszukać testu wydajności różnych systemów plików za pomocą MySQL InnoDB, ale nie mogłem go znaleźć.

Moje obciążenie bazy danych to typowy internetowy protokół OLTP, około 90% odczytu, 10% zapisu. Losowe IO.

Wśród popularnych systemów plików, takich jak ext3, ext4, xfs, jfs, Reiserfs, Reiser4 itd., Który według Ciebie jest najlepszy dla MySQL?

Odpowiedzi:


44

Ile cenisz dane?

Poważnie, każdy system plików ma swoje własne kompromisy. Zanim przejdę o wiele dalej, jestem wielkim fanem XFS i Reisera, chociaż często używam Ext3. Więc nie ma tu prawdziwej stronniczości systemu plików, po prostu informując ...

Jeśli system plików jest dla ciebie czymś więcej niż kontenerem, wybierz coś, co zapewnia najlepszy czas dostępu.

Jeśli dane mają jakąkolwiek znaczącą wartość, będziesz chciał uniknąć XFS. Dlaczego? Ponieważ jeśli nie będzie w stanie odzyskać części zapisanego w dzienniku pliku, wyzeruje bloki i uniemożliwi odzyskanie danych. Ten problem został rozwiązany w jądrze Linuksa 2.6.22 .

ReiserFS to świetny system plików, pod warunkiem, że nigdy nie ulega awarii . Odzyskiwanie dziennika działa dobrze, ale jeśli z jakiegoś powodu utracisz informacje o parowaniu lub uszkodzone zostaną podstawowe bloki systemu plików, możesz mieć problem z wieloma partycjami ReiserFS na dysku - ponieważ mechanizm odzyskiwania zasadniczo skanuje cały dysk, sektor po sektorze, szukając tego, co „myśli”, jest początkiem systemu plików . Jeśli masz trzy partycje z ReiserFS, ale tylko jedna jest zepsuta, możesz sobie wyobrazić chaos, jaki to spowoduje, gdy proces odzyskiwania połączy bałagan Frankensteina z dwóch pozostałych systemów ...

Ext3 jest „wolny”, w „Mam 32 000 plików i znalezienie ich wszystkich zajmuje trochę czasu ls”. Jeśli będziesz mieć wszędzie tysiące małych stolików tymczasowych, poczujesz odrobinę smutku. Nowsze wersje zawierają teraz opcję indeksu, która radykalnie ogranicza przechodzenie przez katalog, ale wciąż może być bolesna.

Nigdy nie korzystałem z JFS. Mogę jedynie skomentować, że każda recenzja, którą kiedykolwiek czytałem, była czymś w rodzaju „solidnego, ale nie najszybszego dzieciaka na bloku”. Może to wymagać dochodzenia.

Dość wad, spójrzmy na plusy:

XFS:

  • krzyczy z ogromnymi plikami, szybki czas odzyskiwania
  • bardzo szybkie wyszukiwanie katalogu
  • Prymitywy do zamrażania i odmrażania systemu plików do zrzucania

ReiserFS:

  • Wysoce optymalny dostęp do małych plików
  • Pakuje kilka małych plików w te same bloki, oszczędzając przestrzeń systemu plików
  • szybkie odzyskiwanie, rywalizuje z czasem odzyskiwania XFS

Ext3:

  • Wypróbowany i prawdziwy, oparty na dobrze przetestowanym kodzie Ext2
  • Wiele narzędzi do pracy
  • Może być ponownie zamontowany jako Ext2 w mgnieniu oka w celu odzyskania
  • Może być zarówno zmniejszony, jak i rozszerzony (inne systemy plików można tylko rozszerzyć)
  • Najnowsze wersje można rozbudowywać „na żywo” (jeśli masz odwagę)

Widzicie, każdy ma swoje dziwactwa. Pytanie brzmi: co jest dla ciebie najmniej dziwaczne?


29
Problem z plikami XFS NULLed został naprawiony ponad 3 lata temu. xfs.org/index.php/…
Ryan Bair

5
Chociaż prawdą jest, że nie mam czasu na świecie, aby nadążać za zmianami w rozwoju jądra (oprócz pracy i rodziny), z pewnością prawdą jest również, że istnieją stare, chwiejne wdrożenia wymagające aktualizacji. Jednak dodam +1 za wskazanie, że poprawka została wykonana.
Avery Payne

13

Warto również zauważyć, że można uruchomić InnoDB bez systemu plików i poprawić wydajność bez obciążenia systemu plików. Nie jestem pewien, czy poleciłbym to, ale korzystałem z niego wcześniej bez problemów.

Surowe urządzenia InnoDB

Ponadto, jeśli używasz 90% odczytów i 10% zapisów, chyba że potrzebujesz zdolności transakcyjnej InnoDB, możesz rozważyć przeniesienie do MyISAM w celu uzyskania lepszej wydajności odczytu.


6
-1 za sugerowanie przejścia do MyISAM w celu uzyskania lepszej wydajności odczytu. Ma tak wiele innych wad i wad. Zamiast tego należy poprawnie skonfigurować InnoDB. +1 za sugestię InnoDB na urządzeniu surowym.
gertvdijk 12.12.12

5
Podtrzymuję moje oświadczenie, MyISAM ma wady, ale jest wiele dobrych rzeczy do zdobycia. MyISAM jest nadal szefem do odczytu obciążeń.
Xorlev,

11

Odpowiedzi tutaj są poważnie nieaktualne i wymagają aktualizacji, ponieważ pojawi się w wynikach Google.

Dla środowisk produkcyjnych XFS. Każdego razu. XFS jest kronikowany i nie blokuje. Upewnij się, że masz następujące zmienne dla nowoczesnej bazy danych MySQL (2011/2012) używającej InnoDB w produkcji:

innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1 # an ACID requirement
sync_binlog = 1 # more ACID
innodb_flush_method = O_DIRECT

Nie używaj EXT3 ani nawet EXT4. Pewnego dnia dotrze tam BTRFS.

EXT3, a może EXT4, blokuje się na poziomie i-węzła, a nie inteligentny!

Źródła: - www.mysqlperformanceblog.com - http://dev.mysql.com/doc/internals/en/index.html - Zrozumienie wewnętrznych aspektów MySQL autorstwa Sashy Pachev - https://www.facebook.com/note.php? note_id = 10150210901610933 - http://oss.sgi.com/projects/xfs/training/ - Niektóre zestawy huśtawki, próby i błędy.

EDYCJA: aktualizacja. Wydaje się, że EXT4 radzi sobie całkiem dobrze od połowy 2013 roku! BTRFS nadal nie jest dobrą opcją. RHEL może sprawić, że XFS stanie się nowym domyślnym systemem plików. Ponownie NIE używaj EXT3.


Zgodnie z testem Vadima Tkachenko , EXT4 zapewnia 20% przepustowości w stosunku do XFS, jeśli używane są MySQL 5.5 z InnoDB. Vadim sugeruje użycie opcji EXT4 „dioread_nolock”, jeśli jest dostępna (chociaż nie używał jej w teście).
caligari

Dlaczego blokowanie na poziomie i-węzła jest złe?
jpaugh

pozostałe odpowiedzi są nieaktualne … teraz, 5 lat później…
kaiser

Google „rywalizacja o blokadę i-węzła” w przypadku problemów z blokowaniem i-węzła.
surowy

9

Krótka wersja jest taka, że ​​najbliższą rekomendacją, jaką widziałem MySQL na systemach plików, jest XFS, jednak ext3 również powinien być w porządku, ext4 zapowiada się na dobre ulepszenie, ale wciąż nie jest całkiem stabilne, chociaż powinno być przed koniec roku.

Jeśli korzystasz z systemów plików klastra, CXFS, OCFS2 i GFS powinny działać poprawnie.

Ostrzegam przed wszelkimi pochodnymi Reisera, a JFS, chociaż niegdyś miły, został w większości pokonany przez XFS i ext4, które są bardziej rozpowszechnione.


6

Nie ma większego znaczenia. Idź z tym, co domyślnie używa Twoja dystrybucja, pod warunkiem, że jest wystarczająca.

Poświęć trochę czasu na dostrojenie innych rzeczy - zdobądź wystarczającą ilość pamięci RAM - zdobądź kontroler rajdu, który nie jest do bani - i napraw lame (ab) korzystanie z bazy danych (Uwaga: jest to główny winowajca w większości przypadków, w których jeszcze tego nie zrobił zostało zrobione).

Zastanów się jednak uważnie, na jakim systemie plików umieścisz tmpdir mysql; wpłynie to na wydajność, w szczególności na zapytania, które wykonują sortowanie na dyskach (zobacz EXPLAIN, aby uzyskać więcej informacji).

Myślę, że system plików, który obsługuje opóźnione przydzielanie, jest naprawdę przydatny, ponieważ można całkowicie uniknąć operacji wejścia / wyjścia dla plików krótkotrwałych, gdy jest wystarczająca ilość pamięci RAM, aby utrzymać je w pamięci podręcznej. Na przykład XFS nie zawraca sobie głowy pisaniem plików, które są usuwane i zamykane przed ich przydzieleniem.

Oczywiście umieszczenie tmpdir na tmpfs jest atrakcyjne z punktu widzenia wydajności, ale prowadzi do ryzyka wyczerpania przestrzeni i posiadania zapytań, które w innym przypadku zakończyłyby się powodzeniem (choć przy użyciu plików tymczasowych dysku) nie powiodłyby się.


5

Nie znalazłem żadnych najnowszych artykułów z porównawczymi „łapankami” na MySQL działających na różnych systemach plików. Biorąc pod uwagę obciążenie, które opisujesz, wątpię, aby fragmentacja na poziomie pliku była dużym problemem. Bez formalnego testu porównawczego nie mogę powiedzieć niczego, co należy uznać za wiarygodne, ale moje przeczucie mówi, że każdy system plików, o którym wspomniałeś powyżej, będzie działał w przybliżeniu na tym samym boisku (tj. Wszystkie w tym samym rzędzie wielkości dla wyników) .

Baza danych naprawdę uruchamia program, ponieważ system plików po prostu zarządza dużymi zakresami, do których ma dostęp silnik pamięci.

Byłoby jednak interesujące przeprowadzenie podsumowania wydajności ze wszystkimi tymi systemami plików. (Mam jednak mniej niż entuzjazm dla MySQL, więc nie zamierzam tego podejmować. Benchmarking Postgres, OTOH, może być interesujący ...)


1
Jest to również duplikat stackoverflow.com/questions/1021854/… z pewnymi referencjami, które mogą Cię zainteresować
nik

3

IMHO warte odnotowania FS dostępnych dla systemu Linux to:

XFS (słaba prędkość odczytu), znany z tego, że jest lekki w zasobach systemowych i szybki z dużymi plikami, ale kiepski w obsłudze wielu małych plików.

ReiserFS (słaba prędkość zapisu) niezbyt przyjazny dla zasobów systemowych, ale działa bardzo dobrze z dużą ilością małych plików.

EXT3 znajduje się pomiędzy, działając akceptowalnie na wszystkich polach (powód, dla którego uważa się go za domyślny Linux FS).

Sam jeszcze nie korzystałem z EXT4, ale nie z ReiserFS4, ale rozejrzałem się nad niektórymi testami porównawczymi, a ReiserFS wydaje się mieć najlepszą wydajność, jeśli chodzi o szybkość czytania, która, jak powiedziałeś, była dla Ciebie najważniejsza.

Spójrz na to: ReserFS4 X Ext4 X Ext3

Polecam Ext3 ze względu na jego stabilność, bezpieczeństwo i dojrzałość, ale jeśli szybkość odczytu jest dla Ciebie najważniejsza, powinieneś rozważyć ReiserFS.

Pamiętaj, że powinieneś również rozważyć użycie procesora, stabilność, bezpieczeństwo itd. Przed wyborem FS.

Oczywiście przeprowadzenie pilotażu, przetestowanie i przeprowadzenie testów porównawczych w konkretnym środowisku jest zawsze najlepszym sposobem na określenie, co będzie dla Ciebie najlepsze.

PS: opublikowałbym więcej testów porównawczych, ale nie mogę opublikować więcej niż jednego linku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.