mysql 연결을 닫는 것이 중요합니까?


답변:


89

로부터 문서 :

참고 : 서버에 대한 링크는 명시 적으로 mysql_close ()를 호출하여 닫지 않는 한 스크립트 실행이 종료되는 즉시 닫힙니다.

스크립트가 결과를 가져온 후 수행 할 처리량이 상당히 많고 전체 결과 집합을 검색 한 경우 반드시 연결을 닫아야합니다. 그렇지 않으면 웹 서버 사용량이 많을 때 MySQL 서버가 연결 제한에 도달 할 가능성이 있습니다. 스크립트가 끝날 때까지 MySQL 연결을 닫을 수없는 경우 명시 적으로 수행 할 필요가 없지만 더 깔끔합니다.

fastcgi가 어떤 영향을 미치는지 잘 모르겠습니다. 한 페이지 는 fastcgi를 지원하는 PHP 빌드가 mysql_connect에 대해서도 지속적인 연결을 생성한다고 주장합니다. 이것은 스크립트가 아닌 프로세스가 종료 될 때 연결이 닫히는 문서와 모순됩니다. 테스트하는 대신 mysql_close ()를 사용하는 것이 좋습니다. 실제로 가능한 경우 PDO 사용을 권장 합니다.


ftp_close에도 동일하게 적용되는 것 같습니다.
doc_id 2010 년

4
즉, 사용자가 페이지를 일찍 닫으면 (예를 들어) 연결이 열린 상태로 유지 될 수 있습니까?
Toni Michel Caubet 2013

1
@Toni Michel Caubet "The link to the server will be closed as soon as the execution of the script ends."사용자가 페이지를 일찍 닫으면 PHP 서버에 문제가되지 않습니다. 항상 스크립트를 실행하고 항상 스크립트를 종료합니다. 사용자 만 결과를 볼 수 없습니다.
arrowman

9

중요합니까? 별로

따라야 할 좋은 관행으로 간주됩니까? 예.

왜 닫고 싶지 않은지 모르겠습니다.


6
글쎄요, mysql_close"mysql_close () 사용은 일반적으로 필요하지 않습니다. 스크립트 실행이 끝날 때 비 지속적 오픈 링크가 자동으로 닫히기 때문입니다." 나는 연결을 끊지 않는 것이 나쁜 습관이라고 생각하지 않을 것입니다.
nico

4
"왜 닫고 싶지 않은지 모르겠습니다." 다시 필요할 가능성이 전혀 없다면 닫고 싶지 않을 것입니다.
Frank Farmer

1
만약 U가 ajax를 사용한다면 연결이 닫히면 U가 ajax를 사용하려고 할 때마다 연결이 다시 열리고 닫힐 것이고 이것은 서버에 대한 연결을 열어 두는 것보다 가치가있을 것이고 클라이언트는 연결을 열어 주든 상관하지 않을 것입니다 웹 사이트가 속도라는 것을 염두
Robert

정말 중요 할 수 있습니다 !!! 서버 부하가 높고 다른 사람이 응답하지 않는 서버로 이어질 수 있다고 말한 것처럼 닫히지 않은 연결이 많이있는 경우에는 매우 중요합니다!
oliiix

닫는 것이 좋습니다. 쉽고 문제가 없습니다.
José Carlos PHP

4

cgi와 같은 것을 사용할 때 스크립트 실행이 끝날 때 자동으로 닫히기 때문에 mysql 연결을 닫을 필요가 없습니다. 요청 간의 연결을 유지하는 mod_perl 및 기타와 같은 영구 기술을 사용할 때 연결, 전역 변수 등을 추적하는 것이 중요합니다.

기본적으로 영구 데이터의 경우 스스로 정리하십시오. 사소하고 비 영구적 인 데이터의 경우 어쨌든 요청이 완료되면 모두 사라집니다. 어느 쪽이든 가장 좋은 방법은 항상 연결을 닫는 것입니다.


1
그는 지속적이지 않은 PHP에 대해 이야기하고 있으므로 적용되지 않습니다.
Sasha Chedygov

2

스크립트 실행이 완료되는 즉시 닫힙니다. 지속적인 연결을 열지 않는 한. 이상적으로는 리소스 (여기에서 연결)를 완료하자마자 해제해야합니다. 실행 중에 곧 다시 필요할 가능성이없는 한.

단일 데이터베이스 서버 뒤에있는 경우 연결 풀링이나 영구 연결을 사용하는 것이 좋습니다. 그러나 더 많은 서버가 있고로드 밸런싱을 수행하는 경우 작업 분배가 손상 될 수 있습니다. 일반적으로 일부 클라이언트는 무거운 쿼리를 실행하는 반면 다른 클라이언트는 더 가벼운 쿼리를 실행합니다. 따라서 동일한 연결이 n 번 이상 사용되면 일부 서버는 과부하가 걸리고 다른 서버는 활용도가 낮습니다. 더 작은 ttl 및 가변 연결 풀 크기를 사용하는 것이 좋습니다.


1

대부분의 CMS는 요청이 끝날 때 MySQL 연결을 닫습니다. 이는 PHP가 어쨌든이를 수행하기 때문에 실제로 의미가 없습니다.

그러나 연결이 더 이상 필요하지 않은 스크립트가있는 경우 스크립트 중간을 향해 말하고 다른 무거운 활동이 발생하면 명시 적으로 연결을 닫는 것이 좋습니다. 이렇게하면 일부 리소스가 해제됩니다.

이제 연결을 닫을 때의 이점에 대해 많은 이야기가 있지만 연결을 닫지 않는 이점에 대해서는 거의 언급되지 않았습니다. 기본적으로 스크립트 끝에서 연결을 닫지 않으면 실제로 일부 리소스를 절약하는 것입니다. 초당 100 개의 페이지 뷰를 수신하는 웹 애플리케이션 (또는 모든 애플리케이션)을 상상해보십시오. 따라서 매초마다 mysqli_close100 번 호출해야합니다. 즉, 1 초마다 데이터베이스 서버로 100 번의 불필요한 왕복을 통해 열린 연결을 닫습니다. 성능 관점에서 보면 이것은 순수한 오버 헤드입니다. 왜냐하면 스크립트가 어쨌든 완료 될 때 PHP가 열린 연결을 확인하고 해당 연결을 닫을 것이기 때문입니다. 모든 것이 너무 빨리 일어나서 PHP가 해당 연결을 닫고 다시 닫으려고합니다.

참고 : 위의 대답은 영구 연결을 사용하지 않는다고 가정합니다 (영구 연결은 주요 CMS에서 사용되지 않음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.