TIP게시판

제목 db library 에서 save_queries 옵션에 대한 팁
글쓴이 pithecus 작성시각 2012/03/29 22:39:12
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 16070   RSS
ci 로 db 입출력 작업을 하는 daemon 을 개발하는 중에
실행시간이 지날 수록 메모리 사용량이 계속 늘어나더군요. 

while(true):
  $sql = "~~~";
  $this->db->query($sql);
endwhile; 

어디선가 메모리 leak 이 있나해서 찾아보다 보니
db library 의 query 에서 발견한 점 하나 공유드립니다.

db library 에 보면 save_queries 라는 옵션이 있습니다.
db->last_query() 및 profiler 에서 성능측정을 하기 위해서
이 옵션이 true 이면 db->query() 에서 실행한 sql 문자열을 전부 저장을 하더군요.

일반적인 웹페이지의 경우 response 를 하면 자동으로 종료가 되니 문제가 없겠지만
daemon 등의 loop 구조 또는 대량의 자료처리를 할 경우에는 얼마 지나면 php 가 멈춰버립니다 :)

ci user guide 에는 save_queries 옵션 설정에 대한 내용은 없어서 좀 헤멨네요.
$this->db->save_queries = FALSE 
으로 코드상에 넣거나
database config 에 $config["save_queries"] = FALSE 를 설정해도 됩니다.
(config 에 넣을 경우에는 db->last_query() 등 연관된 기능은 사용못하겠죠.)

더 궁금하신게 있으면 여기를 참조하시기 바랍니다.
http://www.greeneggmedia.com/blog/entry/undocumented-codeigniter 
ci reactor 에 수정요청은 올라가 있는데 언제 반영될지는 모르겠네요.

 다음글 Customization Pagination (페이징 ... (1)
 이전글 세션 분실 && 읽지못함 관련 팁...이... (1)

댓글

한대승(불의회상) / 2012/03/30 11:28:19 / 추천 0
좋은 정보 감사 합니다.

cron 이나 daemon 종류라면 DB작업이 주가 될것 같습니다.
로직이 복잡 하지 않다면 CI를 사용하지 않는 방법도 대안이 될것 같습니다. ^^
민상k / 2012/05/22 13:56:47 / 추천 0
cron 에 넣어둔 크롤러가 자주 죽어서 원인을 살펴보고 있었는데 이 문제일 수도 있을 것 같군요.
한번 넣어봐야겠어요ㅋ
민상k / 2012/05/22 14:23:55 / 추천 0
알려주신 부분에 더하여,
길게 쓴 배열들 unset 하고, 주기적으로 라이브러리 재로드 하는 부분을 넣었더니 아직까지 안 죽고 잘 동작하네요ㅋ
좋은 정보 감사드립니다.