Після довгих пошуків я нарешті знайшов рішення.
Я не дуже письменник, тому зроблю все можливе, щоб зробити це максимально стислим.
Наскільки я міг знайти, є 2 можливих рішення:
Реле SQL
http://sqlrelay.sourceforge.net/
Це робить саме те, про що задавали питання, і ще багато. Я не буду надто детально описувати те, що мені вдалося дізнатися про це, але зазначу, що це не було життєздатним рішенням, оскільки воно не прозоре. Значить, потік такий:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Отже, це передбачало б переписання всього нашого коду з mysql на реле sql. У нашому випадку це не варіант.
Все, що говорити, якщо хтось планує свіжий масштабний проект, який вимагає будь-якої з численних функцій, які має SQL Relay, це звучить прекрасно.
Проксі-сервер Mysql
http://forge.mysql.com/wiki/MySQL_Proxy
Це рішення, яке ми закінчили.
Ключовим фактором для того, щоб зробити це тим, що ми хочемо, зробити це сценарій об'єднання LUA для проксі-сервера mysql.
Це розширення LUA можна знайти за адресою:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
Не вдаючись до занадто багато деталей, ось основні статистичні дані ... Майте на увазі, це перевірено в низький час використання:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Після переходу на mysql-проксі і дозволити всім вирішуватися:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Як ви добре бачите, TIME_WAIT портів до mysql впав майже до жодного.
Підключення фактично стійкі БЕЗ використання mysql_pconnect / mysqli_connect (... p: ім'я хоста ...).
Варто згадати, що, здається, є кілька настроюваних налаштувань біля верхньої частини скрипту lua у пулі.
локальні min_idle_connections
і
локальні max_idle_connections
Вони здаються досить зрозумілими. За винятком цього: Здається, що кожне ім'я користувача (і пароль? Неперевірений ... швидше за все, не тхо.) Поєднання створює власний набір стійких з'єднань.
Отже, помножте max_idle_connections на кількість унікальних користувачів mysql, які будуть підключатися до бази даних. І це має дати вам уявлення про те, скільки непрацюючих з'єднань у вас в кінцевому підсумку.
Отже, дозвольте ще раз зазначити, що ця маленька розмитість відображає деякі ключові слова для тих, хто шукає через Google:
Чи можливо при використанні PHP мати стійкі з'єднання mysql БЕЗ mysql_pconnect?
Так, це можна зробити за допомогою SQL Relay, якщо ви не хочете перестроювати більшу частину коду для передачі запитів через їх розширення АБО прозоро, використовуючи mysql-proxy зі сценарієм ro-pooling.lua.
Ми хотіли чогось подібного вже близько року.
Насолоджуйтесь!
mysql_pconnect
та запустити кожне з'єднання з деякими "очисними функціями"?