Przejdź do treści

MySQL – optymalizacja i wydajność

O pracy MySQL DBA – przemyślenia administratora

Archiwa

Kategoria: MySQL

Aktualizacja

Od roku 2010 trochę się już zmieniło w tej kwestii. Stan obecny (5.6-rc1) najlepiej opisuje poniższy post:
http://dimitrik.free.fr/blog/archives/11-01-2012_11-30-2012.html
W skrócie, InnoDB jest szybsze praktycznie w każdym elemencie. Pora najwyższa zapomnieć o MyISAM. A teraz wracamy do oryginalnego wpisu.

 

Przeglądałem właśnie w Google Analytics statystyki bloga dla ostatniego miesiąca i z tego co widzę, bardzo często zadawane są pytania na temat tego, czy lepszym rozwiązaniem jest zastosowanie InnoDB, czy też jednak MyISAM? Skoro jest zapotrzebowanie, to napiszę coś w tym temacie, szczególnie że kilka postów na temat tych silników na blogu już się pojawiło i będzie dobra okazja żeby zebrać je w jednym miejscu. No to zaczynamy.
czytaj dalej…

Co to jest JOIN, jakie są jego rodzaje, jak działa i cała reszta teorii – pozwolę sobie pominąć. W internecie można znaleźć setki stron z informacjami o takich podstawach języka SQL. Dziś chciałbym zwrócić uwagę osobom piszącym zapytania na jedną, bardzo istotną kwestię dotyczącą JOINów. Domyślam się, że dla sporej części czytelników ten post nie będzie odkrywał nic nowego. W praktyce jednak często okazuje się, że sporo twórców aplikacji nie jest świadomych konsekwencji zapytań, które piszą. Liczę po cichu że choć kilka takich osób trafi na ten post i zrozumie dlaczego z wydajnością JOINów bywa różnie.

czytaj dalej…

MySQL umożliwia zakładanie indeksów na kilka kolumn. To oczywiście nic nowego. Tego typu indeks jest przydatny jeśli w zapytaniu mamy np. warunek WHERE z kilkoma kolumnami. W takiej sytuacji jesteśmy w stanie wykorzystać to, że kombinacja tych warunków pasuje do mniejszej rekordów niż każdy z tych warunków z osobna. Czy tak jest zawsze?
czytaj dalej…

Tabele tymczasowe kojarzą się głównie z przeciętną, żeby nie powiedzieć kiepską wydajnością zapytań. MySQL tworzy takie tabele w momencie gdy konieczne jest np. posortowanie wyników w sposób wykluczający użycie indeksów, jeśli wyniki są grupowane bez użycia indeksów, jeśli wykorzystywane są podzapytania i w wielu innych przypadkach. Tabele tymczasowe są tworzone przez MySQL automatycznie, istnieje też możliwość samodzielnego utworzenia takiej tabeli przez użytkownika. O tabelach generowanych przez MySQL, o ich cechach i o tym kiedy i dlaczego są tworzone pisałem już wcześniej. Dziś parę słów o tabelach “na żądanie”.
czytaj dalej…

Kilka miesięcy temu pisałem na temat nowości, jakie Oracle zaimplementowało w MySQL 5.6 Do tej listy ostatnio dopisana została kolejna pozycja. InnoDB wzbogaciło się o mechanizm wyszukiwania pełnotekstowego. Zgodnie z informacjami przedstawionymi przez Oracle, zachowana została zgodność na poziomie SQL z mechanizmem wyszukiwania pełnotekstowego wbudowanegow MyISAM. Dzięki temu nie powinno być problemów aby przenieść kod z jednego silnika na drugi – koniecznych zmian nie powinno być wiele, może nawet uda się w ogóle ich uniknąć.

czytaj dalej…

Nie jestem pewny, czy dobrze tłumaczę z angielskiego frazę “rule of thumb”, ale w dzisiejszym poście o takich właśnie zasadach chciałbym kilka słów napisać. Jeśli chodzi o konfigurację MySQL to kilka tego typu zaleceń można w internecie znaleźć. Czy mają one sens? Czy faktycznie są to “dobre praktyki”?
czytaj dalej…

W poprzednim poście zaczęliśmy opowiadanie o tym, czym jest NULL i jak się zachowuje. Dzisiejszym postem kontynuujemy ten temat.
czytaj dalej…

Czym jest NULL? Co to za wartość? Jakie ma cechy? Jak zachowuje się w zapytaniach? Czy wartość NULL ma jakąkolwiek wartość? Czym NULL różni się od zera? Czy różni się w ogóle? Wbrew pozorom, te pytania nie są rzadkością – odpowiedź na nie potrafi być problemem także dla administratorów i programistów z dłuższym stażem obcowania z MySQL. Jak to więc z NULL jest?

czytaj dalej…

Otrzymujemy informację, że są problemy z działaniem bazy danych. MySQL zwraca błąd, że wyczerpały się limity połączeń. Szybki rzut okiem na obciążenie serwera – może jakieś ciężkie zapytanie przyblokowało pozostałe? Nie tym razem, serwer okazuje się mieć duży zapas mocy, nie widać żadnego skoku obciążenia czy to na dysku, czy to na CPU. SHOW PROCESSLIST pokazuje faktycznie dużą ilość połączeń od “unauthenticated user” wiszących na poleceniu “Connect” i w stanie “reading from net”. O co chodzi?
czytaj dalej…

Ostatnio mam pewne kłopoty z czasem wolnym, dlatego też tym razem pozwolę sobie na lekki „recycling”. Na fan page mojego pracodawcy znajduje się mój artykuł dotyczący tego, co powinno się wiedzieć zanim zdecydujemy się na zastosowanie natywnej replikacji MySQL

Coś w tym stylu było już  tu na blogu, tam jest trochę bardziej rozszerzona wersja. Pewne elementy marketingowe oczywiście się tam pojawiły, ale jakieś meritum też można znaleźć. Zapraszam do lektury. Następny wpis, obiecuję, będzie już bardziej świeży.

Replikacja w MySQL – sprawdź czy już to wiesz