Wie berechnet man mysql max_connections?
Was berücksichtigen Sie?
Wie berechnet man mysql max_connections?
Was berücksichtigen Sie?
Antworten:
Ich werde dies als Antwort mit den relevanten Informationen posten. Die Grundformeln sind:
Verfügbarer RAM = Globale Puffer + (Thread-Puffer x max_connections)
max_connections = (Verfügbarer RAM - Globale Puffer) / Thread-Puffer
So rufen Sie die Liste der Puffer und ihrer Werte ab:
SHOW VARIABLES LIKE '%buffer%';
Hier ist eine Liste der Puffer und ob sie Global oder Thread sind:
Globale Puffer : key_buffer_size, innodb_buffer_pool_size, innodb_log_buffer_size, innodb_additional_mem_pool_size, net_buffer_size, query_cache_size
Thread-Puffer : sort_buffer_size, myisam_sort_buffer_size, read_buffer_size, join_buffer_size, read_rnd_buffer_size, thread_stack
WARNUNG! Dies ist ab 2011 mit MySQL 5.1.x. Benutzung auf eigene Gefahr
---- ORIGINAL POST ----
Hier ist eine andere alternative Formel in Form einer gespeicherten Prozedur:
DELIMITER //
CREATE PROCEDURE sproc_show_max_memory ( OUT max_memory DECIMAL(7,4))
BEGIN
SELECT ( @@key_buffer_size + @@query_cache_size + @@tmp_table_size + @@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size + @@innodb_log_buffer_size + @@max_connections * ( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack ) ) / 1073741824 AS MAX_MEMORY_GB INTO max_memory;
END//
DELIMITER ;
CALL sproc_show_max_memory(@show_max_memory);
SELECT @show_max_memory;
Ich gehe davon aus, dass Sie eine MySQL-Datenbank> Version 5.1.x verwenden und ein privilegierter Benutzer sind. Aber Sie spielen mit den maximalen Verbindungen, indem Sie eine beliebige Zahl eingeben und die Ergebnisse sehen.
Ich starre mit der Zahl, die ich aufgrund einer einfachen Berechnung erhalte: expected_number_of_requests_per_second * expected_average_request_processing_time * 2.
Für die spätere Abstimmung verwende ich immer ein Überwachungssystem mit Verlaufsdaten und versuche, 20% für den Fall einer Spitzenlast zu reservieren. Es ist etwas komplexer, wenn Sie einen Verbindungspool verwenden (was normalerweise eine gute Idee ist) - dann müssen Sie die Anzahl der verwendeten Verbindungen im Pool überwachen.