1

주제: 근본적인 속도문제 개선(컨설팅 결과공개)

예전에 이런 과제 해결로 현상금을 건 적이 있습니다.

-- 과제 : 속도 문제 해결 (홈페이지 접속시 시간이 너무 올래 걸림 10초)
-- 순수 하루 접속자수 : 5,000명 ~ 7,000명 (전체 방문자수 아님)
-- 사양 : 2Ghz CPU(Zeon), RAM 2GB, SCSI 120HDD
-- www.trav.kr (여행웹진)

결과는

물론 누구도 해결하지 못해서 서버 사양을 Quad에 2GB RAM을 추가 업그레이드 하는 걸로 속도를 해결했습니다.
(여기 저기 알아보니 역시 접속자수가 많은 곳은 비슷하더군요. 단독서버 호스팅에 라운드로빈까지 하고 있더군요.)
-------------------------------------------------------------------------------------------------
그런데 또 속도 문제가 발생을 해서 컨설팅을 받아봤더니 다음과 같은 원인을 내 놓았습니다.

------------------------컨설팅 결과--------------------------------------------
다음 SQL은 모니터링 결과 DB CALL로 인해 CPU사용이 급증하면서
홈페이지 속도를 떨어트리는 악성SQL입니다.

SELECT e.*, c.label categoryLabel
FROM tt_Entries e LEFT JOIN tt_Categories c ON e.owner = c.owner
  AND e.category = c.id
WHERE e.owner = 1
    AND e.draft = 0
    AND e.visibility >0
    AND e.category >= 0
ORDER BY e.published DESC

위 SQL이 사용되는 곳은 총 17군데로 페이징 처리가 되는 곳으로 파일은 아래와 같습니다.
blog\index.php (865,8)
blog\item.php (868,8)
blog\archive\index.php (646,8)
blog\m\index.php (181,8)
blog\m\item.php (407,8)
blog\m\comment\item.php (223,8)
blog\m\comment\comment\item.php (190,8)
blog\m\comment\delete\action\index.php (227,8)
blog\m\comment\delete\action\item.php (226,8)
blog\m\pannels\item.php (294,8)
blog\m\trackback\item.php (186,8)
blog\notice\item.php (639,8)
blog\owner\skin\preview\index.php (654,8)
blog\page\item.php (639,8)
blog\search\index.php (666,8)
blog\tag\index.php  (651,8)
-----------------------------------------------------------------------------------
위 SQL를 먼저 튜닝한 후, 모니터링을 다시 한 후 튜닝 계획을 세워야 할 것 같습니다.

---------------------------컨설팅 결과--------------------------------------------
결국 paging에서 전체를 호출하는 페이지가 너무 많아 근본적인 속도가 떨어진다고 합니다. 우선 이것부터 해결되어야 되지 않을까 합니다. 공짜로 사용을 해서 좋기는 한데 서버 추가 구매는 물론 컨설팅 비용까지 ...

암튼 안정성이 더 높아졌으면 합니다.

강병기 (2007-06-28 09:51:14)에 의해 마지막으로 수정

2

답글: 근본적인 속도문제 개선(컨설팅 결과공개)

감사합니다.^^ 피드백 덕분에 1.1.1 이후에 누락된 일부 쿼리 부분을 막 수정할 수 있었습니다. 의외의 필드에 인덱스가 필요할 것 같네요 smile 수정되는대로 커밋 로그를 붙이겠습니다.

적어주신 주소를 방문해 보았는데, 혹시 버전이 1.1.0대를 사용하고 계신가요? 1.1.0 정도에서 쿼리로 인한 성능 하락이 굉장히 심했었습니다. (그래서 1.1.1이 나왔죠.) 데이터베이스를 백업하신 후에 1.1.3으로 업그레이드는 어떠신지요^^ 아마 1.1.0대보다는 로딩 속도가 1/4 정도로 줄어 들지 않을까 싶습니다.

정말 감사합니다!

"Everything looks different on the other side."

-Ian Malcomm, from Michael Crichton's 'The Jurassic Park'

3

답글: 근본적인 속도문제 개선(컨설팅 결과공개)

각 페이지에 맞게 필요한 select list 을 현재의 "*" 대신에 필요한 칼럼만 출력하여 사용하면 보다 속도 개선이 될 것 같은데...  버전업시에 적용하시면 어떨까 싶습니다.

그리고, 개선된 버전은 언제쯤 공개될 건지도 궁금하구요???

4

답글: 근본적인 속도문제 개선(컨설팅 결과공개)

강병기 작성:

각 페이지에 맞게 필요한 select list 을 현재의 "*" 대신에 필요한 칼럼만 출력하여 사용하면 보다 속도 개선이 될 것 같은데...  버전업시에 적용하시면 어떨까 싶습니다.

그리고, 개선된 버전은 언제쯤 공개될 건지도 궁금하구요???

옙 그런데 말씀하신 쿼리가, 원래 글 내용을 전부 들고 오도록 만들어진 쿼리입니다. smile getEntriesByCategory 식으로, 해당되는 글의 모든 정보를 다 들고 오도록 만들어져 있지요. 그래서 모든 정보를 다 써서 출력하기 때문에 필요한 칼럼만 뽑는게 사실 의미가 없는 것이 고민입니다.

혹시 사용하시는 mySQL의 버전을 알 수 있을까요? 부탁드립니다. smile

"Everything looks different on the other side."

-Ian Malcomm, from Michael Crichton's 'The Jurassic Park'

5

답글: 근본적인 속도문제 개선(컨설팅 결과공개)

사용중인 mysql version은 5.0.37  입니다.

6

답글: 근본적인 속도문제 개선(컨설팅 결과공개)

강병기 작성:

사용중인 mysql version은 5.0.37  입니다.

옙^^

(이미 해보셨는지 모르겠습니다만) 관계형 쿼리가 들어가는 테이블들을 한 번 innodb로 변환해 보시면 어느정도 속도에 도움이 되실 겁니다.^^ 한 번 테스트 해 보시고 response time을 봐 주세요.

답변이 늦어서 죄송합니다. 피로 누적이었습니다. ㅠ_ㅠ

"Everything looks different on the other side."

-Ian Malcomm, from Michael Crichton's 'The Jurassic Park'