2009-06-23 3 views
2

나는 처음부터 사이트 CMS를 작성 했으므로 사이트가 서서히 트래픽을 받기 시작했다. (30-40k/day) 서버 부하가 예상보다 훨씬 높다. 8gb의 램이 장착 된 쿼드 코어 머신 상에서는 항상 6-9 번 정도 움직입니다. 필자는 400-500k/day 사이트에서 훌륭하게 수행 한 스크립트를 작성 했으므로 Im은 완전히 무능하다고 생각하고 싶지 않습니다.성능 측면에서 스크립트의 문제를 해결하는 좋은 방법은 무엇입니까 (php/mysql)?

쿼리를 결합하고 일부 mysql 호출을 완전히 제거하고 필요한 경우 PHP로 업데이트 된 정적 TXT 파일로 사이트의 일부 섹션을 대체하여 거의 모든 페이지에서 수행되는 쿼리 수를 거의 60 % 줄였습니다. 이러한 모든 변경 사항은 페이지 실행 시간에 영향을주었습니다 (색인로드는 이전과 같이 0.3 대신 0.3으로 증가했습니다).

IOwait는 거의 없으며 mysql DB는 30MB입니다. 이 사이트는 lighttpd, php 5.2.9, mysql 5.0.77을 실행합니다.

정확하게로드가 높아지고있는 원인의 맨 아래로 가려면 어떻게해야합니까? "top"은 항상 mysql을 알려주므로이 문제를 현지화하고 싶습니다. mysql은 항상 50-95 %의 CPU 사용량을 유지합니다.

답변

1

가장 좋은 방법은 응용 프로그램 코드를 프로파일하는 것입니다. 자원을 많이 소비하는 호출을 찾으십시오.

당신은 매우 느린 일부 SQL 쿼리를 가질 수 있지만 : 여기에 몇 가지 옵션 (처음 세 구글이 "PHP 프로파일 러"에 대한 조회수)입니다 드물게 실행되는 경우 성능 문제의 주요 원인이 아닐 수도 있습니다. 보다 빠른 SQL 쿼리가있을 수 있지만 성능에 미치는 순 영향이 커지기 위해 자주 실행됩니다. 응용 프로그램을 프로파일 링하면 응용 프로그램을 식별하는 데 도움이됩니다.

데이터베이스 사용과 관련하여 응용 프로그램 성능을 향상시키는 가장 보편적 인 조언은 변경 빈도가 낮은 데이터를 식별하여 신속하게 검색 할 수 있도록 캐시에 저장하는 것입니다. 응용 프로그램 사용 패턴에 매우 의존하기 때문에 가장 많은 이점을 얻을 수있는 데이터를 확인하는 것은 사용자의 몫입니다.

캐싱 기술에 관한 한 APCmemcached은 PHP에서 좋은 지원을받는 옵션입니다.

또한 응용 프로그램과 관련된 개선 사항을 확인하기 위해 신중하게 MySQL optimization chapter을 읽을 수 있습니다.

다른 좋은 자원은 MySQL Performance Blog이고 책은 "High Performance MySQL입니다."MySQL 기반 웹 사이트 운영에 진지한 사람이라면이 리소스를 자주 참조해야합니다.

+0

감사 빌, 나는 이러한 도구를 조사 할 것입니다. –

1

mytop을 (를) 시작하는 것이 좋습니다. 당신의 DB가하고 정확히 그것은 기본적으로 MySQL을위한 맨, 그리고으로 당신에게 창을 줄 것이다 :

http://jeremy.zawodny.com/mysql/mytop/

노아를

이 proding이 많이 걸릴 수 있도록 그것은 이유의 모든 숫자가 될 수
+0

같은 일을,.? –

0

. 좋은 첫 번째 단계는 느린 쿼리 로그를 켜고 직접 또는 parser으로 이동하는 것입니다. 자주 사용되는 느린 쿼리를 선택하여 최적화 할 수 있습니다 (인덱스되지 않은 항목에 충돌 한 쿼리).

3

EXPLAIN을 사용하면 쿼리 최적화/문제 해결에 도움이됩니다. 테이블 참조 방법 및 행 수를 보여줍니다. .. 인 읽기 그것은 매우 유용

을 또한 당신이 당신의 MySQL configuration에 수정을했다면, 당신은 그것을 다시 방문 할 수 있습니다 쇼 PROCESSLIST로

+0

+1을 사용하여 EXPLAIN을 제안합니다. –

관련 문제