Przydatne sztuczki do znajdowania i naprawiania powolnych zapytań do bazy danych WordPress
Umiarkowane zapytania SQL mogą spowolnić wykonanie witryny programistycznej aplikacji WordPress. Od czasu do czasu umiarkowane zapytania są następstwem nieodpowiedniej struktury SQL, która nigdy nie powinna była być wykonywana w ten sposób.
Co więcej, w niektórych przypadkach umiarkowane zapytania były w rzeczywistości szybkimi pytaniami w pewnym momencie – jednak w miarę jak strona stawała się coraz bardziej doświadczona, zapytania stawały się coraz wolniejsze, bezsilne, aby być świadomym rozszerzającej się bazy danych.
Pomimo tego, jak SQL stał się umiarkowany, należy zbadać kilka podejść do wykrywania i rozwiązywania problemów związanych z tworzeniem aplikacji WordPress. Tu i ówdzie ktoś może potrzebować określonej aplikacji internetowej i może nie mieć wystarczającej energii, zdolności lub planu wydatków, aby wykonać niestandardowe ulepszenia. Tworzenie bez żadnego przygotowania może być odpowiedzią na niektóre problemy, ale może zająć więcej czasu niż zaczynanie od aktualnej bazy kodu. WordPress był początkowo zorganizowany jako etap blogowania i nadal jest pod tym względem wyjątkowy. Tak czy inaczej, rozwinął się w pełnoprawny system zarządzania treścią (CMS) i, z kilku powodów, może nawet stworzyć silną aplikację internetową – szybko i przy zasadniczo niższym planie wydatków niż niestandardowe ulepszenia. Podczas gdy WordPress oferuje wbudowane aplikacje programistyczne, może być używany w aplikacjach internetowych, aby był bardziej użyteczny. Nieodłączne struktury stron i postów można wykorzystać do wielu rzeczy, ale jeśli ktoś potrzebuje niestandardowych informacji i pól, które mają być uwzględnione, wyszukane lub zakwestionowane, kontrolowane i pokazane, wymagana jest dodatkowa praca.
Znajdowanie wolnych zapytań
Znalezienie źródła pytań umiarkowanych obejmuje dwa etapy:
- Dowiedzieć się, które pytania są naprawdę umiarkowane.
- Identyfikacja programu, który je obsługuje.
Należy przyjrzeć się dwóm modułom i jednemu SaaS, które mogą umożliwić im odkrycie umiarkowanych zapytań.
Monitor zapytań
Aby uzyskać informacje o aktualnie uruchomionej stronie, można skorzystać z tego modułu. Niezależnie od całej grupy danych o wewnętrznych działaniach WordPressa, przedstawia on punkt po punkcie podział:
- Ile pytań pojawiło się w związku z tym żądaniem?
- Które zapytanie na stronie zajęło najwięcej czasu?
- Które możliwości zainwestowały najwięcej energii w pytania SQL?
- Niezależnie od tego, czy zapytania te pochodziły z modułów, tematów, czy z centrum WordPress
Ekran zapytania rozpoznaje nawet umiarkowane pytania z niepokojącą czerwoną treścią, co bardzo ułatwia wybór problemu SQL.
Pasek debugowania
Kolejnym fenomenalnym narzędziem do znajdowania mroźnego, umiarkowanego języka SQL jest stary, sprawdzony moduł Debug Bar. Pasek debugowania dostarcza danych o wewnętrznym funkcjonowaniu WordPressa, gdy strona jest załadowana takimi sprawami jak:
- Parametry WP_Query
- Zapytanie o dane (zliczanie koordynacja reguł reorganizacji)
- Zapytania SQL generowane przez obecną stronę
Aby włączyć śledzenie SQL w pasku debugowania, użytkownik powinien zezwolić na SAVEEQUERIES gdzieś na stronie — prawdopodobnie w wp-config.php
Ostrzeżenie: SAVEEQUERIES wpływa na wykonanie na stronie i prawdopodobnie nie powinno być wykorzystywane na serwerze generacji. Można go jednak użyć na maszynie postępu.
Znalezienie umiarkowanego SQL nie jest bardzo łatwe z paskiem debugowania. Na przykład nie daje użytkownikowi sortowalnych tabel ani nie zawiera umiarkowanych zapytań. To, co zapewnia pasek debugowania, to śledzenie, które kieruje użytkownika dokładnie w kierunku pochodzenia pytania.
Jest to podsumowanie załadowanych dokumentów i możliwości, które wynikają z wykonywanego zapytania. Częściej niż nie, zależy nam na absolutnej kontynuacji sekcji podsumowania; to jest miejsce, w którym wykonano umiarkowane pytanie i gdzie należy rozpocząć polowanie. Wygodną rzeczą w ustawieniu każdej pojemności, która podpowiada to pytanie, jest to, że może ujawnić wgląd w to, dlaczego SQL został wykonany w każdym przypadku.
NewRelic
NewRelic to administracja, która mierzy i monitoruje wykonanie rozwoju aplikacji internetowych, w tym rozwoju aplikacji WordPress. Administracja podaje tonę metryczną danych o wykonaniu strony. Nietrudno jest stracić poczucie kierunku w informacjach, które NewRelic przekazuje użytkownikowi co minutę szczegółowe informacje dotyczące zapytań SQL.
Istnieją dwa godne uwagi kontrasty między NewRelic a modułami, o których wspominaliśmy wcześniej:
- NewRelic daje znacznie więcej informacji na temat wykonania PHP, aż do dokładnego obliczenia czasu spędzonego w każdej funkcji
- NewRelic śledzi każde żądanie w witrynie poza zasięgiem wzroku, więc można się do niej później odnieść, aby odkryć umiarkowany SQL. Moduły po prostu dają mu obecną stronę.
Ważne jest, że NewRelic ma bezpłatny poziom aranżacji, który daje ogólne dane o wykonaniu strony, jednak trzeba będzie przejść do płatnego układu dla fantazyjnych kursów i końcówek, aby sprawdzić pojedyncze żądania i znaleźć umiarkowane zapytania.
Zrozumienie powolnego zapytania za pomocą EXPLAIN
Do tego momentu urządzenia były zabezpieczone do wyszukiwania umiarkowanych pytań. Obecnie powinno być wiadomo, dlaczego te dociekania przeszkadzają.
Hasło MySQL EXPLAIN może umożliwić, eee, wyjaśnienie, co się dzieje. Dodanie WYJAŚNIJ na początku zapytania wskazuje, w jaki sposób MySQL wykonuje pytanie. W przypadku zawiłych zapytań EXPLAIN może pomóc w rozróżnieniu umiarkowanych skupień w SQL, na przykład umiarkowanych zapytań podrzędnych lub działań marnotrawnych.
Naprawianie powolnych zapytań
Ponieważ wiadomo, że zapytania są umiarkowane, a WYJAŚNIJ wyjaśnił użytkownikowi, dlaczego tak jest, należy przyjrzeć się kilku możliwościom rozwiązania tych sennych problemów.
Opcja 1: Przekręcanie pytania
Może pojawić się pytanie, które powoduje, że ekran Edytuj post działa bardzo wolno. Zapytanie było częścią meta-pudełka pól niestandardowych.
Zdecydowany fragment SQL przynosi listę meta_keys z tabeli ks29so_postmeta, która najprawdopodobniej nie zaczyna się od znaku podkreślenia. Wyjaśnienie GROUP BY sugeruje, że każdy wynik jest wyjątkowy.
Przeprowadzając to zapytanie wiele razy, oto czas, w jakim stopniu może to zająć:
1,7145 sek
1,7911 sek
1,8076 sek
1,7707 sek
1,8456 sek
Można opracować zapytanie, które daje podobne wyniki. Musi być wybrany jako jedyny w swoim rodzaju meta_keys. Wyjątkowy jest równoważnym słowem dla szczególnego, które tak się składa, że jest wyjaśnieniem SQL!
Opcja 2: Dodanie indeksu
Podczas gdy użytkownik uruchamia pytanie SQL na ustawionej tabeli MySQL, musi zbadać całą tabelę, aby zrozumieć, które wiersze są istotne dla konkretnego zapytania. W momencie, gdy stół staje się ogromny, sprawdzanie zaczyna zająć trochę czasu.
To jest miejsce, w którym pojawiają się rekordy MySQL. Listy gromadzą informacje w tabeli i porządkują je w taki sposób, że znalezienie informacji jest o wiele mniej trudne. Sortując informacje w określony sposób, pliki pomagają zmniejszyć miarę filtrowania, jakie MySQL wykonuje dla każdego zapytania.
Pliki można dodawać do pojedynczych segmentów lub do różnych sekcji.
W przypadku pliku na meta_key pierwsze zapytanie SQL przypomina nieco to:
0,0041 sek
0,0023 sek
0,0030 sek
0,0025 sek
0,0019 sek
To jest niezwykle mądre.
Wyrażenie alertu dotyczącego plików: za każdym razem, gdy INSERT tworzy kolumnę lub UPDATE jest używany w tabeli af, lista jest ponownie określana, co może być kosztowną czynnością. Rekordy sprawiają, że czytanie z tabeli jest szybsze, ale pisanie do niej jest wolniejsze. Chociaż prawidłowo umieszczona lista indeksów może działać bardzo dobrze, nie należy mieć na jej punkcie obsesji bez sprawdzenia ogólnego wpływu listy na bazę danych.
Opcja 3: buforuj wyniki zapytania
Po uświadomieniu sobie, że istnieje umiarkowane pytanie. Zamiast zmieniać pytanie, może istnieć scenariusz, w którym po prostu odłoży się skutki zapytania. W ten sposób można by ograniczyć częstotliwość przeprowadzania dochodzenia i częściej dostawać „darmową przepustkę”.
WordPress Transients API to jeden ze sposobów rezerwowania zapytań. Transjenty są wykorzystywane do odkładania konsekwencji kosztownych zadań, np.
- Żądania do witryn zewnętrznych (na przykład otrzymywanie bieżących postów na Facebooku)
- Powolne grudki manipulacji (na przykład poszukiwanie ogromnych strun ze zwyczajową artykulacją)
- Powolne zapytania do bazy danych!
Wybór podejścia
Istnieje wiele alternatyw, które zostały określone i najprawdopodobniej istnieje siedemnaście różnych podejść do zrozumienia tego umiarkowanego dochodzenia. Jakie podejście należy przyjąć?
Wybór 1 (zmiana pytania) dał znakomite rezultaty. Należy jednak wziąć pod uwagę możliwość, że zmodyfikowane zapytanie generalnie nie ma podobnych wyników. Można nieświadomie złamać kod za pomocą nieco niewłaściwego pytania.
Alternatywa 2 (w tym zapis) nie jest zawsze możliwa do wyobrażenia w zależności od tabeli i sekcji wykorzystywanych w zapytaniu. Ze względu na tabele centrum rozwoju aplikacji WordPress, należałoby podkreślić inne efekty zapisów:
- Czy procedura odświeżania centrum wymaga dodatkowych list?
- Czy dołączenie pliku ograniczy różne zapytania, podobnie jak INSERT i UPDATE?
Alternatywa 3 (rezerwacja wyników za pomocą osób bezdomnych) ma znikomy wpływ – użytkownik nie musi zmieniać pierwszego zapytania i nie ma potrzeby dostosowywania struktury bazy danych.
Zwykle ludzie wybierają opcję 3. W konkretnym przypadku może wybrać inną alternatywę, opierając się na naprawianym pytaniu lub konkretnej witrynie, w której występują problemy z SQL. Z pewnością nie ma jednej uniwersalnej odpowiedzi na większość problemów związanych z wykonaniem, więc można różnić się od decyzji innych — lub spróbować każdej z trzech bez chwili zwłoki!
Bądź na bieżąco
Tutaj naszkicowano autentyczny problem. Pole Custom Fields w CSS-Tricks naprawdę było przestępcą w przypadku niektórych bardzo umiarkowanych zapytań do bazy danych. Nakreślił również różne sposoby potencjalnego porozumienia.
Wymyślanie zupełnie nowych pomysłów
Istnieją różne metodologie, które można zastosować, aby spróbować i przyspieszyć wykonanie pytania, które obejmują więcej pracy niż tylko dostosowanie zapytania lub dołączenie listy. Jedną z najwolniejszych części pytania jest praca wykonana w celu połączenia tabel, aby przejść od identyfikatora klienta do identyfikatora elementu, i należy to zrobić dla każdego klienta.
Można zdenormalizować informacje, tworząc tabelę przechowującą informacje o pozwoleniu, wraz z identyfikatorem klienta i identyfikatorem elementu dla wszystkich licencji i po prostu zapytaniem o to dla konkretnego klienta. Trzeba by zmodyfikować tabelę za pomocą wyzwalaczy MySQL na INSERT/UPDATE/DELETE do tabeli licencji (lub innych polegających na tym, jak informacje mogą się zmienić), jednak znacznie poprawiłoby to wykonanie kwestionowania tych informacji.
Tak więc, jeśli różne łączenia spowalniają pytanie w MySQL, szybsze może być podzielenie zapytania na co najmniej dwie artykulacje i wykonanie ich niezależnie w PHP, a następnie zebranie i ukierunkowanie wyników w kodzie.