CI 묻고 답하기

제목 codeigniter 데이터베이스 쿼리 속도 질문 드립니다.
카테고리 CI 2, 3
글쓴이 김제연 작성시각 2017/11/08 15:28:38
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 15616   RSS

간단한 테이블이 있습니다.. 그냥 비트코인 시세  들어가있는 테이블입니다.

'2224503', 'BTC-XMR', '0.7%', '2014-06-04', '-1.1%', '0.014524290', '0.013258510', '0.013746110', '553.4060', '14', 'Monero', 'XMR', '2017-11-08 14:16:20'

 

이런식의 값이 들어가있고

 

쿼리식은 

select * FROM bitrex_nt where market = 'BTC-XMR' and created_at >= date_add(now(),interval -4 hour) group by rank

 

위와  같고 ..workbench 상에서 쿼리 하면.. 0.00x초 만에 .. 모두 처리가 되는 쿼리문입니다.

 

그런데 .. codeingiter 모델에서 

$sql = "SELECT * FROM bitrex_nt where market = ? and created_at >= date_add(now(),interval -4 hour) group by rank";
$result = $this->db->query($sql, $market)->result();

 

이런식으로 가져오려고 하면.. 4~6초 등.. 엄청 느리게 동작 하는데 ... 

제가 빠트린 부분이 있을까요? 따로 .. 소스가 있는게 아니라 .. 그냥 가져오는곳에서 느려 버리니.. 

초보인 제가 어떻게 해볼 도리가 없습니다.. 왜 느려지는 것인지 알 수 있을까요 .. 개선 방법도 있다면 부탁 드립니다.

 

3.1.5 사용중이고 리눅스 입니다.

 다음글 값 넘겨서 페이지 호출할때 css및 js가 적용되지 않... (2)
 이전글 do_upload 시 (1)

댓글

변종원(웅파) / 2017/11/08 15:38:49 / 추천 0

단순히 저 부분때문에 느려지는건 아닐 것 같습니다. 

profiler 켜서 query 전체의 시간을 확인해보세요.

김제연 / 2017/11/08 15:47:42 / 추천 0

안그래도 검색으로 프로파일러 켜라고 해서 .. 켜봤는데 쿼리시간이 

<legend style="color:#0000FF;">  DATABASE:  cryptocoin (Bitrex:$db)   QUERIES: 1 (6.0989 seconds)  (<span style="cu

이렇게 뜹니다.. 6초로요 .. 

 

php 디버그로 ... 요청하면.. 저 위에 $sql 까지 바로 옵니다.. 그리고 .. F10 눌러서 .. 한단계 실행하면.. 실제로 

6초 뒤에 .. 다음 구문으로 넘어갑니다...

변종원(웅파) / 2017/11/08 16:08:35 / 추천 0

워크벤치에선 0점대가 나오고 서버에서 6초가 나온다면 서버와 mysql서버 구간을 의심해볼 수 있습니다.

웹과 mysql이 같은 서버에 있는건가요?  위 쿼리 하나만 컨트롤러 메소드로 만들어서 테스트를 해보시면 확실해질 것 같네요. 

김제연 / 2017/11/08 16:17:04 / 추천 0

네 같은 서버 입니다.

이것도 .. 다른 처리 하나 없이.. 컨트롤러에서 모델로 호출하고 .. 

모델에서 바로 위에 적은 두줄만 실행하고 

저 뒤에 echo 로 .. json_encoding 해서 넘겨주는게 다 입니다.

김제연 / 2017/11/08 16:18:36 / 추천 0
public function getHistory() {
    $market = json_decode(file_get_contents("php://input"),true);

    $this->bitrex_m->getHistory_4h($market);

}


$sql = "SELECT * FROM bitrex_nt where market = ? and created_at >= date_add(now(),interval -4 hour) group by rank";

$this->output->enable_profiler(TRUE);
$result = $this->db->query($sql, $market)->result();
echo json_encode($result);
김제연 / 2017/11/08 16:29:03 / 추천 0

금방

public function getHistory2() {

    $market = "BTC-ETH";
    $sql = "SELECT * FROM bitrex_nt where market = ? and created_at >= date_add(now(),interval -4 hour) group by rank";

    $result = $this->db->query($sql, $market)->result();
    echo json_encode($result);

}

김제연 / 2017/11/08 16:29:44 / 추천 0
방금 컨트롤러를 만들어서 해봤으나 똑같이 5~6초 이상 걸리네요...어디를 의심해 봐야 할까요?
변종원(웅파) / 2017/11/08 16:34:37 / 추천 1
바인딩 빼고 값을 넣어서 쿼리 작성해서 테스트 해보시고 그래도 동일하다면 현재 여건에서는 더 답변드리기가 힘들것 같네요.
김제연 / 2017/11/08 16:34:57 / 추천 0

아 .. 지금 좀 이상하네요 ... 웹이랑 디비랑 같은 서버인줄 알았는데 .. 서버가  틀려서 

DB서버에 들어가서 직접 입력을 해봤는데 ... DB서버에서  8~9초 이런식으로 나와버리네요.. 

그런데 신기하게 .. 같은 db서버에 workbench 로 접속해서 쿼리 하면 0.01초가 걸립니다.

김제연 / 2017/11/08 16:35:41 / 추천 0
답변 감사 드립니다.. 이상황에서는 codeigniter 와 상관없이 어디 다른곳에 문제가 있는 듯 싶네요 .. 
변종원(웅파) / 2017/11/08 16:36:50 / 추천 0
쿼리 캐시일 수도 있을 것 같네요