Przydatne sztuczki do znajdowania i naprawiania powolnych zapytań do bazy danych WordPress
Opublikowany: 2019-04-17Umiarkowane zapytania SQL mogą utrudniać wykonanie witryny tworzenia aplikacji WordPress. Od czasu do czasu umiarkowane zapytania są następstwem nieodpowiednio ustrukturyzowanego SQL, który nigdy nie powinien być wykonywany 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ę bardziej doprawiona, dochodzenie stawało się coraz wolniejsze i bezsilne, aby pozostać świadomym rozszerzającej się bazy danych.
Pomimo tego, że 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 wymagać określonej aplikacji internetowej i może nie mieć wystarczającej energii, umiejętności lub planu wydatków, aby dokonać niestandardowego ulepszenia. Tworzenie bez żadnego przygotowania może być odpowiedzią na niektóre problemy, ale może zająć więcej czasu niż rozpoczęcie od aktualnej bazy kodu. WordPress był początkowo skonstruowany jako etap blogowania i nadal jest w tym wyjątkowy. Tak czy inaczej, rozwinął się w pełnoprawny system zarządzania treścią (CMS) i, dla kilku celów, może nawet stworzyć silną aplikację internetową – szybko i przy zasadniczo niższym planie wydatków niż niestandardowe ulepszenia. Chociaż 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 mogą być wykorzystane do wielu rzeczy, ale jeśli ktoś potrzebuje niestandardowych informacji i pól do uwzględnienia, wyszukania lub zakwestionowania, kontrolowania i pokazywania, wymagana jest dodatkowa praca.
Znajdowanie powolnych zapytań
Odnalezienie ź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 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łego klastra danych o wewnętrznych działaniach WordPressa, daje on podział punkt po punkcie:
- Ile pytań pojawiło się w związku z tym żądaniem?
- Które zapytanie na stronie zajęło maksymalny czas?
- Jakie moce zainwestowały najwięcej energii w pytania dotyczące SQL?
- Niezależnie od tego, czy zapytania te pochodziły z modułów, tematów lub centrum WordPress
Ekran zapytania rozpoznaje nawet umiarkowane pytania z niepokojącą czerwoną treścią, co bardzo ułatwia wybór problemu SQL.
Pasek debugowania
Innym fenomenalnym narzędziem do wyszukiwania mroźno umiarkowanego SQL jest stary, sprawdzony moduł Debug Bar. Debug Bar dostarcza jedne dane o wewnętrznym funkcjonowaniu WordPressa, gdy strona jest załadowana sprawami takimi jak:
- Parametry WP_Query
- Dane żądania (zliczanie koordynowania reguł modernizacji)
- Zapytania SQL generowane przez niniejszą stronę
Aby włączyć śledzenie SQL na pasku debugowania, użytkownik powinien wskazać, aby zezwolić na ZAPISYWANIE gdzieś w witrynie — prawdopodobnie w wp-config.php
Uwaga: SAVEQUERIES wpływa na wykonywanie w witrynie i prawdopodobnie nie powinno być używane na serwerze generacji. Można go jednak używać na zaawansowanej maszynie.
Znalezienie umiarkowanego kodu SQL nie jest bardzo łatwe z paskiem debugowania. Na przykład nie udostępnia tabel, które można sortować, ani nie oferuje umiarkowanych zapytań dla użytkownika. To, co zapewnia pasek debugowania, to śledzenie pojemności, które kieruje użytkownika dokładnie w kierunku pochodzenia pytania.
Jest to zestawienie załadowanych dokumentów i zdolności, które wynikają z wykonywanego zapytania. Częściej niż nie, ktoś jest zainteresowany absolutną kontynuacją sekcji w podsumowaniu; to jest miejsce, w którym zostało wykonane umiarkowane pytanie i gdzie należy rozpocząć polowanie. Wygodną rzeczą związaną z ustawieniem każdej pojemności, która powoduje to pytanie, jest to, że może ujawnić wgląd w to, dlaczego w każdym przypadku SQL został wykonany.
Nowy relikt
NewRelic to administracja, która mierzy i monitoruje wykonanie tworzenia aplikacji internetowych, w tym tworzenia aplikacji WordPress. Administracja podaje metryczną tonę danych o wykonaniu witryny. Nie jest trudno stracić orientację w informacjach, które NewRelic podaje użytkownikowi w każdej minucie szczegółowe informacje dotyczące zapytań SQL.
Istnieją dwa godne uwagi kontrasty między NewRelic a modułami, do których odwoływaliśmy się wcześniej:
- NewRelic daje znacznie większy wgląd w wykonanie PHP, aż do dokładnego obliczenia czasu spędzonego w każdej funkcji
- NewRelic śledzi każde żądanie do witryny poza zasięgiem wzroku, dzięki czemu można później odwołać się do niego, aby odkryć umiarkowany SQL. Moduły po prostu dają mu obecną stronę.
Ważne jest, aby NewRelic posiadał darmowy poziom aranżacji, który daje ogólne dane na temat wykonania strony, jednak trzeba będzie przejść na płatną aranżację, aby uzyskać fantazyjne drobiazgi w celu sprawdzenia pojedynczych żądań i znalezienia umiarkowanych zapytań.
Zrozumienie powolnego zapytania z EXPLAIN
Do tego momentu urządzenia były zabezpieczone do wyszukiwania umiarkowanych pytań. Teraz powinno być wiadomo, dlaczego te dociekania przeszkadzają.
Hasło przewodnie MySQL EXPLAIN może umożliwić, er, wyjaśnienie, co się dzieje. Dodanie EXPLAIN na początku zapytania wskazuje, w jaki sposób MySQL wykonuje pytanie. W przypadku skomplikowanych zapytań, EXPLAIN może pomóc odróżnić umiarkowane skupienia w zapytaniach SQL, na przykład umiarkowane podzapytania lub marnotrawstwo działań.
Naprawianie powolnych zapytań
Ponieważ zdano sobie sprawę, że zapytania są umiarkowane, a EXPLAIN ujawnił użytkownikowi, dlaczego tak jest, należy zwrócić uwagę na kilka opcji, aby naprawić te senne problemy.
Opcja 1: Przekręcanie pytania
Może pojawić się pytanie, które powoduje, że ekran edycji posta działa bardzo wolno. Zapytanie było kawałkiem metaboxa pól niestandardowych.
Zdecydowanym elementem SQL jest pobranie listy meta_keys z tabeli ks29so_postmeta, która według wszelkiego prawdopodobieństwa nie zaczyna się znakiem podkreślenia. Wyjaśnienie GROUP BY sugeruje, że każdy wynik jest wyjątkowy.
Wielokrotne uruchamianie tego zapytania, oto czas, w jakim stopniu może to potrwać:
1,7145 s
1,7911 s
1.8076 s
1,7707 s
1,8456 s
Można stworzyć zapytanie, które da podobne wyniki. Musi być wybrany jako jedyny w swoim rodzaju meta_klucz. Wyjątkowy to odpowiednik słowa „szczególny”, który tak się składa, że jest wyjaśnieniem SQL!
Opcja 2: Dodanie indeksu
Podczas gdy użytkownik zadaje 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 trwać dość długo.
To jest miejsce, w którym pojawiają się rekordy MySQL. Listy zbierają informacje w tabeli i układają je w taki sposób, aby znalezienie informacji było o wiele mniej trudne. Poprzez uporządkowanie informacji w określony sposób, pliki pomagają zmniejszyć stopień filtrowania, które MySQL wykonuje dla każdego zapytania.
Pliki można dodawać do pojedynczych segmentów lub do różnych sekcji.
Z plikiem na meta_key, pierwsze pytanie SQL przypomina nieco ten:
0,0041 s
0,0023 s
0,0030 s
0,0025 s
0,0019 s
To jest niezwykle mądre.
Wyrażenie ostrzeżenia o plikach: Za każdym razem, gdy INSERT wykonuje kolumnę lub UPDATE jest używana w tabeli af, lista jest ponownie ustalana, co może być kosztowną czynnością. Rekordy przyspieszają przeglądanie z tabeli, ale pisanie do niej jest wolniejsze. Prawidłowo umieszczona lista indeksów może działać bardzo dobrze, ale nie należy mieć na jej punkcie obsesji bez sprawdzenia ogólnego wpływu listy na bazę danych.
Opcja 3: Buforuj wyniki zapytania
Gdy zdamy sobie sprawę, że istnieje umiarkowane pytanie. Zamiast zmieniać pytanie, może istnieć scenariusz, w którym po prostu odkłada się skutki zapytania. W ten sposób ograniczono by częstotliwość przeprowadzania dochodzenia i częściej otrzymywałby „darmową przepustkę”.
WordPress Transients API to jeden ze sposobów na rezerwację zapytań. Transjenty są wykorzystywane do odkładania konsekwencji kosztownych zadań, na przykład
- Żądania do stron zewnętrznych (na przykład otrzymywanie bieżących postów na Facebooku)
- Powolne bryły manipulacji (np. poszukiwanie ogromnych strun ze zwyczajową artykulacją)
- Powolne zapytania do bazy danych!
Wybór podejścia
Istnieje wiele alternatyw, które zostały przedstawione, i najprawdopodobniej istnieje siedemnaście różnych podejść do zrozumienia tego umiarkowanego dociekania. Jakie podejście należy przyjąć?
Wybór 1 (zmiana pytania) przyniósł wspaniałe rezultaty. Należy jednak wziąć pod uwagę możliwość, że zmodyfikowane zapytanie na ogół nie daje podobnych wyników. Można nieświadomie złamać kod nieco nietypowym pytaniem.
Alternatywa 2 (w tym zapis) nie jest stale możliwa do wyobrażenia w zależności od tabeli i sekcji wykorzystywanych przez zapytanie. Ze względu na tabele centrum rozwoju aplikacji WordPress, należałoby podkreślić inne efekty rekordów:
- Czy centrum odświeżania oczekuje dodatkowych list?
- Czy dołączenie pliku ograniczy różne zapytania, podobnie jak w przypadku INSERT i UPDATE?
Wariant 3 (zarezerwowanie wyników za pomocą osób bezdomnych) ma znikomy efekt – 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 on wybrać inną alternatywę, opierając się na pytaniu, które naprawia lub na konkretnej stronie, w której występują problemy z SQL. Z pewnością nie ma jednej uniwersalnej odpowiedzi na większość problemów z wykonaniem, więc jeden może różnić się od decyzji innych – lub próbować każdego z trzech bez chwili zwłoki!
Bądź na bieżąco
Nakreślił tutaj prawdziwy problem. Pole Custom Fields w CSS-Tricks naprawdę było przestępcą w przypadku bardzo umiarkowanych zapytań dotyczących bazy danych. Nakreślił również różne drogi do potencjalnych rozwiązań.
Myślenie o zupełnie nowych pomysłach
Istnieją różne metodologie, które można zastosować, aby spróbować i przyspieszyć wykonanie pytania, które obejmują więcej pracy niż zwykłe ulepszenie zapytania lub dodanie listy. Jedną z najwolniejszych części pytania jest praca wykonana przy łączeniu tabel, aby przejść od identyfikatora klienta do identyfikatora przedmiotu, i należy to zrobić dla każdego klienta.
Można zdenormalizować informacje, tworząc tabelę, która przechowuje informacje o pozwoleniach, wraz z identyfikatorem klienta i identyfikatorem pozycji dla wszystkich licencji, i po prostu pytaj o to dla konkretnego klienta. Należałoby zmodyfikować tabelę wykorzystującą wyzwalacze MySQL przy INSERT/UPDATE/DELETE do tabeli licencji (lub innych, polegających na tym, jak informacje mogą się zmienić), jednak znacznie poprawiłoby to wykonywanie kwestionowania tych informacji.
Tak więc, jeśli różne sprzężenia łagodzą pytanie w MySQL, szybciej może być rozbicie zapytania na co najmniej dwie artykulacje i wykonanie ich niezależnie w PHP, a następnie zebranie i ukierunkowanie wyników w kodzie.