Oblicz scenariusz pamięci InnoDB i serwera na podstawie rzeczywistych ustawień. Wartości przykładowe opisują serwer 16 GiB; nie są zaleceniami.
Jednostki binarne: 1 GiB = 1024 MiB. Obsługuje bajty lub K/M/G/T, np. 268435456, 256M, 8G. Obliczenia pozostają w przeglądarce.
Włącz JavaScript, aby użyć kalkulatora. Objaśnienia i zapytania są dostępne poniżej.
Wyniki scenariusza
- Pamięć InnoDB
- Scenariusz obciążenia
- Obciążenie przy max_connections
- Zapas scenariusza
- Alokacje globalne i rezerwy
- Podstawa połączeń
- Bufory aktywnych zapytań
- Tabele tymczasowe i bloki lokalne
- Budżet serwera bazy danych
- Instrumentowane InnoDB, bieżący pomiar
- RSS procesu, bieżący pomiar
Oszacowanie, nie gwarantowane maksimum
Obciążenie, ustawienia sesji i nieinstrumentowane alokacje mogą przekroczyć model. Scenariusz stresowy zachowuje liczby operacji i aktywuje wszystkie połączenia. Sprawdź RSS, limity cgroup, swap i szczyty przy reprezentatywnym obciążeniu. Pliki redo/undo i innodb_redo_log_capacity to przestrzeń dyskowa, nie równoważne alokacje RAM.
Wzory i założenia
C = połączenia; A = aktywne zapytania; T = tabele tymczasowe na zapytanie. Rezerwy dodaje się raz.
InnoDB = innodb_buffer_pool_size × (1 + overhead / 100) + innodb_log_buffer_size + dictionary + locks + transactions + adaptive_hash + compression + InnoDB_extra
G = InnoDB + key_buffer_size + aria_pagecache_buffer_size (MariaDB) + query_cache_size (MariaDB / MySQL 5.7) + other_global
B = thread_stack + 2 × net_buffer_length + max_digest_length + session_extra
Q = sort_buffer_size × sorts + join_buffer_size × joins + read_buffer_size × scans + read_rnd_buffer_size × random_reads + query_extra
Total = G + C × B + A × Q + Temp
Stress: C = A = max_connections
Dokładniejsze szacowanie pamięci InnoDB
Pamięć InnoDB nie ogranicza się do innodb_buffer_pool_size. Kalkulator uwzględnia pulę buforów, regulowaną rezerwę na jej struktury, globalny innodb_log_buffer_size oraz wskazane dodatkowe alokacje InnoDB. MySQL opisuje około 10% dodatkowej pamięci na struktury puli; rzeczywista rezerwa zależy od wersji i obciążenia, szczególnie w MariaDB. Użyj rzeczywistej wartości działającego serwera, która może różnić się od konfiguracji po zaokrągleniu rozmiaru puli.
Słownik, indeks adaptive hash, blokady, struktury transakcji i kompresja mogą zajmować dodatkową pamięć. Dodawaj tylko alokacje nieuwzględnione już w puli lub rezerwie. Pojemność redo, pliki redo i przestrzenie undo są zasobami dyskowymi: ich rozmiar nie jest alokacją RAM. Suma InnoDB nie obejmuje innych silników, Performance Schema, buforów połączeń i zapytań ani systemu.
Zbierz aktywne ustawienia
Poniższe instrukcje tylko odczytują dane. Nieobsługiwane zmienne są pomijane przez SHOW ... WHERE. Threads_running obejmuje zapytanie pomiarowe i jest chwilowym odczytem; użyj reprezentatywnej współbieżności i zarejestrowanych szczytów. Max_used_connections to szczyt połączeń, nie aktywnych zapytań. Sprawdź także ustawienia sesji aplikacji: bieżąca sesja nie opisuje wszystkich sesji.
SELECT VERSION();
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'innodb_buffer_pool_size', 'innodb_log_buffer_size', 'innodb_page_size',
'key_buffer_size', 'aria_pagecache_buffer_size', 'query_cache_size',
'max_connections', 'thread_handling', 'thread_stack', 'net_buffer_length',
'max_digest_length', 'max_allowed_packet', 'sort_buffer_size',
'join_buffer_size', 'read_buffer_size', 'read_rnd_buffer_size',
'tmp_table_size', 'max_heap_table_size', 'internal_tmp_mem_storage_engine',
'temptable_max_ram', 'temptable_max_mmap', 'temptable_use_mmap'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
'Threads_connected', 'Threads_running', 'Max_used_connections',
'Created_tmp_tables', 'Created_tmp_disk_tables',
'Innodb_buffer_pool_pages_total', 'Innodb_buffer_pool_pages_data',
'Innodb_buffer_pool_pages_free'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
'sort_buffer_size', 'join_buffer_size', 'read_buffer_size',
'read_rnd_buffer_size', 'tmp_table_size', 'max_heap_table_size',
'internal_tmp_mem_storage_engine', 'max_allowed_packet'
);
SHOW ENGINE INNODB STATUS;
Zmierz InnoDB i proces
Jeśli wersja udostępnia tę tabelę pamięci Performance Schema i instrumenty InnoDB są aktywne, sprawdź bieżące alokacje. Zakres pomiaru zależy od wersji; późne włączenie liczników nie odtwarza wszystkich wcześniejszych alokacji. Brak wierszy lub zera nie oznaczają braku użycia pamięci. Nie sumuj maksimów instrumentów jako jednoczesnego szczytu. Wpisz bieżącą sumę jako opcjonalny pomiar InnoDB; pozostanie niezależna od modelu.
SELECT EVENT_NAME,
ROUND(CURRENT_NUMBER_OF_BYTES_USED / 1048576, 2) AS current_mib,
ROUND(HIGH_NUMBER_OF_BYTES_USED / 1048576, 2) AS high_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC;
SELECT ROUND(SUM(CURRENT_NUMBER_OF_BYTES_USED) / 1048576, 2)
AS instrumented_innodb_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%';
W Linuksie RSS poniżej podawany jest w KiB: użyj sufiksu K lub podziel przez 1024, aby uzyskać MiB. RSS obejmuje cały proces. Uwzględnij limity cgroup, pamięć podręczną systemu, pamięć zatrzymaną przez alokator i inne usługi.
ps -C mariadbd,mysqld -o pid=,rss=,comm=
Tabele tymczasowe i ograniczenia
Dla MariaDB i MySQL używającego MEMORY mniejsza wartość tmp_table_size i max_heap_table_size ogranicza każdą wewnętrzną tabelę tymczasową. W zapytaniu może istnieć wiele tabel i buforów złączeń. Model mnoży wybrane liczby operacji przez aktywne zapytania, nie przez bezczynne połączenia.
W MySQL TempTable limit temptable_max_ram jest wspólny dla sesji. Od 8.0.28 tmp_table_size ogranicza także pojedynczą tabelę; wcześniejszy profil stosuje tylko limit wspólny. Bloki lokalne nie są wliczane do limitu RAM. Model rezerwuje blok na każde połączenie, ponieważ może on pozostać do końca wątku; blok może przekraczać przykładowy 1 MiB. Pliki mmap mogą zwiększać pamięć rezydentną; limit ich rozmiaru nie jest równoważny alokacji RAM.
Scenariusz stresowy aktywuje wszystkie połączenia max_connections z tym samym kształtem zapytań. Nie stanowi gwarantowanej granicy. Dodaj rezerwy na tabele użytkownika MEMORY, wzrost buforów sieciowych, SQL/BLOB, binlog, replikację, przygotowane instrukcje, pamięć podręczną wątków i inne alokacje. Porównaj model z rzeczywistymi szczytami. Ani model, ani cel strojenia nie wymusza limitu pamięci.
Źródła i weryfikacja
Sprawdzono 13 października 2026. Oryginalne objaśnienia oparto na Releem i dokumentacji serwerów. Przykład Releem podaje 200 połączeń i limity 32 MiB, lecz mnoży przez 16 MB. Spójny wynik dla jednej tabeli na połączenie to 6400 MiB = 6,25 GiB. Zasady konkretnego silnika mają pierwszeństwo przed ogólnym wzorem.