Couchbase 6.5 릴리즈에는 고객이 기존 데이터베이스 애플리케이션에 NoSQL 데이터베이스 도입을 확장할 수 있는 광범위한 엔터프라이즈급 데이터베이스 쿼리 기능이 포함되어 있습니다. 이번 릴리스에는 트랜잭션 기능, 분석 창 기능, 사용자 정의 JS 기능, 쿼리 성능 향상을 위한 Index Advisor가 추가되었습니다. 성능은 Couchbase 플랫폼의 가장 중요한 측면 중 하나이므로, 새 릴리스에는 Couchbase Index Service를 더욱 강화하고 운영 효율성을 개선하기 위한 일련의 새로운 개선 사항도 포함되어 있습니다. 이러한 기능은 안정성, 관리 용이성 및 서비스 가능성 - 인덱스 서비스 RMS라는 일반적인 제목 아래 함께 그룹화되어 있습니다.
1. 인덱스 복제본 수를 변경하려면 인덱스 변경하기
6.5.0에서는 많은 요청이 있었던 ALTER INDEX 명령을 사용하여 인덱스의 복제본 수를 변경할 수 있는 기능을 추가했습니다. 아래 예제와 같이 ALTER 명령을 사용하여 복제본 수를 변경할 수 있습니다.
|
1 |
ALTER INDEX `여행-샘플`.airlines_idx WITH {"action":"replica_count","num_replica": 3}' |
액션 에 대한 인덱스 변경은 replica_count 와 매개변수 num_replica 는 인덱스의 새 복제본 수를 지정합니다. ALTER 문의 num_replica 값이 현재 복제본 수보다 크면 복제본이 추가로 생성되고, 현재 복제본 수보다 작으면 복제본이 제거됩니다.
2. 인덱스 복제본을 삭제하려면 인덱스 변경을 클릭합니다.
ALTER INDEX 명령은 아래와 같은 구문을 사용하여 개별 인덱스 복제본을 삭제할 수 있도록 더욱 개선되었습니다:
|
1 |
ALTER INDEX `여행-샘플`.airlines_idx WITH {"action":"drop_replica","replicaId": 2}' |
액션 는 drop_index 그리고 replicaId 는 레플리카를 식별하는 번호인 레플리카의 ID입니다. 레플리카 및 레플리카가 상주하는 호스트의 replicaId는 REST API getIndexStatus에서 얻을 수 있습니다.
어떤 이점이 있나요? 인덱스 복제본의 관리 효율성 향상 - 복제본 수를 늘리거나 줄이거나 특정 인덱스 복제본을 삭제하는 것이 더 쉬워집니다. 자세한 내용은 여기에서 확인하세요:
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/alterindex.html
3. DCP 롤백 처리 개선
데이터 노드 중 하나가 페일오버되고 데이터 복제본이 활성으로 승격되면 인덱스 서비스에서 DCP 롤백이 발생합니다. 모든 장애 조치가 롤백으로 이어지는 것은 아닙니다. 이 상황은 인덱스 서비스에 장애 조치 전 데이터 복제본보다 더 많은 데이터/최근 vbuuid가 있는 경우에만 발생합니다. 장애 조치 후 데이터 복제본이 활성 상태가 되면 인덱스 서비스는 롤백을 받게 됩니다. 인덱스 서비스의 DCP 문서 를 참조하세요. 최악의 경우 DCP는 인덱스 서비스를 0으로 롤백하도록 요청할 수 있습니다.
이번 개선으로 인덱스 서비스에 대한 DCP 롤백 처리가 더욱 강력해졌습니다.
인덱스 서비스가 0으로 DCP 롤백을 받으면 전체 인덱스를 재구축하는 대신 가장 최신 인덱스 스냅샷으로 되돌리려고 시도합니다.
어떤 혜택이 있나요?
- 인덱스 서비스는 데이터 노드가 자동 장애 조치될 때 더 이상 인덱스를 처음부터 다시 빌드할 필요가 없습니다.
- 인덱스 서비스는 최신 스냅샷을 사용하여 중단 없이 쿼리 클라이언트를 계속 서비스합니다.
- 인덱스 디스크 스냅샷은 10분에 한 번씩 생성되므로 인덱스가 데이터 서비스를 따라잡는 기간 동안 오래된 데이터가 제공될 수 있습니다. 스캔 일관성을 요청_플러스로 설정하면 일관된 스냅샷이 생성될 때까지 스캔이 대기하며 오래된 결과는 반환되지 않습니다.
4. 인메모리 스냅샷 최적화하기
카우치베이스 서버는 궁극적으로 일관성을 유지하도록 설계되었습니다. 그러나 애플리케이션은 요청_plus 쿼리 일관성 설정을 통해 쿼리를 처리하기 전에 인덱스 서비스에 업데이트된 모든 문서를 인덱스에 포함하도록 요청하여 이 동작을 변경할 수 있습니다. 쿼리를 처리하기 전에 인덱스가 업데이트되었는지 서비스가 확인해야 하므로 쿼리에 대한 응답 시간이 다소 지연될 수 있습니다. 요청_플러스 쿼리 속도를 높이기 위해 인덱스에 대한 인메모리 스냅샷 생성 빈도가 10ms마다로 증가했습니다.
어떤 혜택이 있나요?
- Couchbase 6.5에서는 인덱스 인메모리 스냅샷의 속도를 높여 이 프로세스를 최적화했습니다. 이 설정(request_plus)을 사용하는 애플리케이션 쿼리는 이제 응답 시간이 45% 이상 단축되는 것을 확인할 수 있습니다.
5. 프로젝터 메모리 사용량 개선
프로젝터는 인덱스 서비스를 대신하여 들어오는 변형을 처리하는 데이터 노드에 상주하는 프로세스입니다. 프로젝터는 인덱스의 일부인 문서 필드와 관련된 돌연변이만 인덱스 서비스로 전송되도록 합니다. 프로젝터 메모리 사용량은 높은 변이율, 큰 문서 크기, 느린 다운스트림으로 인해 부정적인 영향을 받을 수 있습니다. 이 개선 사항에는 프로세스 메모리 사용량이 최적의 수준으로 유지되도록 프로젝터 내부의 다양한 설정을 재구성하는 작업이 포함됩니다.
어떤 혜택이 있나요?
- 성능 테스트 사례에 따르면 인덱스 빌드 시간에 영향을 미치지 않고 최대 프로젝터 RSS(메모리 사용량)가 1.5GB에서 176MB(특정 워크로드의 경우)로 감소했습니다.
6. 인덱서에 대한 프로젝터 응답 시간 개선
부하가 많으면 프로젝터 채널의 통신 제어 메시지가 느려져 프로젝터 프로세스가 인덱싱 서비스에 응답하는 속도가 느려질 수 있습니다. 프로젝터에서 제어 채널과 데이터 채널을 분리하고 데이터보다 제어 메시지의 우선순위를 지정하는 최적화가 도입되었습니다.
어떤 혜택이 있나요?
- 메모리 압박을 받으면 프로젝터가 인덱서의 제어 메시지에 계속 응답하고 리밸런싱 실패가 줄어드는 것을 볼 수 있습니다.
7. 빌드되지 않은 모든 인덱스를 한 번에 빌드
인덱스를 빌드하는 N1QL 명령은 현재 단일 또는 인덱스 이름 목록을 받습니다. 이 명령은 쿼리 결과를 받도록 개선되어 관리자가 한 번의 명령으로 빌드되지 않은 모든 인덱스를 빌드할 수 있습니다. 이 기능은 데이터베이스 복원 후 관리자가 지연된 상태의 모든 인덱스를 다시 빌드해야 하는 경우에 특히 유용합니다.
|
1 2 3 4 5 6 |
빌드 INDEX 켜기 `여행-샘플` ((선택 RAW 이름 FROM 시스템:인덱스 어디 키스페이스_ID = 'travel-sample' AND 상태 = 'deferred' )); |
어떤 혜택이 있나요?
- 데이터베이스 관리자는 빌드 명령을 한 번만 실행하여 빌드되지 않은(지연된) 인덱스를 모두 다시 빌드할 수 있습니다.
8. 인덱서 워밍업 중 스캔 허용
인덱서가 다시 시작되면 다음에서 인덱스가 복구됩니다. 지속됨 스토리지에 저장합니다. 노드당 인덱스 수가 많으면 시간이 오래 걸릴 수 있습니다(최대 몇 분). 이 개선 전에는 인덱서 워밍업 중에 스캔이 비활성화되었습니다. 이 동작을 개선하여 워밍업이 완료되고 일관된 스냅샷을 사용할 수 있는 인덱스에 대해 스캔을 허용했습니다. 워밍업 중에 일관된 스냅샷을 사용할 수 없는 경우(데이터 서비스가 앞서 이동한 경우), 오류가 반환되어 다른 인덱서 노드에서 복제 인덱스를 다시 시도할 수 있습니다.
어떤 혜택이 있나요?
- 이 개선으로 인덱서 프로세스가 재시작되는 경우 애플리케이션 연속성과 서비스 가용성이 향상됩니다.
9. 인덱서 재시작 없이 동적으로 설정 변경 사항 적용
이 개선 전에는 큰 키를 허용/불허하는 설정을 변경하고, 인덱스 키를 처리하는 데 필요한 인덱스 키의 크기와 해당 런타임 버퍼를 제어하려면 인덱서 프로세스를 다시 시작해야 했고, 클러스터 전체 인덱서가 다시 시작되어 서비스를 사용할 수 없게 되었습니다. 이러한 크기가 동적으로 적용되고 모든 버퍼가 변이 처리에 영향을 주지 않고 동적으로 크기가 조정되도록 동작을 개선했습니다.
어떤 이점이 있나요? 이제 인덱서 프로세스를 다시 시작하지 않고도 다음과 같은 설정을 동적으로 변경할 수 있습니다: max_seckey_size, max_array_seckey_size 및 allow_large_keys.
이 개선 사항을 활성화하기 위해 구성을 변경할 필요는 없습니다. 따라서 위의 설정을 수정해도 애플리케이션 연속성 및 서비스 가용성을 유지할 수 있습니다.
10. 사용하지 않는 인덱스 찾기
데이터베이스를 사용하는 대규모 애플리케이션에서는 많은 인덱스가 생성될 수 있지만, 최근에 사용되지 않거나 전혀 사용되지 않는 인덱스가 있을 수 있습니다. 사용하지 않는 인덱스를 쉽게 식별하여 삭제할 수 있도록, 이제 각 인덱스에 대해 해당 인덱스의 마지막으로 알려진 쿼리 시간을 나노초 단위의 유닉스 타임스탬프로 표시하는 통계가 제공됩니다. 이 통계는 인덱서 노드에 로컬로 유지되므로 인덱서를 다시 시작해도 재설정되지 않습니다. 이 통계는 예상 마지막 쿼리 시간을 얻기 위한 휴리스틱이며, 통계의 지속 간격이 15분이므로 정확할 수 없습니다. 이 통계는 인덱서의 통계 REST API를 사용하여 가져올 수 있으며, 인덱스 정의 UI에서도 사용할 수 있습니다.
|
1 |
curl -u <사용자 이름>:<비밀번호> <호스트 이름>:9102/api/v1/통계 | json_pp | grep 마지막_알려진_스캔_시간 "travel-sample:airlines_idx:last_known_scan_time" : 1579179249769780000, |
N1QL을 사용하여 사용하지 않는 인덱스를 쿼리할 수도 있습니다.
|
1 2 3 4 5 |
선택 배열 { "index_name":a.이름, "last_scan_time":millis_to_str(a.val.마지막_알려진_스캔_시간/1000000) } FOR a IN 객체_쌍(결과) END FROM curl("http://:9102/api/v1/stats", {"user":":"}) 결과 |
11. 통계 개선 사항
인덱서 및 프로젝터에서 로깅하는 주기적 통계에 새로운 통계가 추가되었습니다. 이 통계는 다음과 같습니다:
| 통계 | 설명 | 지원되는 REST 엔드포인트에서 사용 가능 |
| num_scan_timeouts | 스냅샷 대기 중이거나 스캔 진행 중 시간 초과된 스캔 요청의 수입니다. | 예 |
| num_scan_error | 시간 초과 이외의 오류로 인해 실패한 스캔 요청의 수입니다. | 예 |
| 평균 스캔 지연 시간 | 주어진 인덱스에 대해 관찰된 스캔 대기 시간의 실행 평균 | 아니요 |
| 마지막_알려진_스캔_시간 | 인덱스의 마지막으로 알려진 시간을 나타내는 int64 유닉스 타임스탬프입니다. | 예 |
| 키_크기_분포 | 다양한 크기의 버킷에 키 크기 분포 | 아니요 |
| 배열 키 크기_분포 | 키 크기 분포 - 다양한 크기의 버킷에 대한 키 크기 분포 | 아니요 |
| NUM_ITEMS_FLUSH | 인덱스 스토리지에 기록된 인덱스 키의 수입니다. | 예 |
| initial_build_progress | 인덱스의 초기 빌드 진행률(백분율) | 예 |
| 평균_배수율 | 인덱스 스토리지로 플러시된 항목 수의 평균입니다. | 예 |
| NUM_PENDING_REQUESTS | 현재 미결 상태이거나 진행 중인 스캔 요청의 수입니다. | 예 |
| 메모리_총_저장 | 메모리_총_저장 - 인덱스 스토리지의 총 jemalloc 사용량 크기입니다. | 예 |
| 프로젝터 지연 시간 | 이 통계는 프로젝터에서 돌연변이 처리의 실행 평균 지연 시간, 즉 돌연변이가 데이터 노드에서 프로젝터에 의해 인덱서 노드로 푸시되는 시간까지 걸리는 시간을 측정합니다. 이는 인덱서에서 데이터 노드별로 유지됩니다. 이는 데이터 노드에서 어떤 프로젝터가 돌연변이를 처리하는 데 더 많은 시간이 걸리는지 식별하는 데 도움이 됩니다. | 아니요 |
12. 색인 UI 개선
v6.5의 인덱스 UI는 요청/초, 상주 비율, 항목, 데이터 크기, 상태와 같은 인덱스에 대한 중요한 요약 정보를 포함하도록 개선되었습니다. 개별 인덱스를 확장하면 인덱스 정의와 분할된 인덱스의 경우 해당 노드 및 분할 정보가 표시됩니다.
색인 요약

색인 통계
인덱스 UI에 새로 추가된 중요한 기능은 각 인덱스에 대한 인덱스 통계로, 상주 비율, 데이터 크기, 디스크 크기, 인덱스 조각화, 드래인 비율 등과 같은 주요 통계의 그래픽 보기를 표시합니다. 전체 인덱스 서비스(모든 인덱스에 걸쳐)에 대한 전체 요약 통계가 페이지 하단에 표시되며, 여기에는 인덱스 서비스 RAM 할당량, 사용/잔여 RAM, 인덱스 서비스 RAM 퍼센트, 총 스캔 속도 및 인덱스 조각화와 같은 정보가 캡처되어 있습니다. 이러한 인덱스 UI 개선으로 가장 중요한 통계를 쉽게 확인할 수 있어 인덱스를 더 쉽게 모니터링할 수 있습니다.

페이지 하단의 색인 서비스 요약

요약
고객이 요청해 온 많은 요청을 해결할 수 있는 새로운 인덱스 서비스(GSI) RMS 개선 사항을 Couchbase v6.5에 적용하게 되어 매우 기쁘게 생각합니다. 언제나 그렇듯이 이러한 개선 사항에 대한 피드백을 기다리고 있습니다,
리소스
6.5의 기능이 마음에 드셨는지, 앞으로 비즈니스에 어떤 도움이 될지 여러분의 의견을 듣고 싶습니다. 댓글을 통해 의견을 공유해 주시거나 포럼.
공동 저자: 프라티바 비사라할리 | 수석 소프트웨어 엔지니어