Maksymalne wykorzystanie pamięci MySQL w dużej mierze zależy od sprzętu, ustawień i samej bazy danych.
Sprzęt komputerowy
Sprzęt jest oczywistą częścią. Im więcej pamięci RAM tym lepiej, szybciej dyski FTW . Nie wierz jednak w te comiesięczne lub cotygodniowe listy informacyjne. MySQL nie skaluje liniowo - nawet na sprzęcie Oracle. To trochę trudniejsze niż to.
Najważniejsze jest to, że nie ma ogólnej zasady dotyczącej tego, co jest zalecane dla Twojej konfiguracji MySQL. Wszystko zależy od aktualnego wykorzystania lub prognoz.
Ustawienia i baza danych
MySQL oferuje niezliczone zmienne i przełączniki do optymalizacji jego zachowania. Jeśli napotkasz problemy, naprawdę musisz usiąść i przeczytać instrukcję (f'ing).
Jeśli chodzi o bazę danych - kilka ważnych ograniczeń:
- Silnik Stół (
InnoDB
, MyISAM
...)
- rozmiar
- indeksy
- stosowanie
Większość porad MySQL na temat stackoverflow powie Ci o 5-8 tak zwanych ważnych ustawieniach. Po pierwsze, nie wszystkie z nich mają znaczenie - np. Alokowanie dużej ilości zasobów do InnoDB i nieużywanie InnoDB nie ma większego sensu, ponieważ te zasoby są marnowane.
Lub - wiele osób sugeruje, aby podnieść max_connection
zmienną - cóż, mało wiedzą, że oznacza to również, że MySQL przydzieli więcej zasobów, aby je zaspokoić max_connections
- jeśli kiedykolwiek będzie to potrzebne. Bardziej oczywistym rozwiązaniem może być zamknięcie połączenia z bazą danych w DBAL lub obniżenie w wait_timeout
celu zwolnienia tych wątków.
Jeśli złapiesz mój dryf - jest naprawdę dużo, dużo do przeczytania i nauczenia się.
Silniki
Silniki stołowe to dość ważna decyzja, wiele osób zapomina o nich wcześnie, a potem nagle zaczyna walczyć ze MyISAM
stołem o rozmiarze 30 GB, który blokuje całą ich aplikację.
Nie chcę przez to powiedzieć, że MyISAM jest do niczego , ale InnoDB
można go dostosować, aby odpowiadał prawie lub prawie tak szybko, jak MyISAM
i oferuje coś takiego jak blokowanie wierszy, UPDATE
podczas gdy MyISAM
blokuje całą tabelę, gdy jest zapisywana.
Jeśli masz swobodę uruchamiania MySQL na własnej infrastrukturze, możesz również chcieć sprawdzić serwer Percona, ponieważ zawiera wiele wkładów od firm takich jak Facebook i Google (wiedzą one szybko), zawiera również własny drop - Percona. w zamian za InnoDB
tzw XtraDB
.
Zobacz moje podsumowanie konfiguracji percona-server (i -client) (na Ubuntu): http://gist.github.com/637669
Rozmiar
Rozmiar bazy danych jest bardzo, bardzo ważny - wierz lub nie, większość ludzi w Intarwebs nigdy nie radziła sobie z dużą i intensywną konfiguracją MySQL, ale one naprawdę istnieją. Niektórzy ludzie będą trollować i mówić coś w stylu „Użyj PostgreSQL !!! 111”, ale na razie zignorujmy je.
Najważniejsze jest to: sądząc po rozmiarze, należy podjąć decyzję o sprzęcie. Naprawdę nie można sprawić, by baza danych 80 GB działała szybko na 1 GB pamięci RAM.
Indeksy
Nie jest: im więcej, tym weselej. Należy ustawić tylko potrzebne wskaźniki i sprawdzić ich użycie EXPLAIN
. Dodaj do tego, że MySQL EXPLAIN
jest naprawdę ograniczony, ale to dopiero początek.
Sugerowane konfiguracje
O tych my-large.cnf
i my-medium.cnf
plikach - nawet nie wiem, dla kogo zostały napisane. Skręć swój własny.
Podkład tuningowy
Świetny początek to elementarz tuningowy . Jest to skrypt bash (wskazówka: trzeba linux), który trwa wyjście SHOW VARIABLES
i SHOW STATUS
i zawija je w miejmy nadzieję użytecznych rekomendacji. Jeśli twój serwer działał jakiś czas, zalecenie będzie lepsze, ponieważ będą dane, na których można je oprzeć.
Jednak baza do strojenia nie jest magicznym sosem. Nadal powinieneś czytać wszystkie zmienne, które proponuje zmienić.
Czytanie
Bardzo lubię polecać blog mysqlperformanceblog . To świetne źródło wszelkiego rodzaju porad związanych z MySQL. I to nie tylko MySQL, oni też dużo wiedzą o odpowiednim sprzęcie lub zalecają konfiguracje dla AWS itp. Ci goście mają wieloletnie doświadczenie.
Kolejnym świetnym zasobem jest oczywiście planet-mysql .