Przydatne sztuczki do znajdowania i naprawiania powolnych zapytań do bazy danych WordPress

Opublikowany: 2019-04-17

Umiarkowane 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 witryna stawała się bardziej zaprawiona, 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 może być wymagana pewna aplikacja internetowa i może nie mieć wystarczającej energii, umiejętności lub planu wydatków, aby dokonać niestandardowych ulepszeń. 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 można wykorzystać do wielu rzeczy, ale jeśli nie ma potrzeby dołączania, wyszukiwania lub kwestionowania, kontrolowania i pokazywania niestandardowych informacji i pól, wymagana jest dodatkowa praca.

Znajdowanie powolnych zapytań

Odnalezienie źródła pytań umiarkowanych obejmuje dwa etapy:

  1. Dowiedzieć się, które pytania są naprawdę umiarkowane.
  2. 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 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

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:

  1. Parametry WP_Query
  2. Dane żądania (zliczanie koordynowania reguł modernizacji)
  3. Zapytania SQL generowane przez tę 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ś interesuje się 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ć poczucie kierunku w informacjach, które NewRelic przekazuje 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 odnosiliśmy się wcześniej:

  1. NewRelic daje znacznie więcej informacji na temat wykonywania PHP, aż do dokładnego obliczenia czasu spędzonego w każdej funkcji
  2. 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ł bezpłatny poziom aranżacji, który daje ogólne dane o wykonaniu strony, jednak trzeba będzie przejść na płatną aranżację, aby uzyskać wymyślne drobiazgi, aby sprawdzić pojedyncze żądania i znaleźć umiarkowane zapytania.

Zrozumienie powolnego zapytania z EXPLAIN

Do tego momentu urządzenia były zabezpieczone do wyszukiwania umiarkowanych pytań. Obecnie 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 zająć:

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 to:

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. Chociaż właściwie 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

Kiedy zdamy sobie sprawę, że istnieje umiarkowane pytanie. Zamiast zmieniać pytanie, może istnieć scenariusz, w którym po prostu odłożysz 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 zewnętrznych witryn (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 zerwać kod z 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 INSERT i UPDATE?

Wariant 3 (zarezerwowanie wyników za pomocą osób bezdomnych) ma niewielki 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 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 spróbować wszystkich trzech bez chwili opóźnienia!

Bądź na bieżąco

Nakreślił tutaj prawdziwy problem. Pole pól niestandardowych w CSS-Tricks naprawdę było przestępcą w przypadku bardzo umiarkowanych zapytań do bazy danych. W podobny sposób nakreślono różne drogi w kierunku 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, aby połączyć tabele, 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ę za pomocą wyzwalaczy MySQL przy INSERT/UPDATE/DELETE do tabeli licencji (lub innych, w zależności od tego, 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.