벡터 인덱싱 성능 최적화 가이드
벡터 기반 검색 시스템에서는 대량의 벡터 데이터를 빠르게 색인하는 것이 중요하다. OpenSearch는 이러한 작업의 성능을 향상시키기 위한 다양한 설정을 제공한다.
1. Refresh Interval 비활성화¶
-
기본값:
1초마다인덱스가 자동으로 refresh -
대량 색인 시, 여러 개의 작은 세그먼트가 생성되어 오버헤드 증가
-
색인 중에는 refresh를 비활성화하고 완료 후 재활성화 권장
# 비활성화
PUT /<index_name>/_settings
{
"index": {
"refresh_interval": "-1"
}
}
# 색인 완료 후 복원
PUT /<index_name>/_settings
{
"index": {
"refresh_interval": "1s"
}
}
2. Replica 수 0으로 설정¶
-
색인 중에는 Replica를 0으로 설정해 불필요한 복제 인덱스 생성 방지
-
색인 완료 후 Replicas를 다시 설정하면 인덱스가 복제될 때 벡터 인덱스도 함께 복사
⚠️ 장애 시 데이터 손실 방지를 위해 외부 백업 권장
3. 색인 스레드 수 증가¶
index_thread_qty를 통해 병렬 색인 작업 수행 가능
설정값 예시
CPU 사용률을 모니터링하며 적절한 값으로 조정
4. (OpenSearch 3.0+) Derived Vector Source로 저장 공간 절약¶
-
벡터 필드를
_source에 저장하지 않고도 검색 기능 유지 -
기본값: 활성화됨
-
장점
-
저장 용량 절약
-
update,update_by_query,reindex모두 가능
-
5. (고급) 벡터 데이터 구조 지연 생성 전략¶
개요¶
-
벡터 검색용 데이터 구조(HNSW 등)는 색인 시 자동 생성됨
-
대량 초기 업로드 이후 검색만 수행하는 경우, 이 구조 생성을 나중에 수행하면 속도 개선 가능
단계별 구성¶
1. 색인 시 벡터 구조 생성 비활성화¶
2. Bulk 색인 수행¶
POST _bulk
{ "index": { "_index": "test-index", "_id": "1" } }
{ "my_vector1": [1.5, 2.5], "price": 12.2 }
...
⚠️ 이 상태에서 검색하면 정확한 k-NN 방식으로 수행됨 (느림)
3. 벡터 구조 생성 활성화¶
4. Force Merge 수행 (세그먼트 1개로 통합)¶
이후 생성된 벡터 구조를 통해 빠른 근사 검색이 가능
정리: 성능 튜닝 체크리스트¶
| 항목 | 설명 |
|---|---|
| Refresh Interval 비활성화 | 색인 중 작은 세그먼트 생성 방지 |
| Replica 0 설정 | 복제 인덱스 생성 오버헤드 제거 |
| 색인 스레드 수 조절 | 병렬 인덱싱 최적화 |
| Derived Source 사용 | 저장 공간 절감 |
| 벡터 구조 지연 생성 | Bulk 인덱싱 속도 향상 + 효율적 검색 구성 |
관련 글
- vector indexing
OpenSearch검색엔진벡터 검색 - Nested Field로 다중 벡터 다루기
OpenSearch검색엔진벡터 검색 - GPU 기반 원격 벡터 인덱스 구축 가이드
GPUOpenSearch검색엔진 - Vector Sech 가이드
OpenSearch검색엔진벡터 검색 - 벡터 유사도 계산을 스크립트로(Painless Scripting Extension)
OpenSearch검색엔진벡터 검색