php 에서 db close 를 안 하면 성능저하가 어느정도 일어날까요?
안녕하십니까. 조금 뜬금없지만, "증거" 를 찾을 수 없어서 질문으로 올립니다.
상황은 이하와 같습니다.
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 종료가 될때 모든
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에 신경을 쓰는 것이 더 비효율적일 수도 있습니다. :-)
감사합니다.
좋은 말씀 감사드립니다.
지나가다 우연히 보게되었는데 저한텐 좋은 정보네요.
감사합니다 =)
댓글 달기