문제

이런 의문이 생겨서 웹에 검색해 보니 답변이 다양한 것 같습니다.PHP를 통해 데이터베이스에 연결할 때 mysql_connect보다 mysql_pconnect를 사용하는 것이 더 낫습니까?나는 pconnect가 훨씬 더 확장성이 뛰어나다는 것을 읽었지만 반면에 지속적인 연결이 된다는 것은...동시에 10,000개의 연결을 갖고 모두 지속적으로 연결하는 것은 나에게 확장성이 없는 것 같습니다.

미리 감사드립니다.

도움이 되었습니까?

해결책

MySQL의 경우 지속적인 연결이 필요하지 않아야합니다. 다른 데이터베이스 (예 : Oracle)에서 연결하는 것은 비싸고 시간이 많이 걸리므로 연결을 재사용 할 수 있다면 큰 승리입니다. 그러나 이러한 데이터베이스 브랜드는 연결 풀링을 제공하여 문제를 더 나은 방법으로 해결합니다.

MySQL 데이터베이스에 연결하는 것은 다른 브랜드에 비해 빠르므로 지속적인 연결을 사용하면 다른 데이터베이스의 데이터베이스보다 MySQL에 비례 적으로 덜 이익이됩니다.

지속적인 연결도 단점이 있습니다. 데이터베이스 서버는 연결이 필요한지 여부에 관계없이 각 연결에 리소스를 할당합니다. 따라서 연결이 유휴 상태 인 경우 목적없이 낭비 된 자원이 많이 보입니다. 나는 당신이 10,000 개의 유휴 연결에 도달 할 것인지 모르겠지만 수백 건조차도 비용이 많이 듭니다.

연결에는 상태가 있으며, 이전에 다른 PHP 요청에서 사용한 세션에서 "정보를 상속"하는 PHP 요청에는 부적절합니다. 예를 들어, 임시 테이블과 사용자 변수는 일반적으로 연결이 닫히면 정리되지만 영구 연결을 사용하는 경우에는 그렇지 않습니다. 마찬가지로 캐릭터 세트 및 콜레이션과 같은 세션 기반 설정. 또한, LAST_INSERT_ID() 이전 PHP 요청 중에도 세션 중에 생성 된 ID를보고합니다.

MySQL의 경우, 적어도 지속적인 연결의 단점은 아마도 그들의 이점을 능가 할 것입니다. 그리고 높은 확장 성을 달성하기위한 다른 더 나은 기술이 있습니다.


2014 년 3 월 업데이트 :

MySQL 연결 속도는 다른 RDBMS 브랜드에 비해 항상 낮았지만 더 나아지고 있습니다.

보다 http://mysqlserverteam.com/improving-connectdisconnect-performance/

MySQL 5.6에서는 코드 처리 및 연결 끊기를 최적화하기 시작했습니다. 그리고이 작업은 MySQL 5.7에서 가속화되었습니다. 이 블로그 게시물에서 먼저 우리가 달성 한 결과를 보여준 다음 우리가 얻은 결과를 설명합니다.

자세한 내용과 속도 비교는 블로그를 읽으십시오.

다른 팁

기본적으로 연결을 생성하는 비용의 균형과 연결 유지를 유지해야합니다. MySQL은 새로운 연결을 설정하는 데 매우 빠르지 만 스레드 설정 시간과 웹 서버에서 TCP/IP 설정 시간으로 여전히 비용이 듭니다. 이는 높은 트래픽 사이트에서 눈에 띄게됩니다. 불행히도, PHP는 연결의 지속성에 대한 제어가 없습니다. 따라서 대답은 MySQL의 유휴 시간 초과를 먼 길 (20 초)으로 낮추고 스레드 캐시 크기를 향상시키는 것입니다. 함께, 이것은 일반적으로 놀랍게 잘 작동합니다.

반면에 응용 프로그램은 연결 상태를 존중해야합니다. 세션이있는 상태에 대해 가정하지 않는 것이 가장 좋습니다. 임시 테이블을 사용하는 경우, 존재하지 않으면 Create를 사용하고 Truncate 테이블을 사용하면 독창적으로 (userID와 같은) 이름을 지정하는 것과 같이 많은 도움이됩니다. 거래는 조금 더 문제가됩니다. 그러나 코드는 항상 맨 위에서 롤백을 할 수 있습니다.

10000 연결에 도달할 가능성은 거의 없습니다.어쨌든, 가서 공식 출처.(강조).

영구 연결에 추가 된 기능은 무엇입니까? 그들은 좋은가요?

대답은 매우 간단합니다. 능률.영구 연결은 다음과 같습니다. 링크를 만드는 오버 헤드가 있으면 좋습니다. SQL 서버가 높습니다.여부 또는 이 오버 헤드는 정말 높지 않습니다. 여러 요인에 따라 다릅니다.예를 들면 데이터베이스의 종류인지 여부 같은 컴퓨터에 있지 않습니다. 웹 서버가 어디에 있는지, 어떻게 SQL Server가있는 컴퓨터를로드했습니다. on is 등등. 결론 연결 오버헤드가 높고 지속적인 연결은 다음과 같은 이점을 제공합니다. 상당히.그들은 아이를 일으킨다 한 번만 연결하는 프로세스 전체 수명 동안 페이지를 처리할 때마다 SQL Server에 연결해야 합니다.이것은 모든 어린이에게 영구 연결을 열면 자체 열린 영속이 있습니다. 서버에 연결합니다.예를 들어 20명의 다른 자녀가 있는 경우 만든 스크립트를 실행한 프로세스 SQL에 대한 지속적 연결 서버, 당신은 20 개의 다른 것을 가질 것입니다 SQL Server에 대한 연결, 하나 각 어린이로부터.

그러나 여기에는 몇 가지 데이터베이스를 사용하는 경우의 단점 다음과 같은 연결 제한이 있습니다. 영구 자식에 의해 초과됨 연결.데이터베이스에 16대 기기 동시 연결 제한, 바쁜 서버 중에 session, 17개의 자식 스레드가 연결, 하나를 할 수 없습니다.면 스크립트에 버그가 있습니다. 연결을 종료하지 마십시오. down(예: 무한 루프)의 경우 16개의 연결만 있는 데이터베이스는 급속히 늪에 빠지게 됩니다.확인 정보를 위한 데이터베이스 문서 방치 또는 유휴 처리 시 연결.

mysql_connect() 그리고 mysql_pconnect() 둘 다 데이터베이스 연결을 위해 작동하지만 차이는 거의 없습니다.~ 안에 mysql_pconnect(), p 지속성 연결을 의미합니다.

우리가 사용할 때 mysql_connect() 함수는 요청에 따라 데이터베이스 연결을 열고 닫을 때마다 발생합니다.

그러나 경우에 mysql_pconnect() 기능:

  • 첫째, 연결할 때 함수는 동일한 호스트, 사용자 이름 및 비밀번호를 사용하여 이미 열려 있는 (영구) 연결을 찾으려고 시도합니다.발견되면 새 연결을 여는 대신 해당 식별자가 반환됩니다.

  • 둘째, 스크립트 실행이 종료되어도 SQL Server에 대한 연결이 닫히지 않습니다.대신 나중에 사용할 수 있도록 연결이 열린 상태로 유지됩니다(mysql_close() 다음에 의해 설정된 연결을 닫지 않습니다. mysql_pconnect()).

mysql_pconncet() 귀하의 사이트에 트래픽이 많을 때 유용합니다.그 때 모든 요청에 ​​대해 연결을 열지 않고 풀에서 가져옵니다.이렇게 하면 사이트의 효율성이 높아집니다.그러나 일반적인 사용에는 mysql_connect()가 가장 좋습니다.

mysql_connect ()

1.mysql_connect는 연결을 닫는 데 사용될 수 있으며, 요청에 따라 데이터베이스 연결을 열고 닫는 시간입니다.

2. MySQL Connect에 페이지가로드 될 때마다 데이터베이스가 열립니다.

3. 페이지가로드되면 데이터베이스가 매번로드됩니다.

4. 연결을 닫는 데 사용됩니다

예시:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

설명:

호스트 : LocalHost와 같은 호스트 이름 또는 IP 주소를 지정합니다.

mysql_user : mysql 사용자 이름을 지정합니다

mysql_password : mysql 비밀번호를 지정합니다

mysql_pconnect ()

1. 우리는 mysql_pconncet ()을 사용하고 처음에는 열린 영구 연결을 찾으려고합니다.

2. MySQL_PCONNCET ()는 영구 연결을 엽니 다

3. mysql_pconnect ()가 가까운 연결을 지원하지 않습니다.

4.mysql_pconnect ()는 연결을 닫을 수 없습니다. 여기서 데이터베이스에 대한 지속적인 연결을 엽니 다

5. 데이터베이스를 매번 연결할 필요는 없습니다.

6. MySQL_PCONNCET ()에서 데이터베이스를 연결할 필요는 없습니다.

자세한 내용은:http://prittytimes.com/difference-ween-mysql_connect-and-mysql_pconnect/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top