Ta strona jest oryginalną dokumentacją PmaControl. Zachowuje praktyczną strukturę indeksu do pracy nad optymalizacją MySQL, bez kopiowania treści zewnętrznych i bez zależności od zewnętrznego produktu.
Cel
Parametry MySQL sterują pamięcią, wątkami, cache, trwałością i I/O. Powinny być dokumentowane według roli, a nie zmieniane jak magiczna lista.
Rodziny parametrów
- Pamięć globalna:
innodb_buffer_pool_size,key_buffer_size, cache tabel. - Pamięć per sesja:
sort_buffer_size,join_buffer_size,read_rnd_buffer_size,tmp_table_size. - I/O InnoDB: flush, redo log, page cleaners, wątki odczytu i zapisu.
- Połączenia:
max_connections, thread cache, limity plików. - Zgodność historyczna: query cache, MyISAM i parametry przestarzałe.
Metoda
Zacznij od SHOW VARIABLES i SHOW GLOBAL STATUS, a potem porównaj wartości z obserwowanym zachowaniem. Wysoka wartość może pogorszyć użycie pamięci, jeśli jest alokowana per połączenie.
Zobacz też: Indeks parametrów.
Sprawdź wartości efektywne i ich zakres
Zacznij od identyfikacji i wartości faktycznie używanych przez proces. Pliki konfiguracji nie pokazują wszystkich opcji uruchomienia, wartości utrwalonych lub zmian w czasie pracy. Domyślne wartości globalne mogą różnić się od istniejącej sesji. Zapisz jednostki, zakres, źródło, możliwość zmiany bez restartu i pierwotną wartość. Lista pomija zmienne nieudostępniane przez daną wersję.
SELECT VERSION() AS server_version, @@version_comment AS distribution;
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'innodb_buffer_pool_size', 'innodb_log_buffer_size',
'innodb_redo_log_capacity', 'innodb_log_file_size',
'innodb_flush_log_at_trx_commit', 'sync_binlog',
'max_connections', 'thread_cache_size', 'table_open_cache',
'sort_buffer_size', 'join_buffer_size', 'tmp_table_size',
'max_heap_table_size', 'internal_tmp_mem_storage_engine',
'temptable_max_ram', 'temptable_max_mmap'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
'sort_buffer_size', 'join_buffer_size', 'tmp_table_size',
'max_heap_table_size'
);
Powiąż każdą grupę z pomiarami
| Grupa | Jak potwierdzić | Kompromis do oceny |
|---|---|---|
| Bufor pamięci | Aktywne dane, przyrosty odczytów, RSS | Korzyść cache a zapas pamięci hosta |
| Pojemność redo | Tempo zapisu, oczekiwania redo, checkpointy | Miejsce na dysku i zachowanie odtwarzania |
| Bufory sesji | Rzeczywiste sortowania, złączenia i współbieżność | Alokacje na żądanie i wiele operatorów |
| Limity połączeń i tabel | Odmowy, tworzenie wątków, tempo otwierania tabel | Wyższy limit może zwiększyć pamięć i rywalizację |
| Trwałość commitów | Opóźnienie commitów i wymagana odporność na awarie | Przepustowość a ryzyko utraty potwierdzonych danych |
Planuj pamięć według sposobu alokacji
Nie mnoż wszystkich buforów przez max_connections, uznając wynik za rzeczywiste użycie RAM. Wiele buforów powstaje na żądanie, a zapytanie może mieć kilka buforów złączeń lub tabel tymczasowych. Oddziel pamięć globalną, koszt połączonych sesji i aktywnych zapytań; zachowaj scenariusz przeciążenia do analizy. Uwzględnij system, inne usługi i instrumentację, a następnie porównaj model z RSS i presją pamięci.
MySQL TempTable ma wspólny budżet RAM sterowany przez temptable_max_ram; od MySQL 8.0.28 tmp_table_size ogranicza również pojedynczą wewnętrzną tabelę TempTable. Wewnętrzne tabele MEMORY używają mniejszej wartości tmp_table_size i max_heap_table_size. Reguły zależą od silnika i wersji. Pojemność redo to dysk, a innodb_log_buffer_size to RAM: nie sumuj obu jako pamięci.
Uwzględnij wersję i trwałość ustawień
MySQL 8.0.30 wprowadził innodb_redo_log_capacity; starsze wersje używają zmiennych rozmiaru plików redo. Query cache dotyczy starszego MySQL i usunięto go w MySQL 8. MariaDB ma własny cykl życia zmiennych wymagający sprawdzenia jej dokumentacji. Nie kopiuj konfiguracji z nieznanymi lub usuniętymi zmiennymi do nowej wersji bez weryfikacji.
Dla każdej zmiany sprawdź wpływ na sesje istniejące, nowe i potrzebę restartu. Zmiana globalna w czasie pracy nie musi być trwała; MySQL SET PERSIST zapisuje osobną konfigurację. Uzgodnij wartości bieżące i po restarcie, zapisz wycofanie obu i testuj reconnect/restart w kontrolowanym środowisku. Porównuj pojedynczą hipotezę na tej samej pracy i zachowuj wymaganą trwałość zamiast wymieniać ją na efektowny wynik.
Dalsza diagnostyka
- Użyj kalkulatora pamięci do scenariuszy alokacji i indeksu parametrów dla pojedynczych ustawień.