Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zoptymalizować wydajność MySQL za pomocą MySQLTuner

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.

  1. Pobierz skrypt MySQLTuner:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Zmień uprawnienia skryptów na wykonywalne:

     chmod +x mysqltuner.pl
    
  3. Uruchom mysqltuner.pl scenariusz. Zostaniesz poproszony o podanie loginu i hasła administratora MySQL:

     ./mysqltuner.pl
    
  4. Skrypt zwróci wyniki podobne do poniższych wyników:

    >>  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)
    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.

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 .

Uwaga

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

1
SHOW STATUS LIKE 'open%';

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. proxysql-admin Alternatywy — ClusterControl ProxySQL GUI

  2. Jak uzyskać rekordy z ostatnich 7 dni w MySQL?

  3. Cytaty pojedyncze, cytaty podwójne, cytaty wsteczne Wyjaśnienie użycia MySQL

  4. Jak wypełnić drugie menu rozwijane na podstawie wyboru pierwszego menu rozwijanego za pomocą jQuery/AJAX i PHP/MySQL?

  5. Jak zbudować aplikację kolbową wokół już istniejącej bazy danych?