2011-08-18 11 views
6

Mam bardzo wysokie skoki CPU na proces mysqld (większy niż 100%, a nawet zobaczyłem 300% w jednym punkcie). Średnia z moich obciążeń wynosi około: .25, .34, .28.MySQL Wysokie użycie procesora i trwałe łącza

czytam ten wielki post o tym numerze: MySQL high CPU usage

Jedną z głównych atrakcji jest wyłączenie połączenia trwałe. Sprawdziłem więc moje php.ini i mysql.allow_persistent = on i mysql.max_persistent = -1 - co oznacza brak limitu.

Nasuwa się kilka pytań do mnie przed zmianą czegokolwiek po prostu mieć pewność:

  1. Jeśli mój proces mysqld jest wybijanie ponad 100% co kilka sekund nie powinno moim średnie obciążenie być wyższe niż są?
  2. Co spowoduje wyłączenie trwałych linków - czy moje skrypty będą działać tak, jak są?
  3. Jeśli wyłączę to i ponownie załaduję php, co to oznacza dla moich obecnych użytkowników, ponieważ będzie wielu aktywnych użytkowników.

EDIT: Informacje

Procesor: 2.6 Ghz Core2Quad q9400

Odpowiedz

8

Połączenia trwałe nie wykorzystują samodzielnie żadnego procesora - jeśli nic nie korzysta z połączenia, po prostu siedzi bezczynnie i zużywa tylko trochę pamięci i zajmuje gniazdo.

Średnie obciążenia są tylko takie - wartości średnie. Jeśli masz proces, który zmienia się między 0% a 100% 10 razy na sekundę, otrzymasz średnie obciążenie 0,5. Są dobre do określania długotrwałego, wysokiego, wysokiego cpu, ale z natury ukrywają/zanikają oznaki kolców.

Trwałe połączenia z mysql zwykle nie są potrzebne. MySQL ma stosunkowo szybki protokół połączenia i wszelkie oszczędności czasu wynikające z korzystania z trwałych połączeń są dość minimalne. Wadą jest to, że gdy połączenie stanie się trwałe, może pozostać w niespójnym stanie. na przykład Jeśli aplikacja korzystająca z połączenia zginie nieoczekiwanie, MySQL tego nie zobaczy i rozpocznie czyszczenie. Oznacza to, że wszelkie zmienne po stronie serwera utworzone przez aplikację, wszelkie blokady, transakcje itp. Pozostaną w stanie, w jakim znajdowały się, gdy aplikacja uległa awarii.

Gdy połączenie zostanie ponownie wykorzystane przez inną aplikację, zaczniesz od ilości brudnych naczyń w zlewie i nieumytej toalecie. Z łatwością może powodować zakleszczenia z powodu zwisających transakcji/blokad - nowa aplikacja nie będzie o nich wiedzieć, a stara aplikacja nie będzie już mogła ich zrezygnować.

+0

dzięki za analogię WC :) Tak trwała opcja linków w moim php.ini jest w porządku, ale po prostu nie używaj mysql_pconnect - masz to. – bMon

+0

W którym momencie (liczba) należy zacząć martwić się o średnie obciążenia? Ponad 1,0, 5,0, 20,0? – bMon

+2

nic złego w trwałych połączeniach, o ile posiadasz odpowiednią obsługę błędów "zomg Właśnie ładowałem moje spodnie" na wypadek, gdyby którykolwiek z twoich skryptów - jeśli skrypt zginie, wtedy wywołaj bliskie połączenie, aby mysql mógł je wyczyścić. –

0

Kolce są w porządku. To jest praca MySQL. Twoja średnia obciążenia wydaje się odpowiednia.

Wyłączenie trwałych łączy oznacza po prostu, że skrypty nie mogą korzystać z istniejącego połączenia z bazą danych. Nie polecam wyłączania tego. Przynajmniej, jeśli chcesz je wyłączyć, zrób to później na aplikacji, a nie na MySQL. Może to nawet nieznacznie zwiększyć obciążenie, w zależności od warunków.

Wreszcie, trwałość DB nie ma nic wspólnego z użytkownikami witryny (ogólnie). Użytkownicy wysyłają żądanie i po załadowaniu wszystkich zasobów strony, to jest to, do następnego żądania. (Z wyjątkiem kilku szczególnych przypadków.) W każdym przypadku, gdy żądanie się pojawi, skrypt nadal będzie podłączony do DB.