Berapa mahal pembukaan dan penutupan koneksi DB?

15

Cara intensif CPU membuka dan menutup koneksi DB (untuk aplikasi web) di MySQL

  • ... ketika perangkat lunak DB ada di localhost?
  • ... ketika perangkat lunak DB ada di komputer lain?
ThinkingMonkey
sumber

Jawaban:

12

Pikirkan tentang jumlah memori yang dialokasikan per Koneksi DB. Hal-hal apa yang harus dialokasikan? Menurut Panduan Studi Sertifikasi MySQL 5.0, halaman 357 :

Server memelihara beberapa buffer untuk setiap koneksi klien. Satu digunakan sebagai buffer komunikasi untuk bertukar informasi dengan klien. Buffer lain dikelola per klien untuk membaca tabel dan melakukan operasi join dan sortir.

Pengaturan apa yang mengatur buffer per koneksi?

Diperlukan waktu untuk mengalokasikan dan membatalkan alokasi buffer ini saat koneksi muncul. Jangan lupa untuk melipatgandakan jumlah nilai-nilai itu dengan max_connections . Sebagai catatan, tolong jangan menggunakan mysql_pconnect karena PHP dan koneksi persisten MySQL tidak rukun. Berikut adalah dua tautan informatif tentang topik ini:

Dalam lingkungan baca-berat, penulisan-berat, seperti OLTP, ini akan mahal dalam hal penggunaan RAM dan kemungkinan hambatan karena bertukar di OS. Pada situs web menulis rendah, low_read, saya tidak akan terlalu khawatir.

RolandoMySQLDBA
sumber
10

Saya tidak yakin itu penting "berapa jauh lebih mahal" itu. Ini tentu lebih mahal daripada menggunakan kembali koneksi yang sama. Apa yang akan Anda amati akan tergantung pada apakah Anda benar menggunakan pooling koneksi, seberapa jenuh pool Anda, sumber daya yang tersedia di kotak, dll.

Secara umum, jika Anda melakukan loop untuk melakukan beberapa interaksi dengan database, Anda akan jauh lebih baik menggunakan kembali koneksi aktif yang sama daripada membuka dan menutup di dalam loop (pola-anti yang saya lihat cukup sering) .

Aaron Bertrand
sumber
4

Dilema antara menggunakan kembali suatu objek dan merobohkannya dan membangunnya kembali (keduanya memiliki kelebihan dan kekurangan) seringkali dapat diatasi dengan kompromi: cache objek, tetapi untuk waktu yang terbatas (yaitu dengan kedaluwarsa). Jika objek sering diakses maka terus digunakan kembali. Tetapi jika itu tidak digunakan untuk beberapa waktu, maka mekanisme kedaluwarsa membuangnya, memaksanya untuk diciptakan kembali ketika dibutuhkan sekali lagi.

Suatu sistem dapat memiliki pengait global untuk jenis cache ini yang dipanggil saat memori rendah, yang memicu semuanya untuk menjatuhkan objek yang baru-baru ini tidak digunakan.

Kawan
sumber
2

Tembolok Mysql koneksi (atau utas) menggunakan Thread Cache (thread_cache_size). Nilai maksimal untuk itu adalah 100. Ketika klien menutup koneksi, itu dikembalikan ke cache. Ketika koneksi baru terbuka, itu memeriksa cache thread. PADA sistem yang sangat sibuk, membuka koneksi penutupan bisa menjadi mahal, terutama jika Anda memiliki pertanyaan yang berjalan lama.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Jika Anda mampu membeli Mysql Enterprise, Anda dapat menggunakan plug-in Thread Pool yang diterapkan di Mysql 5.6.

greenlitmysql
sumber