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

Widok: 33231|Odpowiedź: 6

[Źródło] MySQL analizuje wysokie zużycie CPU w sytuacjach o wysokiej równobieżności

[Skopiuj link]
Opublikowano 05.09.2017 20:23:59 | | | |


Ostatnio, z różnych powodów, liczba odwiedzin na stronie gwałtownie wzrosła, a z danych wynika, że liczba jednoczesnych połączeń przekracza 1 200

Ponieważ konfiguracja serwera jest bardzo niska, 1 rdzeń i pamięć 2G, a dostęp do strony internetowej jest bardzo wolny, gdy jest dużo osób


Używamy górnej komendy do sprawdzania, mysql zajmuje dużo CPU i pamięci, a inne procesy to php-fpm, które zajmują CPU i pamięć, co nie jest zbyt duże

Jeśli mysql działa normalnie, to oznacza to, że niektóre instrukcje SQL w PHP powodują wykrywanie problemów, a użytkownik root wprowadza zarządzanie mysql
mysql -u root -p
Wprowadź hasło, a następnie następującą komendę




Dzięki temu poleceniu widzimy, że baza danych nieustannie wykonuje operacje usuwania z warunkami where.



pre_k_spider tej tabeli jest tabela rejestrująca dostęp do pająka, prawdopodobnie spowodowane przez zainstalowaną wtyczkę

Widzimy, że pre_k_spider tabela zawiera ponad 100 000 rekordów, a zapytanie trwa 33 sekundy



Zdecydowanie opróżnij tę tabelę, a następnie przejdź do tła zarządzania, aby zamknąć odpowiednie wtyczki tabeli i przywrócić ją do normalnego stanu!









Poprzedni:Usługa rozpoznawania kodu weryfikacyjnego Alibaba Cloud Cloud Marketplace
Następny:MySQL 5.6.21, aby zobaczyć plik konfiguracyjny my.cnf
 Ziemianin| Opublikowano 06.09.2017 09:32:56 |


Dziś strona znowu utknęła, a w ogóle można znaleźć dużo snu

Przyczyny snu:

1 Program klienta nie wywołał mysql_close() przed wyjściem.

2 Klient spał dłużej niż wait_timeout lub interactive_timeout sekund, nie wysyłając żadnych żądań do serwera.

3 Program klienta zakończył się nagle w trakcie transferu danych

Jeśli liczba procesów uśpienia w tym samym okresie jest zbyt wysoka, a łączna liczba połączeń w innych stanach przekroczy wartość max_connection, MySQL nie może już przetwarzać żadnych żądań poza użytkownikiem głównym, nie może nawiązać połączenia z żadnym żądaniem lub zawiesza się bezpośrednio

Rozwiązanie:

1. Po pierwsze, sprawdź, czy Twój program korzysta z metody pconnect, a po drugie, sprawdź, czy mysql_close() jest wywoływany na czas przed uruchomieniem strony. Staraj się nie używać metody pconnect, czyli używaj mysql_connect. Po uruchomieniu programu mysql_close powinien być wywołany jawnie

2. Dodaj wait_timeout i interactive_timeout do my.cnf, ustaw wartość mniejszą, domyślnie wartość wait_timeout to 8 godzin, możesz zmienić na 1 godzinę lub pół godziny. Dzięki temu mysql szybciej zabije martwe połączenia. Zapobiegaj temu, by łączna liczba połączeń przekroczyła wartość max_connection.

wait_timeout zbyt duże spowoduje zwolnienie dużej liczby procesów SLEEP w MySQL na czas, co obniża wydajność systemu, ale jeśli ustawienia są zbyt małe, możesz napotkać problemy takie jak "MySQL zniknął"

Ustaw wartość max_connection na wyższą, ale to oczywiście nie jest odpowiednie – im więcej masz połączeń, tym większy stres wywiera to na serwerze. W rzeczywistości te połączenia są zbędne, a ich jak najszybsze wyeliminowanie to najlepsza strategia.

3. Analizuj zapytanie SQL systemu krok po kroku, znajdź zbyt wolny SQL i zoptymalizuj go



1)interactive_timeout:
Znaczenie parametru: Liczba sekund, w których serwer czeka na aktywność, zanim wyłączy połączenie interaktywne. Interaktywny klient definiowany jest jako klient, który korzysta z CLIENT_INTERACTIVE opcji w mysql_real_connect().
Domyślny parametr: 28800 sekund (8 godzin)

(2)wait_timeout:
Znaczenie parametru: Liczba sekund, w których serwer czeka na aktywność przed zamknięciem połączenia nieinteraktywnego.
Po rozpoczęciu wątku wartość sesji wait_timeout jest inicjalizowana na podstawie globalnej wait_timeout lub globalnej wartości interactive_timeout, w zależności od typu klienta (zdefiniowanego CLIENT_INTERACTIVE opcjach połączenia mysql_real_connect()).
Domyślny parametr: 28800 sekund (8 godzin)

Istnieje górna granica maksymalnej liczby połączeń, które MySQL Server może obsłużyć, ponieważ każde połączenie jest nawiązywane i zużywa pamięć, więc oczekujemy, że klienci rozłączą się i zwolnią zajętą pamięć po połączeniu z MySQL Server do wykonania odpowiedniej operacji. Jeśli Twój serwer MySQL ma dużą liczbę bezczynnych połączeń, nie tylko będą one bezużytecznie zużywać pamięć, ale jeśli połączenia będą się kumulować i otwierać, ostatecznie osiągną maksymalną liczbę połączeń w MySQL Server, co zgłosi błąd "zbyt wiele połączeń". Ustawienie wartości wait_timeout powinno być oceniane zgodnie z działaniem systemu. Po pewnym czasie działania systemu możesz sprawdzić status połączenia bieżącego systemu za pomocą polecenia show processlist; jeśli znajdziesz dużą liczbę połączonych procesów w stanie uśpienia, oznacza to, że ustawienie parametrów jest zbyt duże i możesz wprowadzić odpowiednie korekty, by wprowadzać mniejsze zmiany.


Polecenie SQL:



Ta metoda modyfikacji jest wPo ponownym uruchomieniu usługi mysql będzie ona nieprawidłowa, dlatego najlepiej skonfigurować te dwie właściwości w pliku konfiguracyjnym MySQL.

Zmodyfikuj plik my.cnf w Linuksie:




Opublikowano 06.09.2017 11:15:15 |
Muszę zdobyć serwer master-slave
 Ziemianin| Opublikowano 06.09.2017 11:15:49 |
vrchary opublikowano 2017-9-6 o 11:15
Muszę zdobyć serwer master-slave

Powód konfiguracji serwera Konfiguracja jest niska   
 Ziemianin| Opublikowano 06.09.2017 13:47:56 |
Rozwiązano problem "mysql-bin.000001", który zajmował dużą ilość miejsca
http://www.itsvse.com/thread-2694-1-1.html
(Źródło: Architect)

Po zainstalowaniu MySQL z portami, po pewnym czasie okazało się, że miejsce w /var jest niewystarczające, sprawdziłem i okazało się, że pliki mysql-bin.000001, mysql-bin.000002 i inne zajmują miejsce, więc do czego służą te pliki? Jest to dziennik operacji bazy danych, taki jak UPDATE a table lub DELETE some data; nawet jeśli polecenie nie pasuje do danych, to polecenie będzie przechowywane w pliku logu, wraz z czasem wykonania każdego polecenia, który również zostanie zapisany.

Robi się to głównie w następujących dwóch celach:
1: Odzyskiwanie danych
Jeśli twoja baza danych ma problem i masz kopię zapasową wcześniej, możesz przejrzeć plik loga, aby dowiedzieć się, które polecenie spowodowało problem z bazą danych i znaleźć sposób na odzyskanie utraty.
2: Synchronizacja danych między serwerami master-slave
Wszystkie operacje na serwerze głównym są zapisywane w logu, który serwer slave może wykorzystać, aby zapewnić synchronizację obu stron.

Po prostu zamknij kłodę


 Ziemianin| Opublikowano 09.10.2017 14:33:30 |
mysqld jest zbyt obciążający CPU w Windowsie poniżej



Rozwiązanie: Optymalizacja instrukcji SQL
Opublikowano 30.12.2021 23:15:36 |
Wspieraj ją!!!!!!!!!!!!!!!!
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