Sau nhiều tìm kiếm, cuối cùng tôi đã tìm ra giải pháp.
Tôi không phải là một nhà văn, vì vậy tôi sẽ cố gắng hết sức để làm cho điều này ngắn gọn nhất có thể.
Theo như tôi có thể tìm thấy, có 2 giải pháp khả thi:
Rơle SQL
http://sqlrelay.sourceforge.net/
Điều này thực hiện chính xác những gì câu hỏi yêu cầu, và một loạt hơn. Tôi sẽ không đi sâu vào chi tiết về những gì tôi có thể tìm hiểu về điều này nhưng sẽ đề cập rằng đó không phải là một giải pháp khả thi vì nó không minh bạch. Có nghĩa là dòng chảy như sau:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Vì vậy, điều này sẽ liên quan đến việc viết lại tất cả các mã của chúng tôi từ mysql sang sql Relay. Không phải là một lựa chọn trong trường hợp của chúng tôi.
Tất cả những gì đang được nói, nếu ai đó đang lên kế hoạch cho một dự án quy mô lớn mới đòi hỏi bất kỳ tính năng nào trong số nhiều tính năng mà SQL Relay có, thì nghe có vẻ hay.
Mys Proxy Proxy
http://forge.mysql.com/wiki/MySQL_Proxy
Đây là giải pháp chúng tôi đã sử dụng.
Chìa khóa để thực hiện điều này làm những gì chúng tôi muốn nó là tập lệnh LUA gộp cho proxy mysql.
Phần mở rộng LUA này có thể được tìm thấy tại:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
Không cần đi sâu vào chi tiết, đây là một số thống kê cơ bản ... Xin lưu ý, điều này được thử nghiệm ở thời gian sử dụng THẤP:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Sau khi chuyển sang mysql-proxy và để mọi thứ ổn định:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Như bạn có thể thấy rõ, các cổng TIME_WAIT tới mysql đã giảm xuống gần như không có.
Các kết nối hiện tại thực tế vẫn tồn tại mà KHÔNG sử dụng mysql_pconnect / mysqli_connect (... p: tên máy chủ ...).
Đáng nói là dường như có một vài cài đặt cấu hình ở gần đầu tập lệnh lua pooler.
min_idle_connections cục bộ
và
max_idle_connections cục bộ
Chúng có vẻ khá tự giải thích. Ngoại trừ điều đó: Dường như mỗi kết hợp tên người dùng (và mật khẩu? Chưa được kiểm tra ... rất có thể không phải là tho.) Tạo ra tập hợp các kết nối liên tục của riêng nó.
Vì vậy, nhân max_idle_connections với số lượng người dùng mysql duy nhất sẽ kết nối với cơ sở dữ liệu. Và điều đó sẽ cho bạn ý tưởng về việc bạn sẽ có bao nhiêu kết nối nhàn rỗi.
Vì vậy, hãy để tôi nhắc lại để cái blurb nhỏ này đánh vào một số từ khóa cho những người tìm kiếm thông qua google:
Khi sử dụng PHP, có thể có các kết nối mysql liên tục mà KHÔNG CÓ mysql_pconnect không?
Có, điều này có thể được thực hiện thông qua SQL Relay nếu bạn không ngại xây dựng lại hầu hết mã của mình để chuyển các truy vấn của mình thông qua phần mở rộng của chúng HOẶC sử dụng proxy mysql trong suốt với tập lệnh ro-pooling.lua.
Chúng tôi đã muốn một cái gì đó như thế này trong khoảng một năm nay.
THƯỞNG THỨC!
mysql_pconnect
và bắt đầu mỗi kết nối với một số "chức năng dọn dẹp"?