Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 15232|Odpowiedź: 3

[Źródło] Procesor MySQL 100% wysokiego rozwiązania

[Skopiuj link]
Opublikowano 11.10.2018 11:20:31 | | | |
Otwórz menedżera zadań serwera i zobacz, że proces CPU zawsze był 99%, a widok zajmuje proces mysql, który był wysoki.


Wyjście polecenia processlist pokazuje, które wątki są uruchomione, a także możesz sprawdzić aktualny stan działania bazy danych.

1. Przejdź do katalogu mysql/bin i wpisz listę procesów mysqladmin;
2. Uruchom mysql i wpisz listę "pokaż processlist".
Jeśli masz uprawnienia SUPER, możesz zobaczyć wszystkie wątki, w przeciwnym razie zobaczysz tylko wątki swojego konta.





Znaczenie i cel każdej kolumny

id: Identyfikator
użytkownik: wyświetla aktualnego użytkownika, jeśli nie jest root, to polecenie wyświetli tylko instrukcje SQL w ramach uprawnień.
host: pokazuje, z którego adresu IP pochodzi to oświadczenie z którego portu
db: Wyświetla bazę danych, do której proces jest aktualnie podłączony.
Komenda: Wyświetla polecenia wykonywane przez bieżące połączenie, zwykle Sleep, Query i Connect.
czas: Czas trwania tego stanu, w sekundach.
stan: Wyświetla status instrukcji sql, która korzysta z aktualnego połączenia, ale zapytano tylko określony stan wykonania instrukcji, czyli instrukcja sql, na przykład może wymagać kopiowania do tabeli tmp, sortowania wyników, wysyłania danych itp
info: Wyświetla to zdanie SQL, ponieważ jego długość jest ograniczona, więc długie zdanie SQL nie jest w pełni wyświetlane, ale stanowi ważną podstawę do oceny sformułowania problemu.


Okazuje się, że istnieją dwa polecenia SQL zapytania, które zajmują najwięcej czasu i nie zostały wykonane dłużej niż 1000 sekund, a instrukcje SQL skopiowane z pola info są wspólnym zapytaniem, w następujący sposób:

wybierz cast(count(*) jako PODPISANY) jako col_0_0_ z 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ tam, gdzie baseinfoco1_. CompanyId=ratedpasse0_. Identyfikator firmy i ordermatch2_. OrderId=ratedpasse0_. OrderId

Zabijamy proces tych dwóch sformułowań zapytań

Po 10 sekundach oczekiwania zauważyłem, że procesor mocno spadł, ale nadal był bardzo wysoki i będę dalej pytał o przyczynę!



Aby użyć wspólnego zapytania join, dodaj indeks do powiązanego pola lub zmodyfikuj kod zapytania programu.
Utwórz indeksowe wyznaczenie SQL

Koniec





Poprzedni:Zalogowanie się do Wordpressa w C#
Następny:Modyfikacja metody mapowania portów dla kontenerów docker
 Ziemianin| Opublikowano 11.10.2018 13:03:02 |
Najważniejszym elementem tego polecenia jest kolumna stanów, a stany wymienione w mysql są głównie następujące:

Tabela kontrolna  
  Sprawdzam kartę katalogową (to jest automatyczna).  
  Stoły zamykające  
  Dane zmodyfikowane w tabeli są przenoszone na dysk, a tabela, która została zużyta, jest zamykana. To szybka operacja, jeśli nie, sprawdź, czy przestrzeń na dysku jest zajęta lub czy dysk jest obciążony.  
  Connect Out  
  Serwer slave replikacji łączy się z serwerem głównym.  
  Kopiowanie do tabeli tmp na dysku  
  Ponieważ tymczasowy zbiór wyników jest większy niż tmp_table_size, tabela tymczasowa jest konwertowana z pamięci na dysk, aby zachować pamięć.  
  Tworzenie tabeli tmp  
  Tworzona jest tymczasowa tabela, która przechowuje niektóre wyniki zapytań.  
  usuwanie z głównej tabeli  
  Serwer wykonuje pierwszą część usuwania wielu tabel i właśnie usunął pierwszą tabelę.  
  usuwanie z tabel referencyjnych  
  Serwer wykonuje drugą część usuwania wielu tabel, czyli usuwanie rekordów z innych tabel.  
  Tablice do płukania  
  Robię TABLICE FLUSH, czekam aż inne wątki zamkną tabelę danych.  
  Zabity  
  Jeśli do wątku zostanie wysłane żądanie zabicia, wątek sprawdzi flagę zabicia i porzuci kolejne żądanie zabicia. MySQL sprawdza flagi wyłączenia w każdej głównej pętli, choć w niektórych przypadkach wątek może zostać wyłączony na krótki czas. Jeśli wątek zostanie zablokowany przez inny wątek, żądanie zakończenia zadziała natychmiast po zwolnieniu blokady.  
  Zablokowane  
  Zablokowane przez inne zapytania.  
  Wysyłanie danych  
  Rekord zapytania SELECT jest przetwarzany, podczas gdy wyniki są wysyłane do klienta.  
  Sortowanie dla grupy  
  Sortowanie dla GRUP BY.  
  Sortowanie pod kątem kolejności  
  Sortowanie jest prowadzone dla ORDER BY.  
  Tabele otwarcia  
  Proces ten powinien być szybki, chyba że przeszkadzają mu inne czynniki. Na przykład tabela danych nie może zostać otwarta przez inny wątek, dopóki nie zostanie wykonana instrukcja ALTER TABLE lub LOCK TABLE. Próba otwarcia stołu.  
  Usuwanie duplikatów  
  Wykonywane jest SELECT Distinct zapytanie, ale MySQL nie jest w stanie zoptymalizować zduplikowanych rekordów w poprzednim etapie. Dlatego MySQL musi ponownie usunąć zduplikowane rekordy przed wysłaniem wyników do klienta.  
  Stoł ponownego otwarcia  
  Uzyskuje się blokadę na tabeli, ale musi ona zostać zmodyfikowana po modyfikacji struktury tabeli. Już zwolniłem zamek, zamknąłem kartę danych i próbuję ponownie otworzyć tabelę danych.  
  Naprawa przez sortowanie  
  Instrukcja fix to sortowanie w celu utworzenia indeksu.  
  Naprawa za pomocą keycache  
  Dyrektywa naprawcza polega na wykorzystaniu pamięci podręcznej indeksów do tworzenia nowych indeksów jeden po drugim. Będzie wolniejsze niż Naprawa przez sortowanie.  
  Wyszukiwanie w wierszach pod kątem aktualizacji  
  Kwalifikujące się dokumenty są identyfikowane do aktualizacji. Musi to zostać zrobione przed modyfikacją odpowiedniego rekordu przez AKTUALIZACJĘ.  
  Spanie  
  Czekam, aż klient wyśle nowe żądanie.  
  System lock  
  Czekam na uzyskanie zewnętrznej blokady systemowej. Jeśli nie działa żaden serwer mysqld jednocześnie żądający tej samej tabeli, zewnętrzne blokady systemowe można zabronić, dodając parametr –skip-external-lock.  
  Zamek modernizacyjny  
  INSERT DELAYED to próba wprowadzenia nowego rekordu w tabeli blokady.  
  Aktualizacja  
  Wyszukiwanie pasujących rekordów i ich modyfikacja.  
  Blokada użytkownika  
  czeka na GET_LOCK().  
  Obsługa stolików  
  Wątek został powiadomiony, że struktura arkusza danych została zmodyfikowana i należy ją ponownie otworzyć, aby otrzymać nową konstrukcję. Następnie, aby ponownie otworzyć tabelę danych, musisz poczekać, aż wszystkie inne wątki zamkną tabelę. To powiadomienie pojawia się w następujących przypadkach: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE lub OPTIMIZE TABLE.  
  Czekam na wkładkę handlera  
  INSERT DELAYED przetworzył wszystkie oczekujące wstawki i czeka na nowe żądanie.  
  Większość stanów odpowiada szybkim operacjom, o ile wątek pozostaje w tym samym stanie przez kilka sekund, może pojawić się problem wymagający sprawdzenia.
 Ziemianin| Opublikowano 01.03.2019 10:26:49 |
 Ziemianin| Opublikowano 01.03.2019 10:34:13 |


Zapytanie do fragmentu danych zajmuje 10 sekund.
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com