Structured Query Language (SQL) to język programowania specjalnego przeznaczenia używany do przechowywania, manipulowania i pobierania danych z bazy danych. Znalazł aplikacje w wielu relacyjnych systemach baz danych, w tym MySQL, Postgres, Oracle, SQL Server i innych.
Korzystając z instrukcji SQL, programiści z łatwością wykonują różne funkcjonalne operacje bazy danych, takie jak tworzenie, aktualizowanie i usuwanie danych.
Ponieważ ilość danych rośnie, a technologia staje się coraz bardziej złożona, coraz ważniejsza staje się właściwa optymalizacja baz danych MySQL, aby zapewnić wygodę użytkownikom końcowym i obniżyć koszty infrastruktury. Narzędzia do dostrajania wydajności MySQL mogą pomóc specjalistom ds. baz danych w szybkim identyfikowaniu wąskich gardeł, kierowaniu niewystarczających operacji poprzez przegląd planów wykonywania zapytań i eliminowaniu wszelkich gier w zgadywanie.
Wraz z rosnącą złożonością rosnących ilości danych i ciągle zmieniających się obciążeń, dostrajanie wydajności bazy danych i optymalizacja zapytań MySQL są teraz niezbędne, aby zmaksymalizować wykorzystanie zasobów i wydajność systemu.
Istnieje kilka powodów, które sprawiają, że dostrajanie SQL jest nieco skomplikowane dla programistów. Po pierwsze, napisanie i zrozumienie różnych planów wykonania wymaga rozległej wiedzy technicznej. Za pisanie czystych i kompletnych instrukcji SQL odpowiada ten, kto zdobędzie gruntowną wiedzę na ich temat.
Strojenie, poza swoją złożonością, jest bardzo czasochłonne. Ponieważ gdy masz do przejrzenia dużą liczbę instrukcji SQL, znalezienie informacji, które instrukcje należy dostroić, a które należy opuścić, wiąże się z pewną niepewnością. I chociaż każde stwierdzenie jest inne, ich podejście do strojenia również różni się w zależności od ich odpowiednich funkcji.
Przygotuj się na aktualizację podstawowych wskaźników internetowych
Ebook, aby przyspieszyć działanie witryny, zanim zaczniesz tracić ruch.
Dziękuję
Twoja lista jest w drodze do Twojej skrzynki odbiorczej.
W tym samouczku omówię, jak poprawić wydajność MySQL, korzystając z przydatnych wskazówek dotyczących dostrajania wydajności. Zobaczmy je szczegółowo poniżej:
Zalety dostrajania wydajności MySQL
Główna zaleta identyfikacji czynnika napędzającego wydajność bazy danych pozwala uniknąć nadmiernej alokacji i obniżyć koszty poprzez odpowiednie dobranie rozmiaru serwerów. Daje również wgląd w to, czy przeniesienie pamięci masowej danych lub zwiększenie pojemności serwera przyniesie poprawę wydajności, czy nie, a jeśli tak, to ile to będzie.
Dostrajanie bazy danych pod kątem optymalizacji wydajności zapytań MySQL nie wiąże się z bladymi wyzwaniami. Jednak po odpowiednim dostrojeniu baza danych daje wartościowe wyniki wydajności z doskonałymi funkcjami. Nie tylko zmniejsza obciążenie niepożądanego zadania, ale także optymalizuje bazę danych MySQL w celu szybszego wyszukiwania danych.
Możesz też polubić: Wskazówki dotyczące wydajności PHP w celu optymalizacji witryn
Optymalizuj zapytania za pomocą wskazówek dotyczących optymalizacji zapytań MySQL
Postępuj zgodnie z tymi najlepszymi praktykami, aby dostroić wydajność MySQL i zoptymalizować szybkość bazy danych.
Przede wszystkim należy zapewnić indeksowanie wszystkich predykatów w klauzulach WHERE, JOIN, ORDER BY i GROUP BY. WebSphere Commerce kładzie duży nacisk na indeksowanie predykatów w celu zwiększenia wydajności SQL. Ponieważ niewłaściwe indeksowanie zapytań SQL może powodować skanowanie tabeli, co ostatecznie prowadzi do problemów z blokowaniem i innych problemów.
Dlatego gorąco polecam indeksowanie wszystkich kolumn predykatów, aby baza danych mogła doświadczyć optymalizacji zapytań MySQL.
Możesz też polubić: Przewodnik po optymalizacji wydajności Laravel
Unikaj używania funkcji w predykatach
Baza danych nie używa indeksu, jeśli ma jakąś funkcję predefiniowaną w kolumnie.
Na przykład:
SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy
Ze względu na funkcję UPPER() baza danych nie wykorzystuje indeksu COL1. Jeśli nie ma sposobu na uniknięcie tej funkcji w SQL, będziesz musiał utworzyć nowy indeks oparty na funkcji lub wygenerować niestandardowe kolumny w bazie danych, aby poprawić wydajność.
Unikaj używania symbolu wieloznacznego (%) na początku predykatu
Predykat LIKE '%abc'
powoduje pełne skanowanie tabeli. Na przykład:
SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy
W większości przypadków użycie symboli wieloznacznych powoduje poważne ograniczenia wydajności.
Unikaj niepotrzebnych kolumn w klauzuli SELECT
Zamiast używać „SELECT *”, zawsze określaj kolumny w klauzuli SELECT, aby poprawić wydajność MySQL. Ponieważ niepotrzebne kolumny powodują dodatkowe obciążenie bazy danych, spowalniając jej wydajność, a także cały systematyczny proces.
Użyj sprzężenia wewnętrznego, zamiast zewnętrznego, jeśli to możliwe
Używaj sprzężenia zewnętrznego tylko wtedy, gdy jest to konieczne. Używanie go niepotrzebnie nie tylko ogranicza wydajność bazy danych, ale także ogranicza opcje optymalizacji zapytań MySQL, co skutkuje wolniejszym wykonywaniem instrukcji SQL.
Użyj DISTINCT i UNION tylko wtedy, gdy jest to konieczne
Używanie operatorów UNION i DISTINCT bez większego celu powoduje niepożądane sortowanie i spowolnienie wykonywania SQL. Zamiast UNION użycie UNION ALL zapewnia większą wydajność procesu i dokładniej poprawia wydajność MySQL.
Klauzula ORDER BY jest obowiązkowa w SQL, jeśli spodziewasz się uzyskać posortowany wynik
Słowo kluczowe ORDER BY sortuje zestaw wyników we wstępnie zdefiniowanych kolumnach instrukcji. Chociaż instrukcja przynosi korzyści administratorom bazy danych w zakresie pobierania posortowanych danych, ma również niewielki wpływ na wydajność wykonywania SQL. Ponieważ zapytanie musi najpierw posortować dane w celu uzyskania końcowego zestawu wyników, co powoduje nieco złożoną operację podczas wykonywania SQL.
Możesz też polubić: Jak połączyć dwa stoły w MySQL
Nie używaj MySQL jako kolejki
Kolejki mogą wpływać na wydajność bazy danych od samego początku i mogą wchodzić do baz danych aplikacji bez Twojej wiedzy. Na przykład, jeśli konfigurujesz status dla konkretnego elementu, aby „odpowiedni proces” miał do niego dostęp, nieumyślnie tworzysz kolejkę. To, co robi, to zwiększanie czasu ładowania, aby uzyskać dostęp do zasobu bez żadnego ważnego powodu.
Kolejki powodują problemy z dwóch głównych powodów. Serializują obciążenie, uniemożliwiając równoległe wykonywanie zadań, i często powodują powstanie tabeli zawierającej pracę w toku oraz dane historyczne z już zakończonych zadań. Nie tylko zwiększa opóźnienie aplikacji, ale także utrudnia dostrajanie wydajności MySQL.
Możesz też polubić: Jak używać Redis do kolejkowania
Zrozumienie czterech podstawowych zasobów
Do tworzenia funkcji bazy danych potrzebne są cztery podstawowe zasoby. Procesor, dysk, pamięć i sieć. Jeśli którykolwiek z nich nie działa poprawnie, ostatecznie wpływa to na serwer bazy danych i powoduje słabą wydajność.
Aby właściwie zrozumieć podstawowe zasoby, musisz skupić się na dwóch konkretnych obszarach, tj. Doborze odpowiedniego sprzętu i rozwiązywaniu z nim problemów.
Zawsze upewnij się, że używasz wszechstronnych komponentów wydajności przy wyborze sprzętu dla bazy danych MySQL. Nie tylko wybieraj najlepszych ze stosu, ale także upewnij się, że między nimi powinna istnieć odpowiednia równowaga. Często widzieliśmy, że organizacje mają tendencję do wybierania serwerów z szybkimi procesorami i dużymi dyskami, ale mylą się z brakiem pamięci, co ostatecznie obniża wydajność.
W niektórych scenariuszach dodanie pamięci staje się bardzo istotne dla poprawy wydajności, jeśli chodzi o wielkość. Wygląda to trochę sprzecznie z intuicją, ale w większości przypadków nadmierne wykorzystanie dysków wpływa bezpośrednio na wydajność bazy danych. Ponieważ brak wystarczającej ilości pamięci do przechowywania danych serwera okazuje się kosztowny i powoduje spadek wydajności bazy danych.
Jeśli chodzi o rozwiązywanie problemów, zawsze sprawdzaj wydajność wszystkich czterech podstawowych zasobów. Sprawdź jakościowo, czy działają zgodnie z potrzebami poprawy norm. Regularne branie pod uwagę tego audytu szybko rozwiąże główne pojawiające się problemy.
Zapytania o paginację
Aplikacje ze stronicowaniem mają tendencję do wyłączania serwera. Wyświetlając stronę wyników z łączem prowadzącym do następnej strony, aplikacje te zazwyczaj grupują i sortują w sposób, który nie umożliwia korzystania z indeksów, oraz wykorzystują funkcję LIMIT i przesunięcie, co powoduje, że serwer wykonuje wiele czynności. generowanie pracy, a następnie usuwanie wierszy.
Optymalizacje można znaleźć w samym interfejsie użytkownika. Zamiast pokazywać dokładną liczbę stron w wynikach wyszukiwania i linki do poszczególnych stron, możesz po prostu wyświetlić link do następnej strony. Możesz także uniemożliwić innym odwiedzanie nieistotnych stron.
Po stronie zapytania, zamiast używać LIMIT z przesunięciem, możesz wybrać jeden wiersz więcej niż potrzebujesz, a gdy użytkownik kliknie link „następna strona”, możesz wyznaczyć ten ostatni wiersz jako punkt początkowy dla następnego zestawu wyników . Na przykład, jeśli użytkownik obejrzał stronę z wierszami od 101 do 120, będziesz musiał również wybrać wiersz 121; aby wyrenderować następną stronę, zapytaj serwer o wiersze większe lub równe 121, limit 21.
Optymalizacja podzapytań MySQL
Najważniejszą radą, jaką mogę ci udzielić na temat podzapytań, jest to, że musisz preferować łączenie tam, gdzie to możliwe, przynajmniej w aktualnych wersjach MySQL.
Podzapytania są przedmiotem intensywnej pracy zespołu optymalizatorów, a nadchodzące wersje MySQL mogą zawierać więcej optymalizacji podzapytań. Sprawdzaj, która z optymalizacji znajdzie się w wydanym kodzie i jak dużą różnicę przyniosą. Chodzi mi o to, że „preferuj dołączenie” nie jest poradą na przyszłość. Serwer staje się coraz mądrzejszy, a przypadków, w których musisz powiedzieć mu, jak coś zrobić, zamiast zwracać wyniki, jest coraz mniej.
Pamięć podręczna zapytań MySQL
Jednym z najważniejszych aspektów mierzenia wydajności jest buforowanie zawartości. MySQL zapewnia buforowanie zapytań bazy danych, które buforuje tekst instrukcji SELECT i pobrany wynik. Dlatego za każdym razem, gdy tworzysz zduplikowaną bazę danych, wywołujesz pamięć podręczną zapytań MySQL, odpowie ona i wyświetli wynik z pamięci podręcznej, a żadne wywołanie nie zostanie wielokrotnie przeanalizowane. W ten sposób możesz zmaksymalizować proces optymalizacji pamięci podręcznej MySQL.
Aby skonfigurować pamięć podręczną zapytań MySQL, musisz dodać kilka ustawień do MySQL. Przede wszystkim musisz sprawdzić, czy pamięć podręczna zapytań jest dostępna, czy nie za pomocą następującego polecenia:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
To pokaże wynik, TAK. Oznacza to, że pamięć podręczna MySQL działa prawidłowo.
+------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Teraz możesz ustawić rozmiar i typ pamięci podręcznej zapytań MySQL. Pamiętaj, że minimalny domyślny rozmiar to 40 KB. Maksymalny rozmiar może wynosić 32 MB. Możesz ustawić zapytanie MySQL query_cache_size za pomocą następującego polecenia:
mysql> SET GLOBAL query_cache_size = 40000;
Typ pamięci podręcznej zapytań może określać zachowanie wszystkich połączeń. Możesz także wyłączyć pamięć podręczną zapytań dla zapytań takich jak:
mysql> SET SESSION query_cache_type = OFF;
Możesz także ustawić wartości takie jak 0,1 i 2, aby ustawić stan połączenia.
Użyj Memcached do buforowania MySQL
Memcached to rozproszony system buforowania pamięci. Przyspiesza strony internetowe posiadające duże dynamiczne bazy danych, przechowując obiekt bazy danych w pamięci dynamicznej, aby zmniejszyć obciążenie serwera, gdy zewnętrzne źródło danych żąda odczytu. Warstwa Memcached zmniejsza liczbę żądań bazy danych.
Memcached przechowuje wartości (v) za pomocą klucza (k) i pobiera wartości (v) za pomocą klucza (k) nawet bez analizowania zapytań do bazy danych i trzyma się z dala od tych wszystkich problemów.
Aby dowiedzieć się więcej o Memcached, możesz przeczytać przewodnik dotyczący konfiguracji Memcache w php.
Podsumowanie!
W tym artykule szczegółowo opisano najlepsze praktyki optymalizacji baz danych oraz przydatne wskazówki dotyczące dostrajania wydajności MySQL, które każdy programista musi znać. To kompletny przewodnik dla tych programistów backendowych, którzy nie są pewni swojej słabej wydajności bazy danych i potrzebują kilku przydatnych technik do optymalizacji bazy danych MySQL od podstaw.
Jeśli chcesz dodać swoje przemyślenia na ten temat lub zadać kilka pytań na ten temat, możesz napisać swoje komentarze w sekcji komentarzy.