Elasticsearch 튜닝 기사 - 슬로우 쿼리 분석 노트

머리말

  • 복잡한 식의 사용은 또한 우리에게 위험을 가져올 수 있습니다, 잘못 사용하면 동안 elasticsearch는, 우리의 사용하기에 매우 유연한 검색 기준을 제공하기 때문에 쿼리 성능에 많은 영향을 미치는 요인이 주요 기록 노트 가능한 원인 및 최적화 방향에 슬로우 쿼리.
  • 본원에서 논의 된 바와 같이 7.0 버전 말이지.

느린 쿼리의 현상

추적 시간 제한
  • 가장 직관적 인 현상은 서비스 질의 응답 시간 제한을 제공하는 것입니다.
많은 수의 연결은 거부

파일

  • 우리는 가끔 쓰기 쿼리가 자주,지도를 통해 모든 파티 여러 인덱스에 일치 할 수있는 쿼리에 와일드 카드 *를 사용하기 때문에 인덱스 조각화 너무 많이 아래, 더 클러스터의 코어 수보다. 그것은 검색 작업 대기열 스레드 풀에서 발생합니다, 검색을 선도 부인했다.
설문 조사 지연

호스트 CPU 활공
  • 또 다른 일반적인 이유는 해당 디스크 I입니다 / O는 검색 라인 또는 완전히 CPU 포화 경우의 결과로, 느립니다.
  • 파일 시스템 캐시에 추가하여, Elasticsearch은 검색 속도를 개선하기 위해 쿼리 캐시 및 요청 캐싱을 사용합니다. 이러한 캐시의 모든 사용 가능한 다른 복사본 사이에 검색 할 때마다 특정 구성 요소가 동일한 시트에 라우팅 요청이 아닌 교류에 대한 검색 요청을 최적화 할 수 있습니다. 이 요청은 캐시, 쿼리 캐시 노드와 파일 시스템 캐시를보다 효율적으로 사용하는 것입니다. 메모리 사용량이 75 %, 그리고 좋은 작업 모니터링 호스트 노드가 똑같이 중요 할 때 에스 FullGC 디폴트가 발생합니다.

파일

파일

최적화

쿼리 시간 동적으로 계산 된 인덱스에 따르면,

  • elasticsearch 지원 동시에 질의 여러 인덱스는 쿼리 효율을 향상 와일드 카드 질의의 사용을 피하기 위해, 우리는 목표 인덱스 모두를 열거 계산할 수 있으며, 데이터는 일반적으로 시간 서브 인덱스 에스, 우리는에 따른 기간의 선단부를 통과 할 수있다 타겟 인덱스를 계산한다.
조각의 수를 제어
  • 상기 메모리 단편의 수는 소정의 관계를 갖는다.
  • 이상적으로 조각의 수는 노드의 수에 의존한다. 번호는 1.5 ~ 3 배의 노드의 수입니다.
  • 각 노드에 저장되고, 힙 메모리에 비례 할 수있는 단편의 수. 공식 권장 : 20을 초과하지 않는 1GB의 RAM은 슬라이스 구성은 최고입니다.
주 /에서 깊이 문의 페이징 문제를 가지고

  • 데이터 페이지 (10)의 경우 예를 들어, 당신은 지금 실제로, 2000 년 이전에 각 파편에 저장된 데이터는 모두 코디네이터 노드에서 찾을 수, 쿼리 페이지 200합니다.
    다섯 개 조각이있는 경우, 10,000 데이터, 이들 만 데이터 병합 프로세스의 일부 노드 다음 코디네이터가 다음 페이지 (200)에서 최종 데이터 (10)에 도착. 그것은 데이터 쿼리 많이 필요, 당신은 스크롤 스크롤 API 쿼리를 사용할 수 있습니다.
색인의 구성 인덱스 템플릿
  • 기본 슬라이스의 낮은 버전의 에스는 5 일 높은 버전에서 변경, 우리는 동적으로 인덱스 양 지수에 따라 조각의 수를 조정할 필요가있다, 그것은 기본 일치 규칙을 설정하는 것이 좋습니다, 우선 순위가 높은 일부 : (PS 높은 하위 템플릿을 다룰 것입니다 순서) 과도한 단편화 문의 스캔, 클러스터 자원의 합리적인 사용을 방지 할 수 있습니다.

파일

너무 많은 데이터 포인트 배럴을 피

욕조 집계 요청 부서의 큰 숫자를 들어, 모든 데이터 조각은 타임 슬라이싱, 검색 효율성과 피할 메모리 OOM을 개선하기 위해 많은 요청으로, 수 있어야합니다.

독립 코디 노드
  • 클러스터 조정 노드는 독립적 인 전용 데이터 요청 (node.master = 거짓 node.data = 거짓)을 가지고 있고, 제공되는 그들에게 충분한 메모리를 제공해야합니다. 데이터 노드와 코디네이터 노드를 분리함으로써, 노드가 클러스터 전체의 결과를 피할 기다려요 사용할 수 없거나 느린 응답 시간.
라우팅 데이터 라우팅

새로 고침 간격을 증가시킬 적절한
  • ES는 당신이 할 수있는, index.refresh_ 간격은 약간의 지연이있을 때까지 인덱스 문서를 검색 할 수있는 문서에서, 기본값은 1 초에 적절한 상승이 값 수단 것을 준 실시간 검색 프레임 워크입니다 (세그먼트 작은 검색 부이다) 과도 세그먼트를 생성하는 것을 피하기.
구성 슬로우 쿼리 로그
  • 에 Elasticsearch에 slowlogs을 가능하게하여 실행 속도가 느린 쿼리를 확인합니다. 구체적 slowlogs 슬라이스 레벨만을 노드에 대한 데이터. 그들은 데이터를 저장하지 않기 때문에 조정 / 클라이언트 노드는 느린 로그 분석 기능이 없습니다. 이를 통해, 우리는 최적화 대책을 수립하도록, 쿼리 시간이 많이 소요되는 로그를 볼 수 있습니다.
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms

index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug: 500ms
index.search.slowlog.threshold.fetch.trace: 200ms

index.search.slowlog.level: info复制代码
퓨즈 정책 구성
  • es7.0 버전은 회로 차단기의 범위를 제공 한 후 조작을 방지 OutOfMemoryError가 발생. 많은 메모리를 사용할 수있는 방법을 각 회로 차단기는 제한이 지정되어 있습니다. 또한, 상위 차단기가 모든 회로 차단기에 사용할 수있는 메모리의 양을 지정하기 위해 사용된다.

indices.breaker.request.limit : 요청 제한 중단은 JVM 힙 60 % 기본.

indices.breaker.total.limit : 시작 프로그램 인터럽트 아버지 전반적인 제한, indices.breaker.total.use 경우 실제 메모리가 70 % 거짓의 기본 JVM 힙입니다. indices.breaker.total.use하면 실제 메모리 사실, 기본 JVM 힙 95 %.

network.breaker.inflight requests.limit 지정된 한계 값은 현재 메모리 요청 노드 들어오는 HTTP 등을 사용하는 메모리를 초과 할 수 없습니다. 메인 메모리는 요청 내용의 길이를 제한하는 것입니다. 기본값은 100 %입니다.

script.max 편집물 평점 : 허용 된 시간 간격 내에서 실행 동시 동적 시나리오의 수를 제한한다. 기본값은 75 / 5m, 매 5 또는 75 분입니다.

대중 번호에 오신 것을 환영합니다 [남자]는 교환 노트 발전을 개발의 꿈

추천

출처juejin.im/post/5e1539586fb9a047ea74776c