TIP게시판

제목 [어리버리팁 01] database autoinit TRUE/FALSE [수정]
글쓴이 어리버리 작성시각 2013/12/18 11:51:39
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 14669   RSS
요즘 속도 개선을 위해서,  알아보다가 이 설정이 눈에 들어왔네요.

한글 메뉴얼에는 설명이 빠져 있는데, database.php 설정에 autoinit이라는 설정이 있습니다.

autoinit
- Whether or not to automatically connect to the database when the library loads. If set to false, the connection will take place prior to executing the first query.
: database 라이브러리를 로드될 때, 자동으로 커넥트를 할지를 설정하고, false라면 첫번째 쿼리를 실행할때 연결한다는 설명입니다.

default값은 true로 되어 있습니다.

코드이그나이터의 cache_on 설정을 해서, 쿼리 결과가 캐쉬가 될 경우에 실제 쿼리를 실행하지 않는데,
autoinit 설정으로 인해서, 불필요한 커넥션을 맺는 결과를 가져오게 됩니다.

그리고 만약 database를 autoload를 했을 경우에는 모든 페이지마다 연결을 하는 동작이 있어서 불필요한 db 연결이 발생했을 수도 있습니다.


autoinit 설정을 false로 하면, 캐쉬가 될 경우 db와 connect를 하지 않아도 되므로,
연결 시간이 없어지고, db에 부하도 줄이는 효과를 주지 않을까 생각합니다.


* 추가로 확인한 사항인데, escape를 처리할 경우 문제의 소지가 있습니다.

mysql_real_escape_string() 을 사용할 경우 에러가 발생합니다. mysql 연결이 되어 있지 않기 때문입니다.

binding을 사용하거나 $this->db->insert_string(); , $this->db->update_string(); 등 escape가 처리 동작시에 
 mysql 연결이 되어 있지 않을 경우, 내부적으로 escape 처리 동작시에,  mysql_real_escape_string을 사용하지 못하고,  mysql_escape_string() or addslashes()를 사용합니다.

아마도 escape 동작때문에 autoinit 설정이 기본으로 true인것 같습니다.

escape가 처리될 쿼리에서는 마음 편하게,  상단에  $this->db->initialize(); 를 사용을 하는것이 방법인것 같습니다.





 

 다음글 윈도우 압타나 스튜디오3 에서 github의 ssh 연... (3)
 이전글 jQuery를 이용한 ajax Pagination. (3)

댓글

변종원(웅파) / 2013/12/18 16:47:53 / 추천 0
부하를 줄일 수 있겠네요. 감사합니다.
2전산2 / 2014/01/15 22:45:41 / 추천 0
좋은 정보 감사합니다.