Skip to content
SON BLOG
Go back

OpenSearch 벡터 인덱싱 성능 최적화 가이드

Edit page

벡터 기반 검색 시스템에서는 대량의 벡터 데이터를 빠르게 색인하는 것이 중요하다. OpenSearch는 이러한 작업의 성능을 향상시키기 위한 다양한 설정을 제공한다.

1. Refresh Interval 비활성화

# 비활성화
PUT /<index_name>/_settings
{
  "index": {
    "refresh_interval": "-1"
  }
}

# 색인 완료 후 복원
PUT /<index_name>/_settings
{
  "index": {
    "refresh_interval": "1s"
  }
}

2. Replica 수 0으로 설정

PUT /<index_name>/_settings
{
  "index": {
    "number_of_replicas": 0
  }
}

⚠️ 장애 시 데이터 손실 방지를 위해 외부 백업 권장

3. 색인 스레드 수 증가

설정값 예시

PUT /_cluster/settings
{
  "persistent": {
    "knn.algo_param.index_thread_qty": 4
  }
}

CPU 사용률을 모니터링하며 적절한 값으로 조정

4. (OpenSearch 3.0+) Derived Vector Source로 저장 공간 절약

5. (고급) 벡터 데이터 구조 지연 생성 전략

개요

단계별 구성

1. 색인 시 벡터 구조 생성 비활성화

PUT /test-index/
{
  "settings": {
    "index.knn.advanced.approximate_threshold": "-1"
  }
}

2. Bulk 색인 수행

POST _bulk
{ "index": { "_index": "test-index", "_id": "1" } }
{ "my_vector1": [1.5, 2.5], "price": 12.2 }
...

⚠️ 이 상태에서 검색하면 정확한 k-NN 방식으로 수행됨 (느림)

3. 벡터 구조 생성 활성화

PUT /test-index/_settings
{
  "index.knn.advanced.approximate_threshold": "0"
}

4. Force Merge 수행 (세그먼트 1개로 통합)

POST /test-index/_forcemerge?max_num_segments=1

이후 생성된 벡터 구조를 통해 빠른 근사 검색이 가능

정리: 성능 튜닝 체크리스트

항목설명
Refresh Interval 비활성화색인 중 작은 세그먼트 생성 방지
Replica 0 설정복제 인덱스 생성 오버헤드 제거
색인 스레드 수 조절병렬 인덱싱 최적화
Derived Source 사용저장 공간 절감
벡터 구조 지연 생성Bulk 인덱싱 속도 향상 + 효율적 검색 구성

Edit page
Share this post:

Previous Post
OpenSearch Radial Search — 유사도 임계값 기반 반경 벡터 검색
Next Post
OpenSearch Vector Search 가이드 — Raw Vector와 Neural 검색 비교