Wiele rdzeni i wydajność MySQL

38

Znaczenie pamięci RAM jest faktem ustalonym, ale dostępnych jest znacznie mniej materiałów na temat znaczenia rdzeni i wielowątkowości, jeśli chodzi o użycie procesora przez MySQL. Mówię o różnicy między uruchomieniem MySQL na 4 rdzeniach a 6 rdzeniami na 8 rdzeniach i tak dalej.

Czy różne silniki pamięci masowej wykorzystują procesor inaczej?

Rick James
źródło
Powiązane: dba.stackexchange.com/questions/5666/…
gbn 18.09.11
jest to powiązane, ale nie dotyczy zachowania różnych silników pamięci masowej w stosunku do wielordzeniowych procesorów.
Rick James,
1
W rzeczy samej. Dlatego nie ma głosowania „tak blisko jak duplikat”…
gbn
To wspaniała społeczność, wciąż uczę się, jak korzystać z tej strony.
Rick James,
Cześć kolego, spójrz tutaj: mysql-cluster-blog.com znajdziesz przynajmniej coś

Odpowiedzi:

30

Jeśli chodzi o MySQL, nie ma porównania między silnikami pamięci masowej, z wyjątkiem tego, że dzieli się on na dwie podstawowe kategorie:

MySQL wykorzystuje kilka silników pamięci masowej

Jeśli chodzi o wymienione silniki pamięci, jedynymi, które mają zgodność z ACID, są InnoDB i NDB. Dlaczego warto to wymienić? Dwa powody:

  • Inne silniki pamięci masowej po prostu nie korzystają z obecności większej liczby rdzeni, innych niż podstawowe operacje we / wy dysku, użycie procesora i ogólna przepustowość.
  • Kod dla każdego nietransakcyjnego silnika pamięci masowej, który narzuca zasadniczo 14 operacji wewnętrznych niezależnie od silnika pamięci masowej, nie został zaprojektowany w celu wykorzystania dostępu do wielu rdzeni.

InnoDB pod MySQL 5.5, wtyczka InnoDB) i XtraDB serwera Percona Server mają opcje, które można ustawić w celu uzyskania dostępu do wielu rdzeni (serwer Percona robi to już dłużej). W rzeczywistości Percona wstrzykuje około 30 000 wierszy kodu specjalnie w celu zwiększenia wydajności InnoDB z każdą nową wersją GA kodu źródłowego MySQL. Możemy być pewni, że Oracle dołączyło własne ulepszenia z własnego think tanku do działania w InnoDB dla operacji wielordzeniowych (od MySQL 5.1.38).

Dzięki konieczności wykonywania MVCC na danych w połączeniu z blokowaniem wierszy / stron, wydajność transakcji można teraz oprzyrządować, zmierzyć i skonfigurować.

Jeśli nauczyłem się jednej rzeczy na temat używania wielu rdzeni, musisz skutecznie dostroić InnoDB, a nie polegać tylko na InnoDB po wyjęciu z pudełka .

AKTUALIZACJA 2011-09-20 08:03 EDT

W odniesieniu do InnoDB korzystającego ze wszystkich rdzeni musimy zachować percepcję. Rdzenie muszą mieć również inne cechy (system operacyjny, dysk, pamięć, aplikacje, monitorowanie itp.) W serwerze bazy danych. Dla osób o skromnych budżetach wielu z nich ma również serwer bazy danych zapewniający NFS, monitorowanie z Munin, obsługę aplikacji dla JBoss, PHP i lista jest długa. Jeśli chcesz, aby MySQL, a dokładniej InnoDB, używał większej liczby rdzeni, Serwer bazy danych musi być dedykowany wyłącznie MySQL, a OS / Dysk / Pamięć musi mieć tendencję tylko do MySQL . Biorąc pod uwagę tę perspektywę, InnoDB bez wątpliwości zaangażuje więcej rdzeni .

Jeśli chodzi o wtyczkę InnoDB, wspomniano po prostu o pokazaniu wcześniejszych inicjatyw mających na celu lepszą InnoDB ze strony MySQL (eh, Oracle. Przepraszam, wciąż nie zjeżdża z języka). Nowe zmienne przywołujące większą aktywność podstawową stały się oczywiste z MySQL 5.1.38.

Na przykład innodb_read_io_threads i innodb_write_io_threads (oba od MySQL 5.1.38) przydzielają określoną liczbę wątków do odczytu i zapisu. Domyślna wartość to 4, a maksymalna to 64. Tak różne wartości domyślne i maksymalne (4–64) pokazują, że InnoDB jest taktowany wielowątkowo i intensywnie korzysta z rdzenia podczas jego konfiguracji !!!

Zaspokojenie potrzeb społeczności MySQL dostępu do większej liczby rdzeni za pomocą InnoDB było prowadzone przez Perconę. W związku z tym MySQL zaczął podążać za nimi. Muszę przyznać, że Oracle (fuj) dokonał niezbędnych ulepszeń, aby uzyskać więcej podstawowej działalności.

RolandoMySQLDBA
źródło
InnoDB pod MySQL 5.5 dostrojony, jak sugerowałeś powyżej, może korzystać ze wszystkich rdzeni? {trochę mylił się co do wtyczki InnoDB}
Rick James,
@Rick - W dalszej odpowiedzi skierowałem twój komentarz
RolandoMySQLDBA
Tutaj wydaje się, że jest to zupełnie inna historia, a MyISAM wydaje się upaść, jeśli chodzi o wykorzystanie wielu rdzeni, ale z drugiej strony na dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM ma Zalety. Wygląda więc na to, że decyduje, którą drogą wybrać.
Rick James,
2
Wszystko zależy od celu, w jakim korzystasz z MyISAM lub InnoDB. Co i ile chcesz buforować? Czy polegasz na MySQL lub innych mechanizmach buforowania (takich jak lakier i memcached) do pobierania danych? Czy Twój sprzęt jest odpowiednio skalowany do InnoDB? Czy 98% twoich SQL SELECT? Czy tabela jest w najlepszym formacie do szybkich odczytów? Odpowiedzi na te pytania powinny pomóc nam wybrać silnik pamięci masowej, odpowiednią konfigurację, wybór sprzętu, a nawet osiągnąć głębsze rzeczy, takie jak wysoka dostępność, topologia DB, podział na odczyt / zapis, a ta lista może trwać dalej.
RolandoMySQLDBA
9

Uważam, że mówienie o silnikach pamięci masowej wykorzystujących rdzenie może wprowadzać w błąd dla początkujących. Pod warunkiem, że program jest wystarczająco wielowątkowy, system operacyjny zaplanuje go na jak największej liczbie rdzeni.

Specyficznym problemem ograniczającym skalowanie procesora jest sytuacja, w której wewnętrzny kod blokujący ( muteksy ) ma rywalizację i blokuje jednoczesne uruchamianie wątków. Wszystkie silniki pamięci masowej będą wymagać muteksów, ale z pewnością w MyISAM są pewne gorące.

Jeśli przez sekundę zignorujemy rywalizację mutexów i wrócimy do głównego pytania: jak ważne jest posiadanie wielu rdzeni? -

Lubię mieć wiele rdzeni do obciążeń, które obsługują żądania użytkowników. Posiadanie wielu może zmniejszyć wariancję między czasami zapytania. Pomyśl o tym jak o ustawieniu się w supermarkecie z otwartymi 12 przejściami i tylko 2.

Aktualizacja : Napisałem post na blogu, dlaczego ważna jest skalowalność w pionie (wiele rdzeni).

Morgan Tocker
źródło
5
+1 za wspomnienie o słoniu w pokoju: spór o
muteks