Wie berechnet man die Variable mysql max_connections?


Antworten:


27

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


1
KCD stellte diesen Link als Max-Memory-Rechner zur Verfügung: mysqlcalculator.com
Derek Downey

Derek, meinen Sie "Globale Puffer = Summe aller Variablen für globale Puffer und Thread-Puffer = Summe aller Variablen für Thread-Puffer"?
Mat

11

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.


1
Ich habe gerade deine Formel gelesen. Ziemlich glatt !!! Übrigens +1 !!!
RolandoMySQLDBA

2
Es ist wahrscheinlich an der Zeit, diese Formel angesichts der Änderungen in 5.5 und 5.6 noch einmal zu überdenken, aber es ist immer noch praktisch.
Randomx


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.