Saya menggunakan Asp.Net bersama dengan MySQL. Dalam string koneksi .Net, saya telah menetapkan Max Pool Size ke 150.
Jika saya menjalankan yang berikut ini, saya mendapatkan nilai-nilai ini:
SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474
Yang memberi Threads_created / Connections = 0,1392.
Maka dari itu sepertinya saya perlu meningkatkan thread_cache_size
.
Tetapi jika saya menjalankan SHOW PROCESSLIST
saya selalu melihat bahwa saya memiliki banyak koneksi terbuka (kebanyakan dari mereka tidur) karena kolam dibuat oleh .Net. Apakah saya masih perlu mengatur thread_cache_size
karena saya masih akan menggunakan kembali koneksi dari kumpulan koneksi? Jika Ukuran Kolam adalah 150, apakah menurut Anda nilai yang baik adalah thread_cache_size
150+? Apakah ini mempengaruhi CPU dan memori banyak?
sumber
Menurut dokumen MySQL, Anda harus mengatur
thread_cache_size
agar sebagian besar koneksi baru menggunakan utas dari cache daripada utas yang baru dibuat. Ini menghemat beberapa overhead pembuatan thread, meskipun biasanya tidak membuat peningkatan kinerja yang signifikan:Ini berarti bahwa Anda harus mengatur
thread_cache_size
sehinggaThreads_created / Connections
(% koneksi yang mengarah ke pembuatan utas baru) agak rendah. Jika Anda menggunakan dokumen MySQL secara literal ("sebagian besar"), nilainya harus <50%. Jawaban RolandoMySQLDBA mengatakan <1%. Saya tidak tahu siapa yang lebih dekat dengan kebenaran.Anda tidak boleh mengatur
thread_cache_size
lebih tinggi dariMax_used_connections
. Kalimat terakhir dalam jawaban RolandoMySQLDBA ("Paling tidak, thread_cache_size harus lebih besar daripada Max_used_connections") tampaknya tidak masuk akal karena dikatakan bahwa Anda harus menyimpan lebih banyak utas di dalam cache daripada yang pernah digunakan oleh server Anda . MySQL tidak akan pernah memasukkan begitu banyak utas ke dalam cache - ia tidak secara pre-emptif memasukkan utas dalam cache - itu hanya menempatkannya di sana setelah klien membuat utas dan terputus. Jika Anda tidak pernah memiliki klien X yang terhubung pada saat yang sama, Anda tidak akan pernah memiliki utas X dalam cache:Lihat juga jawaban ini oleh Michael:
/dba//a/28701
sumber
Pada hari kerja umum, apakah 'karyawan baru' mungkin membutuhkan koneksi? Kebanyakan penyihir tidak akan tahu berapa banyak orang yang bisa dipekerjakan dalam beberapa hari ke depan. V 8 dari MySQL menyarankan CAP thread_cache_size pada 100 untuk mencegah kelebihan beban terlepas dari max_used_connections. Bagi saya, 100 adalah CAP yang baik.
Silakan lihat tautan ini.
sumber