mysql 연결을 효율적으로 닫는 것이 중요합니까? 아니면 PHP 파일이 실행 된 후 자동으로 닫습니까?
mysql 연결을 효율적으로 닫는 것이 중요합니까? 아니면 PHP 파일이 실행 된 후 자동으로 닫습니까?
답변:
로부터 문서 :
참고 : 서버에 대한 링크는 명시 적으로 mysql_close ()를 호출하여 닫지 않는 한 스크립트 실행이 종료되는 즉시 닫힙니다.
스크립트가 결과를 가져온 후 수행 할 처리량이 상당히 많고 전체 결과 집합을 검색 한 경우 반드시 연결을 닫아야합니다. 그렇지 않으면 웹 서버 사용량이 많을 때 MySQL 서버가 연결 제한에 도달 할 가능성이 있습니다. 스크립트가 끝날 때까지 MySQL 연결을 닫을 수없는 경우 명시 적으로 수행 할 필요가 없지만 더 깔끔합니다.
fastcgi가 어떤 영향을 미치는지 잘 모르겠습니다. 한 페이지 는 fastcgi를 지원하는 PHP 빌드가 mysql_connect에 대해서도 지속적인 연결을 생성한다고 주장합니다. 이것은 스크립트가 아닌 프로세스가 종료 될 때 연결이 닫히는 문서와 모순됩니다. 테스트하는 대신 mysql_close ()를 사용하는 것이 좋습니다. 실제로 가능한 경우 PDO 사용을 권장 합니다.
"The link to the server will be closed as soon as the execution of the script ends."
사용자가 페이지를 일찍 닫으면 PHP 서버에 문제가되지 않습니다. 항상 스크립트를 실행하고 항상 스크립트를 종료합니다. 사용자 만 결과를 볼 수 없습니다.
중요합니까? 별로
따라야 할 좋은 관행으로 간주됩니까? 예.
왜 닫고 싶지 않은지 모르겠습니다.
mysql_close
"mysql_close () 사용은 일반적으로 필요하지 않습니다. 스크립트 실행이 끝날 때 비 지속적 오픈 링크가 자동으로 닫히기 때문입니다." 나는 연결을 끊지 않는 것이 나쁜 습관이라고 생각하지 않을 것입니다.
cgi와 같은 것을 사용할 때 스크립트 실행이 끝날 때 자동으로 닫히기 때문에 mysql 연결을 닫을 필요가 없습니다. 요청 간의 연결을 유지하는 mod_perl 및 기타와 같은 영구 기술을 사용할 때 연결, 전역 변수 등을 추적하는 것이 중요합니다.
기본적으로 영구 데이터의 경우 스스로 정리하십시오. 사소하고 비 영구적 인 데이터의 경우 어쨌든 요청이 완료되면 모두 사라집니다. 어느 쪽이든 가장 좋은 방법은 항상 연결을 닫는 것입니다.
스크립트 실행이 완료되는 즉시 닫힙니다. 지속적인 연결을 열지 않는 한. 이상적으로는 리소스 (여기에서 연결)를 완료하자마자 해제해야합니다. 실행 중에 곧 다시 필요할 가능성이없는 한.
단일 데이터베이스 서버 뒤에있는 경우 연결 풀링이나 영구 연결을 사용하는 것이 좋습니다. 그러나 더 많은 서버가 있고로드 밸런싱을 수행하는 경우 작업 분배가 손상 될 수 있습니다. 일반적으로 일부 클라이언트는 무거운 쿼리를 실행하는 반면 다른 클라이언트는 더 가벼운 쿼리를 실행합니다. 따라서 동일한 연결이 n 번 이상 사용되면 일부 서버는 과부하가 걸리고 다른 서버는 활용도가 낮습니다. 더 작은 ttl 및 가변 연결 풀 크기를 사용하는 것이 좋습니다.
대부분의 CMS는 요청이 끝날 때 MySQL 연결을 닫습니다. 이는 PHP가 어쨌든이를 수행하기 때문에 실제로 의미가 없습니다.
그러나 연결이 더 이상 필요하지 않은 스크립트가있는 경우 스크립트 중간을 향해 말하고 다른 무거운 활동이 발생하면 명시 적으로 연결을 닫는 것이 좋습니다. 이렇게하면 일부 리소스가 해제됩니다.
이제 연결을 닫을 때의 이점에 대해 많은 이야기가 있지만 연결을 닫지 않는 이점에 대해서는 거의 언급되지 않았습니다. 기본적으로 스크립트 끝에서 연결을 닫지 않으면 실제로 일부 리소스를 절약하는 것입니다. 초당 100 개의 페이지 뷰를 수신하는 웹 애플리케이션 (또는 모든 애플리케이션)을 상상해보십시오. 따라서 매초마다 mysqli_close
100 번 호출해야합니다. 즉, 1 초마다 데이터베이스 서버로 100 번의 불필요한 왕복을 통해 열린 연결을 닫습니다. 성능 관점에서 보면 이것은 순수한 오버 헤드입니다. 왜냐하면 스크립트가 어쨌든 완료 될 때 PHP가 열린 연결을 확인하고 해당 연결을 닫을 것이기 때문입니다. 모든 것이 너무 빨리 일어나서 PHP가 해당 연결을 닫고 다시 닫으려고합니다.
참고 : 위의 대답은 영구 연결을 사용하지 않는다고 가정합니다 (영구 연결은 주요 CMS에서 사용되지 않음).