드루팔 성능/속도 올리기 제1탄 - 현상을 확인하고, 느린 원인을 찾아내기

드루팔 속도 올리기 제1탄
- 현상을 확인하고, 느린 원인을 찾아내기

드루팔 사이트가 느려지는 원인은 여러가지가 있을 수 있다.

너무 많은 모듈이 동시에 돈다든가, 서버 자체의 성능이 나쁘거나
DB에 부하가 심하게 걸리거나, 혹은 특정 모듈의 버그로 인해서 느려질수도 있다.

이렇게 다양한 원인을 정확하게 집어내려면,
먼저 문제 현상을 확인하는 것이 중요하다.
아니, 이미 느린 것은 아는데 무슨 현상 확인?

느린 것을 막연히 느리다고 표현하면 전문가가 아니다.
느린 경우의 상황과 해당 페이지 등을 좀 더 구체적으로 알아낼 필요가 있다.
예를 들어 항상 느린가? 아니면 특정 페이지에서 느린가?
아니면 어떤 모듈이 활성화되면 느린가? 언제, 무슨 기능을 추가한 뒤로부터 느려졌을까?
등등에 관한 자세한 정보가 있으면 더 명확한 원인을 진단, 정확한 문제해결까지 이루어 질 수 있다.

이런 경우에 쓸만한 측정툴이나 로그가 있으면 참 좋다.

1. (호스팅 회사에 따라 제공할수도 안할수도 있는데)
    MySQL 로그 중 SLOW QUERY 관련 로그를 보면 어떤 상황/모듈에서 느린지 알 수 있다.

2. Devel 이라는 모듈은 해당 페이지의 세부적인 SQL실행 속도를 모두 알려준다.

3. 특정 모듈은 하나씩 꺼 본다. 비활성화했을 때 사이트가 빨라지면 그 모듈이 원인일 가능성이 높다.

4. 모듈들의 버전과 관련 DB Schema을 확인해 본다.

5. 부하집중/해킹의 가능성은 없는지 웹로그 등을 분석해 본다.

-------------------------------------------------------------------

주의! 아래 팁은 오래 전의 글로, 드루팔 코어 수정으로 표시속도 향상이 있었다.
하지만 아래 팁은 드루팔의 코어를 손대는 것으로 그다지 추천하는 방법이 아니다.
또한 버전이 올라가면서 저절로 해결될 가능성이 높다.

제목 - 로컬라이즈(지역화) 관련 locale 모듈을 잡아라!

드루팔의 최대 약점으로 꼽히는,
다소 답답한 출력속도는 원인이 다양하다.

너무 많은 기능(각종 부속 모듈이 많아 처리할 게 많다)이 돌거나 로컬라이즈 과정에서 각 나라 언어별로 바꾸어 표시하는 부분이 늦다든가 기타 등등의 원인이 있다.

이번에는 해당 언어(예:한글)로 출력하는 과정에서 생기는 딜레이를 해소해 보고자 한다.

로컬라이즈(지역화)와 관련해서 다국어 출력을 담당하는 모듈은, locale이다. 한글.po 파일을 입력하기 전에도 이 모듈을 꼭 활성화. 하지만 이 모듈이 느린 원인 중에 하나이다.

아래 locale.module의 약 180에서 200라인 사이에 있는, 다국어 번역출력 쿼리를 보라. 몰랐지만, 외국의 한 드루팔러가 속도 분석을 한 다음, inner join을 left join으로 바꾸어서 스피드 개선을 한 코드가 있었다.

기존 : 느린 쿼리

$result = db_query("SELECT s.lid, t.translation FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid WHERE s.source = '%s' AND t.locale = '%s'", $string, $locale);

 
이번에는 이를 개선해서 약 0.?초 정도를 절약할 수 있는 쿼리이다.

개선 : 보다 빠른 쿼리

$result = db_query("SELECT s.lid, t.translation FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid AND t.locale = '%s' WHERE s.source = '%s'", $locale,$string);

 
드루지기는 적용해 보고 (체감적으로) 빨라진 페이지를 느꼈다.

참고 : http://www.hiveminds.co.uk/node/3416

Your rating: None 평균 : 3.3 (3 votes)

댓글

어제 Drupal 6.0 rc3를

어제 Drupal 6.0 rc3를 설치해 보았는데, 인상깊은 개선이 많았습니다만 위 팁은 적용되지 않았던 것 같습니다.
하지만 일부 소식에 의하면 속도 향상이 5.x보다 많이 좋아졌다고 합니다. 저도 다소 빨라진 느낌을 받았습니다.

일부 드루팔러들은 벌써 7.x 이야기를 하고 있는데 대폭적인 속도 개선(최소한의 코드 개입 등)과 다양한 다국어 커스터마이징 능력을 준비하고 있다고 합니다.

여러 CMS들 중에서 로컬라이즈와 다국어 대응이 가장 잘 된 오픈소스는 역시 Drupal이라고 생각합니다.

음... 팔팔.오알지는

음... 팔팔.오알지는 2008년 2월 현재 아주 느리게 나타나는데요. 양해를 부탁드립니다. 가정용 홈서버에서 8개의 드루팔 사이트를 동시에 돌리고 있어서 그렇습니다.
나중에 사정이 더 좋아지면 호스팅을 받도록 하겠습니다.

드루팔에서 언어

드루팔에서 언어 변환 관련 모듈로 중요한 역할을 담당하는 Locale 모듈보다
속도가 빠르다고 주장하는 모듈이 있어 소개합니다. Locale 기능을 거의 대체하는 듯 합니다.

[ String Overrides 모듈 ] - http://drupal.org/project/stringoverrides

[ String Overrides 모듈의 기능 ]
* Easily replace anything that's passed through t()
* Less overhead than the Locale module (overrides are cached in the variables table, which is loaded on every page request already)
* Locale support, allowing you to override strings in any language (not compatible in the Drupal 5 branch)
* Ability to import/export *.po files, for easy migration from the Locale module
* Click on the "Add row" button to add extra text boxes