it-swarm-eu.dev

Jak vyladíte MySQL pro velké zatížení InnoDB?

Předpokládáme produkční systém OLTP) s převážně tabulkami InnoDB

  • Jaké jsou běžné příznaky chybně nastaveného/nesprávně nakonfigurovaného systému?
  • Jaké konfigurační parametry nejčastěji měníte z výchozích hodnot?
  • Jak zjistíte potenciální úzká místa dříve, než nastane problém?
  • Jak rozpoznáváte a řešíte aktivní problémy?

Jakékoli anekdoty popisující specifické proměnné a diagnostiku status by byly oceněny.

40
Riedsio

Here je dobrý článek o ladění InnoDB od Sun's Jenny Chen - hodně bloguje o MySQL, některé z nich jsou specifické pro Solaris (např. Pomocí DTrace ), ale celý blog je plná zajímavých úhozů.

16
Gaius

Zajímavé je, že v MySQL 5.5 nyní můžete mít více fondů vyrovnávacích pamětí innodb.

Parametry, na kterých vám záleží, jsou

Asi za měsíc jsem naplánován na implementaci 112 fondů vyrovnávacích pamětí pro klienta. Dám vám vědět, jak to šlo.

UPDATE 2011-02-27 21:57 EDT

Zjistil jsem, že maximální hodnota pro innodb_buffer_pool_instances je 64 Rozhodl jsem se nakonfigurovat 144 GB, takže jsem nastavil innodb_buffer_pool_instances na 18 a innodb_buffer_pool_size na 8. Momentálně načítám server s 450 GB

UPDATE 2011-04-28 13:44 EDT

Vyzkoušel jsem několik vyrovnávacích zdrojů InnoDB. Tam bylo příliš mnoho závitů zamykání a soupeření. Změnil jsem se na jediný 162GB buffer buffer + nastavení read_io_threads a write_io_threads na 64 (maximální hodnota). To fungovalo mnohem lépe.

AKTUALIZACE 2012-07-03 17:27 EDT

O MySQL jsem se dozvěděl něco úžasného. Pokud přidělíte jeden monolitický fond vyrovnávacích pamětí InnoDB, který je větší než Celkový instalovaný počet děleno počtem fyzických procesorů, vaše bude podněcovat OS k pravidelným výměnám paměti kvůli plnému fondu vyrovnávacích pamětí InnoDB. MySQL 5.5 je volba známá jako innodb_buffer_pool_instances může být použita pro rozdělení fondu vyrovnávacích pamětí. Včera jsem to správně implementoval pro klienta, kterého jsem zmínil ve své odpovědi minulý rok. Stále mám 162 GB na klientský fond vyrovnávacích pamětí. Nastavil jsem možnost innodb_buffer_pool_instances serveru na 2, protože každý DB Server je duální hexacore. Přemýšlel jsem o nastavení na 12, ale pak mi kolega ukázal blog od Jeremyho Cole o MySQL a Swappiness . Po přečtení jsem ji okamžitě uvedl do praxe pro svého klienta. Spustil jsem tento příkaz

numactl --hardware

Viděl jsem mapování 192 GB serveru RAM jako 96 GB na každé fyzické jádro. Proto jsem nastavil innodb_buffer_pool_instances na 2. Věci teď vypadají dobře. Aktualizuji svou odpověď, abych viděl, jak to ovlivňuje výměnu paměti pro další 2 montn.

19
RolandoMySQLDBA

Možná budete chtít prozkoumat následující zdroje:

7

Nejprve zvyšte výchozí velikost fondu vyrovnávacích pamětí InnoDB v my.cnf (domnívám se, že je výchozí 8 MB)

Měli byste to pravděpodobně nastavit na 75% své velikosti RAM velikost (obecně)

4
Matt Healy