Uruchamianie MySQL z optymalnymi ustawieniami dla określonych zasobów pomaga obsłużyć większe obciążenia serwera i zapobiega jego spowolnieniu. Ogólnie rzecz biorąc, po dostrojeniu Apache do obsługi większych obciążeń korzystne jest dostrojenie MySQL do dodatkowych połączeń.
Dostrajanie bazy danych to obszerny temat, a ten przewodnik obejmuje tylko podstawy edycji konfiguracji MySQL. Duże bazy danych MySQL mogą wymagać znacznej ilości pamięci. Z tego powodu zalecamy używanie Linode o wysokiej pamięci do takich konfiguracji.
Uwaga Czynności opisane w tym przewodniku wymagają uprawnień administratora. Pamiętaj, aby wykonać poniższe kroki jako root lub za pomocą sudo
prefiks. Aby uzyskać więcej informacji na temat uprawnień, zobacz nasz przewodnik dla użytkowników i grup.
Narzędzia, które mogą pomóc zoptymalizować MySQL
Aby określić, czy Twoja baza danych MySQL wymaga ponownej konfiguracji, najlepiej przyjrzyj się, jak teraz działają Twoje zasoby. Można to zrobić za pomocą polecenia thetop lub usługi LinodeLongview. Przynajmniej powinieneś zapoznać się z wykorzystaniem pamięci RAM i procesora twojego serwera, co można wykryć za pomocą tych poleceń:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
Skrypt MySQLTuner ocenia instalację MySQL, a następnie wyświetla sugestie dotyczące zwiększenia wydajności i stabilności serwera.
-
Pobierz skrypt MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Zmień uprawnienia skryptów na wykonywalne:
chmod +x mysqltuner.pl
-
Uruchom
mysqltuner.pl
scenariusz. Zostaniesz poproszony o podanie loginu i hasła administratora MySQL:./mysqltuner.pl
-
Skrypt zwróci wyniki podobne do poniższych wyników:
MySQLTuner oferuje sugestie dotyczące poprawy wydajności bazy danych. Jeśli obawiasz się samodzielnej aktualizacji bazy danych, postępowanie zgodnie z sugestiami MySQLTuner jest jednym z bezpieczniejszych sposobów na poprawę wydajności bazy danych.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
Dostrajanie MySQL
Zmieniając konfigurację MySQL, zwracaj uwagę na zmiany i ich wpływ na Twoją bazę danych. Nawet postępując zgodnie z instrukcjami programów takich jak MySQLTuner, najlepiej jest trochę zrozumieć ten proces.
Plik konfiguracyjny MySQL przechowywany w następującej lokalizacji:/etc/mysql/my.cnf
.
UwagaPrzed aktualizacją konfiguracji MySQL utwórz kopię zapasową pliku
my.cnf
plik:cp /etc/mysql/my.cnf ~/my.cnf.backup
Zgodnie z najlepszymi praktykami należy wprowadzać niewielkie zmiany, pojedynczo, a następnie monitorować serwer po każdej zmianie. Po każdej zmianie powinieneś ponownie uruchomić MySQL:
Dla dystrybucji używających systemd:
systemctl restart mysqld
Dla dystrybucji z różnymi systemami init:
service mysql restart
Podczas zmiany wartości w
my.cnf
pliku, upewnij się, że zmieniana linia nie została skomentowana z krzyżykiem (#
) prefiks.
key_buffer
Zmiana key_buffer
przydziela więcej pamięci do MySQL, co może znacznie przyspieszyć działanie baz danych, zakładając, że masz wolną pamięć. key_buffer
rozmiar powinien generalnie zajmować nie więcej niż 25 procent pamięci systemowej w przypadku korzystania z silnika tabel MyISAM i do 70 procent w przypadku InnoDB. Jeśli wartość jest zbyt wysoka, zasoby są marnowane.
Zgodnie z dokumentacją MySQL, dla serwerów z 256 MB (lub więcej) pamięci RAM z wieloma tabelami zalecane jest ustawienie 64 MB. Serwery z 128 MB pamięci RAM i mniejszą liczbą tabel można ustawić na 16M, wartość domyślną. Witryny z jeszcze mniejszą liczbą zasobów i tabel mogą mieć ustawioną niższą wartość.
max_allowed_packet
Ten parametr pozwala ustawić maksymalny rozmiar wysyłanego pakietu. Pakiet to pojedynczy stan SQL, pojedynczy wiersz wysyłany do klienta lub dziennik wysyłany ze źródłowej bazy danych do repliki. Jeśli wiesz, że Twój serwer MySQL będzie przetwarzał duże pakiety, najlepiej zwiększyć to do rozmiaru największego pakietu. Jeśli ta wartość będzie zbyt mała, otrzymasz błąd w swoim dzienniku błędów.
thread_stack
Ta wartość zawiera rozmiar stosu dla każdego wątku. MySQL uwzględnia domyślną wartość thread_stack
zmienna wystarczająca do normalnego użytkowania; jednak czy błąd związany z thread_stack
być zalogowanym, można go zwiększyć.
thread_cache_size
Jeśli thread_cache_size
jest „wyłączone” (ustawione na 0), to każde nowe połączenie wymaga utworzenia dla niego nowego wątku. Rozłączenie połączeń powoduje zniszczenie wątku. W przeciwnym razie ta wartość ustawia liczbę nieużywanych wątków do przechowywania w pamięci podręcznej, dopóki nie będą potrzebne do połączenia. Ogólnie to ustawienie ma niewielki wpływ na wydajność, chyba że odbierasz setki połączeń na minutę, w którym to czasie ta wartość powinna zostać zwiększona, aby większość połączeń mogła być wykonana w wątkach buforowanych.
max_connections
Ten parametr określa maksymalną liczbę jednoczesnych znajomości. Najlepiej jest wziąć pod uwagę maksymalną liczbę połączeń, które miałeś w przeszłości przed ustawieniem tej liczby, dzięki czemu będziesz mieć bufor między tą górną liczbą a max_connections
wartość. Uwaga, nie oznacza to maksymalnej liczby użytkowników w Twojej witrynie jednorazowo; raczej pokazuje maksymalną liczbę użytkowników składających żądania jednocześnie.
table_cache
Ta wartość powinna być wyższa niż Twoje open_tables
wartość. Aby określić tę wartość, użyj:
| |
Więcej informacji
Dodatkowe informacje na ten temat można znaleźć w poniższych zasobach. Chociaż są one dostarczane w nadziei, że będą przydatne, należy pamiętać, że nie możemy ręczyć za dokładność ani aktualność materiałów hostowanych zewnętrznie.
- Biblioteka dokumentacji MySQL
- Parametry serwera dostrajania MySQL
- MySQLTuner