Maximální využití paměti MySQL velmi závisí na hardwaru, vašem nastavení a samotnou databázi.
Hardware
Hardware je samozřejmostí. Čím více RAM, tím lepší a rychlejší disky ftw . Nevěřte však těm měsíčním nebo týdenním zprávám. MySQL se neškáluje lineárně – ani na hardwaru Oracle. Je to trochu složitější.
Sečteno a podtrženo:neexistuje žádné obecné pravidlo pro to, co je doporučeno pro vaše Nastavení MySQL. Vše závisí na aktuálním použití nebo projekcích.
Nastavení a databáze
MySQL nabízí nespočet proměnných a přepínačů pro optimalizaci jeho chování. Pokud narazíte na problémy, opravdu si musíte sednout a přečíst si příručku (f'ing).
Pokud jde o databázi -- několik důležitých omezení:
- tabulkový stroj (
InnoDB
,MyISAM
, ...) - velikost
- indexy
- použití
Většina tipů MySQL o stackoverflow vám řekne o 5-8 takzvaných důležitých nastaveních. Za prvé, ne všechny jsou důležité - např. alokovat spoustu zdrojů InnoDB a nepoužívat InnoDB nedává moc smysl, protože tyto zdroje jsou plýtvané.
Nebo - mnoho lidí navrhuje zvýšit max_connection
proměnná – no, málo vědí, že to také znamená, že MySQL přidělí více zdrojů na zajištění těchto max_connections
-- pokud bude někdy potřeba. Jasnějším řešením může být uzavření databázového připojení ve vaší DBAL nebo snížení wait_timeout
k uvolnění těchto vláken.
Pokud zachytíte můj drift – je toho opravdu hodně, hodně o čem číst a učit se.
Motory
Tabulkové enginy jsou docela důležité rozhodnutí, mnoho lidí na ně brzy zapomene a pak najednou zjistí, že bojují s MyISAM
o velikosti 30 GB tabulku, která uzamkne a zablokuje celou jejich aplikaci.
Nechci říct, že MyISAM je na hovno , ale InnoDB
lze vyladit tak, aby reagovala téměř nebo téměř stejně rychle jako MyISAM
a nabízí něco jako zamykání řádků na UPDATE
zatímco MyISAM
uzamkne celou tabulku, když je do ní zapsána.
Pokud máte volnost provozovat MySQL na své vlastní infrastruktuře, můžete se také podívat na server percona
protože mezi zahrnutím spousty příspěvků od společností jako Facebook a Google (vědí rychle), zahrnuje také vlastní drop-in náhradu za InnoDB
Percona s názvem XtraDB
.
Viz můj souhrn pro nastavení percona-server (a -client) (na Ubuntu):http://gist.github .com/637669
Velikost
Velikost databáze je velmi, velmi důležitá -- věřte nebo ne, většina lidí na Intarwebech nikdy nezvládla rozsáhlé a intenzivní nastavení MySQL, ale takové skutečně existují. Někteří lidé budou trollovat a říkat něco jako:"Používejte PostgreSQL!!!111", ale teď je ignorujme.
Pointa je:soudě podle velikosti je třeba učinit rozhodnutí o hardwaru. S 1 GB RAM opravdu nemůžete zajistit rychlý běh 80GB databáze.
Indexy
Není:čím více, tím lépe. Je třeba nastavit pouze potřebné indexy a použití je třeba zkontrolovat pomocí EXPLAIN
. Přidejte k tomu EXPLAIN
MySQL je opravdu omezený, ale je to začátek.
Doporučené konfigurace
O těchto my-large.cnf
a my-medium.cnf
soubory -- ani nevím, pro koho byly napsány. Hoďte si vlastní.
Ladění primer
Skvělým začátkem je tuning primer
. Je to bash skript (nápověda:budete potřebovat linux), který přebírá výstup SHOW VARIABLES
a SHOW STATUS
a zabalí to do doufejme užitečného doporučení. Pokud váš server nějakou dobu běžel, doporučení bude lepší, protože budou k dispozici data, na kterých je možné založit.
Tuningový základ však není kouzelná omáčka. Stále byste si měli přečíst všechny proměnné, které navrhuje změnit.
Čtení
Opravdu rád doporučuji mysqlperformanceblog . Je to skvělý zdroj pro všechny druhy tipů souvisejících s MySQL. A není to jen MySQL, vědí také hodně o správném hardwaru nebo doporučují nastavení pro AWS atd.. Tito kluci mají roky a roky zkušeností.
Dalším skvělým zdrojem je planet-mysql , samozřejmě.