Search Latency를 줄이기 위한 Opensearch 설정 방법

所要時間3分
コンテンツレベル: 中級
0

해당 기사에서는 Search Latency가 발생할 수 있는 다양한 원인에 대해서 설명하며 리소스에 특별히 문제가 없는 경우에 Opensearch의 설정을 바꾸어서 검색 성능을 최적화 할수있는 방법에 대해 안내합니다.

Search Latency 가 증가 할 수 있는 원인

Amazon Cloudwatch Metric의 SearchLatency 지표를 통하여 현재 Opensearch 클러스터에서 발생하는 Search 지연 시간을 확인할 수 있습니다.

[+] 인스턴스 지표 - SearchLatency

https://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/managedomains-cloudwatchmetrics.html#managedomains-cloudwatchmetrics-instance-metrics

검색 요청의 경우 OpenSearch Service는 왕복 시간을 다음과 같이 계산합니다.

왕복 = 쿼리가 쿼리 단계에서 소비한 시간 + 가져오기 단계에서 보낸 시간 + 대기열에서 보낸 시간 + 네트워크 대기 시간

Amazon CloudWatch의 SearchLatency 지표는 쿼리가 쿼리 단계에서 소비한 시간을 알려 줍니다.

Search Latency가 증가 할수있는 이유로는 아래와 같은 이유로 인해 증가 할 수 있습니다. [1]

  • 클러스터에 프로비저닝된 리소스가 충분하지 않은 경우
  • CloudWatch의 검색 거부 (ThreadpoolSearchRejected)
  • 오래 실행되는 쿼리가 존재 하는 경우
  • HTTP 504 게이트웨이 시간 초과 오류 발생하는 경우
  • 빈번한 또는 오래 실행되는 가비지 수집 활동으로 검색 성능 문제
  • 지나치게 많은 샤드수가 있는 경우

해결 방법

Search Latency 이슈를 해결하기 위해서는 먼저 리소스 사용률(CPUUtilization, JVMMemory)을 검토하여 리소스 부족 여부를 확인합니다. 이후 Slow Log를 분석하여 특정 샤드에서 오래 실행되는 쿼리와 그 실행 시간을 식별합니다. 또한 현재 OpenSearch 클러스터가 샤드 수 및 크기를 적절하게 유지하고 있는지 확인해야 합니다. 일반적으로 검색 워크로드의 경우 각 샤드가 10 ~ 30GB, 로그 워크로드의 경우 30 ~ 50GB 가 되도록 샤드 수를 설정하는 것을 권장하며, 5GB 이하의 데이터라면 단일 샤드를 사용해야 합니다. 이러한 점검 후에도 문제가 지속된다면 샤드 재분배 또는 클러스터 확장을 고려하여 샤드 수와 크기를 조정하거나 노드를 추가함으로써 Search Latency 이슈를 해결 하는데 도움을 줄 수 있습니다. [2]

위의 일반적인 리소스 및 설정 확인에도 불구하고 Search Latency 가 발생하는 경우, Opensearch의 refresh_interval 설정을 변경하여 Search Latency를 해결 하는데 도움을 줄 수 있습니다.

refresh_interval 설정은 최근 인덱스 변경 사항을 검색에 반영하기 위해 refresh 작업을 수행하는 빈도를 결정합니다. [3]

해당 설정을 1초(1s)로 설정하면 최신 데이터를 거의 실시간으로 검색할 수 있으며 Search Latency를 줄일 수 있습니다.

따라서 아래와 같이 인덱스의 refresh_interval을 1s로 설정하여 Search Latency를 줄일 수 있습니다.

PUT /my_index/_settings
{
  "index" : {
    "refresh_interval" : "1s"
  }
}

하지만 refresh_interval 을 1로 설정하는 경우, refresh 작업 빈도의 증가로 인해 인덱싱 성능이 약간 저하될 수 있는점 참고하시길 바랍니다.

참고 자료

[1] Amazon OpenSearch Service 클러스터에서 검색 대기 시간 갑자기 늘어났는데, 이 문제를 해결하려면 어떻게 해야 하나요?

https://repost.aws/ko/knowledge-center/opensearch-latency-spikes

[2] Amazon OpenSearch Service의 운영 모범 사례 - 샤드 및 데이터 노드 수 결정

https://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/bp.html#bp-shard-count

[3] Index modules - index.refresh_interval

https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html

profile pictureAWS
サポートエンジニア
公開済み 3ヶ月前858ビュー