저는 하루에 약 70,000번의 방문이 발생하고 약 45개 이상의 서로 다른 테이블을 사용하는 많은 쿼리를 사용하는 사이트에서 작업하고 있습니다 UNION's
. 이러한 테이블은 일반적으로 각 테이블의 약 15,000개 행에서 약 500,000개 행에 이릅니다.
우리는 가능한 한 최선을 다해 최적화했지만 query cache
테이블 중 하나가 변경되고 캐시의 데이터를 제거해야 할 때마다 서버가 잠기기 시작하고 mysql이 tmp dir
가득 차고 서버 로드가 하늘 높이 올라가고 다음을 수행해야 합니다. 문제를 해결하려면 다음 단계를 따르세요.
- mysql 중지(로드가 정상으로 진행됨)
- 데이터베이스 테이블을 복구하다
- mysql에서 캐시 지우기
- Memcache 플러시
- 데이터베이스 테이블을 다시 복구
- MySQL을 다시 시작
복제가 아마도 가장 좋은 아이디어일 수도 있지만 가장 비용이 많이 들 수도 있다는 것을 알고 있습니다. 그래서 Sphinx
다음을 활용하는지 궁금합니다.http://sphinxsearch.com/도움이 많이 되겠죠?
이전에 다른 사이트에서 이 기능을 사용하여 INNODB 테이블에 대한 전체 텍스트 검색을 수행할 수 있었기 때문에 작동 방식에 대해 약간은 알고 있었지만 이와 같은 작업을 어떻게 처리할지 잘 모르겠습니다.
자체 캐싱 방법을 활용합니까? 이것으로 변경하고 싶지 않지만 여전히 Sphinx에서 동일한 문제가 발생합니다.
편집하다:EXPLAIN
아래는 (첫 번째 줄이 누락되어 스크린샷 프로그램에 문제가 있음) 의 스크린샷입니다.
업데이트:현재 사이트 방문자 수는 하루 30/k에 불과합니다.
답변1
데이터베이스 문제를 파악하고 해결해야 합니다. 하루 70,000번의 방문은 그다지 많지 않으며 MySQL은 그 정도의 작업을 처리할 수 있습니다. MySQL MyISAM 및 InnoDB 버퍼 사용량을 분석하고 조정하려면 유사한 도구를 다운로드하여 사용해야 합니다 mysqlreport
(아직 MyISAM을 사용하고 있다면 InnoDB로 전환하는 것이 좋습니다). 다음 단계는 MySQL에서 느린 쿼리 로깅을 활성화하고 pt-query-digest
도구와 EXPLAIN
MySQL 명령을 사용하여 매일 느린 쿼리 로그를 분석하는 것입니다. 아마도 데이터베이스에 적절한 인덱스가 부족할 것입니다.