php 에서 db close 를 안 하면 성능저하가 어느정도 일어날까요?

cococo의 이미지

안녕하십니까. 조금 뜬금없지만, "증거" 를 찾을 수 없어서 질문으로 올립니다.

상황은 이하와 같습니다.

1. 어찌저찌 하여, 구축된 LAMP 에 매 1초마다 request 요청.
2. 각종 값들을 비교하여 다음 대응.

서비스 내용만으로 본다면 c 등등으로 소켓 통신이 더 나았었들 듯 하지만, 이미 구축된 걸 손댈수는 없고 해서... 저런 형태가 됐습니다.

구조를 저걸 걱정하는게 아니고( 이미 물건너 갔습니다. )
동료가 php 코드를 짜 놨는데, 내용을 보니까

3. 모든 php 코드에서
4. connect open 하고 DB 조작 후
5. connection close 없이 페이지 종료

하더군요.

처음에는 "무슨짓이야" 라고 말하려다가...
생각해보니까 저 코드로 이미 1주일 이상 사이트가 서비스되고 있었단 말이죠. 그것도 모든 사용자가, 매 1초마다 request 하는 상태로요.

여기서부터 질문입니다.

11. 혹시 php 페이지에서 connection close 안 해도, 문제 없나요?
12. 사실은 db connection 이 close 안 되어서 resource 가 반환 안 되고 있는 ( = 서버 부하가 큰 ) 상태인데, 저만 모르고 있는 걸까요?
top 으로 확인해 보니까 mysql 점유일이 15% 정도 나옵니다. Apache 는 5 ~ 10% 에서 왔다갔다 하고요. ( 서버는 호스팅 업체거 씁니다. )
13. connection close 를 안 하는 게 부하가 크다는 것을 눈으로 확인할 수 있는 방법이 뭐가 있을까요?
14. 현재 php 5.3 쓰는데, 혹시 최근의 php 혹은 LAMP 는, db connection 을 매 페이지마다 close 안 해 줘도, 알아서 정리해주는 기능이 있는거 아닐까요?
마치 java 에서 garbage collect 되는 것 처럼요.

아무 의견이나 부탁드립니다. 작업 우선 순위를 결정할때 참고하려고 합니다.

이상입니다. 좋은 하루 되시기 바랍니다.

익명 사용자의 이미지

DB 커넥션 닫는 건 mysql 에서 일정시간 지나면 닫아주기에 보통의 경우라면 문제없을건데요.
성능 이슈가 중요하다면, netstat 같은 명령어로 커넥션이 몇개가 연결되어 있는지 보시거나, mysql 상에서 show processlist 등을 통해 간단히 확인하시면 될거 같은데요.

김정균의 이미지

php 는 page 종료가 될때 GC(gabage collector)에 의해서 모든 reousrce를 반환하도록 되어 있습니다. 즉 mysql open은 page가 종료되는 시점에서 자동으로 close가 됩니다.

그럼 왜 close를 해야 하느냐에 대한 의문이 남을 수 있는데

1. connection을 끊고 다른 connection을 사용하고 싶을 때
2. 시간이 긴 page 처리에서, db connection 이 전반부에서만 사용될 때의 resource 중복 낭비를 위해서..

이정도로 보시면 됩니다. 즉, 처리하는 page의 속도가 아주 빠르다거나, 또는 resource 사용량이 많지 않다면 굳이 close를 하지 않아도 상관은 없습니다만, 이건 일반적인 견해이고, logic에 따라 close를 해 주시는 것이 더 효율적일 수 있습니다. 다만 이 효율이라는 것이 resource 관점일 뿐, 다른 비용을 추가했을 경우에는 close에 신경을 쓰는 것이 더 비효율적일 수도 있습니다. :-)

지나가는 나그네의 이미지

좋은 말씀 감사드립니다.
지나가다 우연히 보게되었는데 저한텐 좋은 정보네요.
감사합니다 =)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.