2010-05-04 14 views
6

w poniższym linkumysql innodb: innodb_flush_method

http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_method

mówi: różne wartości tej zmiennej może mieć znaczący wpływ na wydajność InnoDB. Na przykład, w niektórych systemach, w których dane InnoDB i pliki dziennika znajdują się w sieci SAN, , ustalono, że ustawienie innodb_flush_method na O_DIRECT może obniżyć wydajność prostych instrukcji SELECT o współczynnik równy trzy.

Dlaczego O_DIRECT może spowolnić wybór instrukcji?

+0

Strona podręcznika została ostatnio zaktualizowana. Teraz jest to trochę bardziej przejrzyste. –

Odpowiedz

6

O_DIRECT pomija systemy pamięci podręcznej systemu operacyjnego. Sieć SAN może być bardzo szybkim systemem pamięci masowej, ale generalnie będzie znajdować się gdzieś indziej nad łączem sieciowym i będzie proksymowana/ukryta za różnymi innymi warstwami. Używając O_DIRECT, który eliminuje buforowanie lokalne, zmuszasz InnoDB do bezpośredniego uderzenia w system pamięci masowej.

+2

Kiedy używamy o_direct, użyjemy prawie całej pamięci fizycznej dla mysql do buforowania danych. Wygląda więc na to, że dokument mysql zakłada marnowanie wolnej pamięci bez przydzielania jej do mysql. Jeśli nie zarezerwujemy darmowej pamięci fizycznej, to myślę, że o_direct nie będzie wolniejszy dla wybranych. Tak jakby blok mógł być buforowany wewnątrz systemu plików, najprawdopodobniej może być również buforowany w buforze mysql, jeśli pozwolimy mysql wykorzystać całą wolną pamięć. – Daniel

+1

MySQL może i będzie buforować wyniki zapytań, ale jeśli któreś z zapytań wymagałoby skanowania tabeli, to jesteś na tym dysku. Dzięki O_DIRECT w pamięci nie ma pamięci podręcznej dysku, więc jesteś bezpośrednio na nośniku pamięci. –

+0

warta downvoting: W wersjach późnych InnoDB chciałbyś pozwolić na przydzielenie jak największej pamięci RAM dla buffer_pool, co w oczywisty sposób nie pozostawia żadnej pamięci podręcznej systemu operacyjnego dla żadnego dobra dla InnoDB. – noonex

2

Naprawdę trzeba poeksperymentować z metodą spłukiwania na swoim sprzęcie, aby przekonać się, co jest najlepsze dla Ciebie. Otoczenie:

innodb_flush_method = O_DIRECT

Lepsza nasza wydajność o 15% na serwerze Dell 2950 z 15K RPM dyski SAS skonfigurowane w RAID 1 konfiguracji z kontrolera PERC buforowania Dell. Używamy jądra systemu Ubuntu 9.04, a większość prac to mysql przy użyciu innodb. Twój przebieg może się różnić.