많은 검색을 마친 후 마침내 해결책을 찾았습니다.
나는 작가가 많지 않으므로 가능한 한 간결하게 만들기 위해 최선을 다할 것입니다.
내가 찾을 수있는 한 두 가지 가능한 솔루션이 있습니다.
SQL 릴레이
http://sqlrelay.sourceforge.net/
이것은 질문이 요구 한 것과 정확하게 일치합니다. 나는 이것에 대해 알 수있는 것에 대해 너무 자세하게 설명하지는 않지만 투명하지 않기 때문에 가능한 해결책이 아니라고 언급 할 것입니다. 흐름은 다음과 같습니다.
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
따라서 이것은 모든 코드를 mysql에서 sql relay로 다시 작성하는 것과 관련이 있습니다. 우리의 경우에는 옵션이 아닙니다.
말하자면, 누군가가 SQL Relay의 수많은 기능 중 하나를 필요로 하는 신선한 대규모 프로젝트를 계획하고 있다면 아름답게 들립니다.
MySQL 프록시
http://forge.mysql.com/wiki/MySQL_Proxy
이것이 우리가 사용한 솔루션입니다.
이것이 우리가 원하는 일을하게하는 열쇠는 mysql 프록시를위한 풀링 LUA 스크립트입니다.
이 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-proxy로 전환하고 문제를 해결 한 후 :
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
보다시피 알 수 있듯이 mysql의 TIME_WAIT 포트는 거의 없음으로 떨어졌습니다.
연결은 이제 mysql_pconnect / mysqli_connect (... p : hostname ...)를 사용하지 않고 지속적으로 유지 됩니다.
풀러 루아 스크립트 상단 근처에 몇 가지 구성 가능한 설정이있는 것으로 보입니다.
로컬 min_idle_connections
과
로컬 max_idle_connections
이것들은 꽤 자명 한 것으로 보입니다. 이를 제외하고 : 각 사용자 이름 (및 비밀번호? 테스트되지 않은 ... 대부분은 그렇지 않음) 조합이 고유 한 영구 연결 세트를 생성하는 것으로 보입니다.
따라서 max_idle_connections에 데이터베이스에 연결할 고유 한 mysql 사용자 수를 곱하십시오. 그리고 그것은 당신에게 얼마나 많은 유휴 연결이 있는지에 대한 아이디어를 줄 것입니다.
이 작은 블 러브가 Google을 통해 검색하는 사람들을 위해 일부 키워드를 검색하도록 반복하겠습니다.
PHP를 사용할 때 mysql_pconnect없이 지속적인 mysql 연결이 가능합니까?
예, 확장을 통해 쿼리를 파이프하거나 ro-pooling.lua 스크립트와 함께 mysql-proxy를 투명하게 사용하기 위해 대부분의 코드를 다시 작성하지 않아도되는 경우 SQL Relay를 통해 수행 할 수 있습니다.
우리는 지금 약 1 년 동안 이런 것을 원했습니다.
즐겨!
mysql_pconnect"정리 기능"으로 각 연결을 사용 하고 시작 하지 않습니까?