Sphinx는 과도한 MySQL 읽기로 인해 서버가 정체되는 문제를 해결하는 좋은 솔루션일까요?

Sphinx는 과도한 MySQL 읽기로 인해 서버가 정체되는 문제를 해결하는 좋은 솔루션일까요?

저는 하루에 약 70,000번의 방문이 발생하고 약 45개 이상의 서로 다른 테이블을 사용하는 많은 쿼리를 사용하는 사이트에서 작업하고 있습니다 UNION's. 이러한 테이블은 일반적으로 각 테이블의 약 15,000개 행에서 약 500,000개 행에 이릅니다.

우리는 가능한 한 최선을 다해 최적화했지만 query cache테이블 중 하나가 변경되고 캐시의 데이터를 제거해야 할 때마다 서버가 잠기기 시작하고 mysql이 tmp dir가득 차고 서버 로드가 하늘 높이 올라가고 다음을 수행해야 합니다. 문제를 해결하려면 다음 단계를 따르세요.

  1. mysql 중지(로드가 정상으로 진행됨)
  2. 데이터베이스 테이블을 복구하다
  3. mysql에서 캐시 지우기
  4. Memcache 플러시
  5. 데이터베이스 테이블을 다시 복구
  6. MySQL을 다시 시작

복제가 아마도 가장 좋은 아이디어일 수도 있지만 가장 비용이 많이 들 수도 있다는 것을 알고 있습니다. 그래서 Sphinx다음을 활용하는지 궁금합니다.http://sphinxsearch.com/도움이 많이 되겠죠?

이전에 다른 사이트에서 이 기능을 사용하여 INNODB 테이블에 대한 전체 텍스트 검색을 수행할 수 있었기 때문에 작동 방식에 대해 약간은 알고 있었지만 이와 같은 작업을 어떻게 처리할지 잘 모르겠습니다.

자체 캐싱 방법을 활용합니까? 이것으로 변경하고 싶지 않지만 여전히 Sphinx에서 동일한 문제가 발생합니다.

편집하다:EXPLAIN아래는 (첫 번째 줄이 누락되어 스크린샷 프로그램에 문제가 있음) 의 스크린샷입니다.

업데이트:현재 사이트 방문자 수는 하루 30/k에 불과합니다.

여기에 이미지 설명을 입력하세요

답변1

데이터베이스 문제를 파악하고 해결해야 합니다. 하루 70,000번의 방문은 그다지 많지 않으며 MySQL은 그 정도의 작업을 처리할 수 있습니다. MySQL MyISAM 및 InnoDB 버퍼 사용량을 분석하고 조정하려면 유사한 도구를 다운로드하여 사용해야 합니다 mysqlreport(아직 MyISAM을 사용하고 있다면 InnoDB로 전환하는 것이 좋습니다). 다음 단계는 MySQL에서 느린 쿼리 로깅을 활성화하고 pt-query-digest도구와 EXPLAINMySQL 명령을 사용하여 매일 느린 쿼리 로그를 분석하는 것입니다. 아마도 데이터베이스에 적절한 인덱스가 부족할 것입니다.

관련 정보