Bagaimana Anda menghitung variabel mysql max_connections?

Jawaban:

27

Akan memposting ini sebagai jawaban, dengan informasi yang relevan. Rumus dasarnya adalah:

RAM yang Tersedia = Global Buffer + (Utas Buffer x max_connections)

max_connections = (RAM Tersedia - Buffer Global) / Buffer Utas

Untuk mendapatkan daftar buffer dan nilainya:

SHOW VARIABLES LIKE '%buffer%';

Inilah daftar buffer dan apakah itu Global atau Thread:

Buffer Global : key_buffer_size, innodb_buffer_pool_size, innodb_log_buffer_size, innodb_additional_mem_pool_size, net_buffer_size, net_buffer_size, query_cache_size

Thread Buffer : sort_buffer_size, myisam_sort_buffer_size, read_buffer_size, join_buffer_size, read_rnd_buffer_size, thread_stack

Derek Downey
sumber
1
KCD menyediakan tautan ini sebagai kalkulator memori maks: mysqlcalculator.com
Derek Downey
Derek, maksud Anda "Buffer global = SUM dari semua variabel buffer global dan Thread Buffer = jumlah semua variabel buffer buffer"?
Mat
11

PERINGATAN! Ini dari 2011 menggunakan MySQL 5.1.x. Gunakan dengan risiko Anda sendiri

---- POS ASLI ----

Berikut formula alternatif lain dalam bentuk prosedur tersimpan:

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;

Saya berasumsi Anda menggunakan database MySQL> versi 5.1.x dan Anda adalah pengguna istimewa. Tetapi Anda bermain dengan koneksi maksimal dengan memasukkan nomor apa pun yang Anda inginkan dan melihat hasilnya.

randomx
sumber
1
Saya baru saja membaca formula Anda. Cukup bagus !!! BTW +1 !!!
RolandoMySQLDBA
2
Mungkin ini saatnya untuk meninjau kembali formula ini mengingat semua perubahan di 5.5 dan 5.6, tetapi masih agak berguna.
randomx
0

Saya menatap nomor yang saya dapatkan dari perhitungan sederhana: expected_number_of_requests_per_second * expected_average_request_processing_time * 2.

Untuk penyetelan nanti, saya selalu menggunakan sistem pemantauan dengan data historis dan mencoba memiliki 20% cadangan jika terjadi beberapa puncak. Ini sedikit lebih kompleks ketika Anda menggunakan beberapa koneksi pooling (yang biasanya merupakan ide yang bagus) - maka Anda perlu memonitor jumlah koneksi yang digunakan di pool.

rvs
sumber