Setelah banyak mencari, akhirnya saya menemukan solusinya.
Saya tidak terlalu penulis, jadi saya akan melakukan yang terbaik untuk membuat ini sesingkat mungkin.
Sejauh yang saya bisa temukan, ada 2 solusi yang mungkin:
Relay SQL
http://sqlrelay.sourceforge.net/
Ini melakukan persis apa yang ditanyakan, dan banyak lagi. Saya tidak akan membahas terlalu banyak tentang apa yang saya dapat temukan tentang ini tetapi akan menyebutkan bahwa itu bukan solusi yang layak karena tidak transparan. Artinya alirannya adalah sebagai berikut:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Jadi ini akan melibatkan penulisan ulang semua kode kami dari mysql ke sql relay. Bukan pilihan dalam kasus kami.
Semua itu dikatakan, jika seseorang merencanakan segar proyek skala besar yang membutuhkan salah satu dari banyak fitur yang SQL Relay memiliki, kedengarannya indah.
Proksi Mysql
http://forge.mysql.com/wiki/MySQL_Proxy
Ini adalah solusi yang akhirnya kami gunakan.
Kunci untuk melakukan ini melakukan apa yang kita inginkan adalah skrip penyatuan LUA untuk proxy mysql.
Perpanjangan LUA ini dapat ditemukan di:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
Tanpa terlalu rinci, berikut adalah beberapa statistik dasar ... Ingat, ini diuji pada waktu penggunaan RENDAH:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Setelah beralih ke mysql-proxy, dan membiarkan semuanya beres:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Seperti yang Anda lihat dengan jelas, port TIME_WAIT ke mysql telah turun hampir tidak ada.
Koneksi sekarang sebenarnya persisten TANPA menggunakan mysql_pconnect / mysqli_connect (... p: nama host ...).
Layak disebutkan ada beberapa pengaturan yang dapat dikonfigurasi di dekat bagian atas script pooler lua.
min_idle_connections lokal
dan
max_idle_connections lokal
Ini tampaknya cukup jelas. Kecuali itu: Akan muncul bahwa setiap kombinasi nama pengguna (dan kata sandi? Belum teruji ... kemungkinan besar bukan.) Menciptakan rangkaian koneksi persistennya sendiri.
Jadi gandakan max_idle_connections dengan jumlah pengguna mysql unik yang akan terhubung ke database. Dan itu akan memberi Anda gambaran tentang berapa banyak koneksi idle Anda akhirnya akan memiliki.
Jadi, izinkan saya mengulangi kembali sehingga sedikit uraian singkat ini mengenai beberapa kata kunci untuk mereka yang mencari melalui google:
Ketika menggunakan PHP, apakah mungkin untuk memiliki koneksi mysql persisten TANPA mysql_pconnect?
Ya, ini bisa dilakukan melalui SQL Relay jika Anda tidak keberatan membangun kembali sebagian besar kode Anda untuk mengirimkan pertanyaan melalui ekstensi ATAU secara transparan menggunakan mysql-proxy dengan skrip ro-pooling.lua.
Kami telah menginginkan sesuatu seperti ini selama sekitar satu tahun sekarang.
NIKMATI!
mysql_pconnectdan memulai setiap koneksi dengan beberapa "fungsi pembersihan"?