개요
카우치베이스 서버 6.5(개발자 프리뷰)에서 출시된 인덱스 어드바이저의 두 번째 기능인 어드바이저 기능은 단일 쿼리에 대한 조언에서 쿼리 워크로드에 대한 인덱스 추천 및 세션 처리 지원으로 범위를 확장합니다. 이 문서에서는 이 두 가지 다른 방식으로 어떻게 작동하는지에 대해 간략하게 살펴보겠습니다.
워크로드에 대한 어드바이저 기능
어드바이저 기능은 다음 단계로 작동합니다:
-
- 하나의 단일 쿼리 또는 여러 쿼리로 구성된 쿼리 워크로드를 입력으로 받습니다.
- 인덱스 추천으로 각각의 고유 쿼리를 처리하세요.
- 전체 워크로드에 대한 현재/권장 인덱스를 병합하여 출력합니다.
구문:
SELECT ADVISOR("query")
SELECT ADVISOR(["query1", "query2", "query3″...])
아래 예는 시스템:완료된_요청에서 쿼리 워크로드가 발생하는 시나리오를 보여줍니다:
1 2 3 |
선택 어드바이저(( 선택 RAW 문 FROM 시스템:완료_요청)); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[ { "$1": { "현재_사용된_인덱스": [ { "index": "`여행 샘플`(`유형`) 상에 인덱스 def_type 생성", "진술": [ { "run_count": 2, "진술": "유형이 null이 아닌 `travel-sample`에서 * 선택" } ] }, { "index": "`travel-sample`에 주 인덱스 def_primary 생성", "진술": [ { "run_count": 1, "진술": "select id from `travel-sample` where id < 10" } ] } ], "권장_커버링_인덱스": [ { "index": "`travel-sample`(`id`)에 인덱스 adv_id를 생성합니다.", "진술": [ { "run_count": 1, "진술": "select id from `travel-sample` where id < 10" } ] } ], "권장_인덱스": [ { "index": "`travel-sample`(`id`)에 인덱스 adv_id를 생성합니다.", "진술": [ { "run_count": 1, "진술": "select id from `travel-sample` where id < 10" } ] } ] } } ] |
ADVISE 문과 마찬가지로 ADVISOR() 함수의 출력은 세 부분으로 구성됩니다:
-
- 현재_사용된_인덱스
이 세션에서는 현재 사용된 인덱스와 해당 쿼리 문 목록 및 각 쿼리의 실행 횟수를 요약합니다.
-
- 추천_인덱스
이 세션에서는 전체 워크로드에 대한 WHERE/ON 절의 술어에 기반한 권장 인덱스에 대한 정보를 제공합니다.
-
- 추천_커버링_인덱스
쿼리 워크로드에 적용되는 커버링 인덱스 권장 사항이 여기에 나열됩니다.
세션 처리에 대한 어드바이저 기능
세션 처리 기능을 사용하면 다음 단계에 따라 들어오는 쿼리 워크로드에 대해 인덱스 어드바이저를 미리 설정할 수 있습니다.
-
- 특정 속성으로 관심 있는 쿼리를 정의합니다.
- 세션을 초기화하여 일정 기간 동안 클러스터에서 실행되는 쿼리 워크로드를 모니터링하고 수집합니다.
- 나중에 수집된 쿼리 워크로드에 대한 분석을 비동기적으로 수행하려면 인덱스 어드바이저를 호출하세요.
- 전체 프로세스가 완료된 후 인덱스 권장 사항을 추출하고 처리합니다.
사용 구문:
1. ADVISOR( { "action" : "start",
"profile": "john",
"응답" : "3초",
"duration" : "1m" ,
"query_count" : 200 } )
-
- "action"- 세션이 진행되도록 설정할 사용자: "시작", "중지", "가져오기", "목록", "퍼지", "중단".
- "프로필"(선택 사항) - 쿼리에 관심을 가질 지정된 사용자 프로필입니다. 설정하지 않으면 모든 사용자가 실행한 쿼리를 수집합니다.
- "응답"(선택 사항) - 쿼리가 더 오래 실행되도록 설정된 시간 임계값(기본 설정은 0초)입니다.
- "기간"(필수) - 쿼리를 수집하기 위해 세션이 실행될 기간입니다. 유효한 시간 단위는 "ns", "us"(또는 "µs"), "ms", "s", "m", "h"입니다.
- "query_count"(선택 사항) - 세션이 수집할 쿼리 수에 대한 상한입니다. 쿼리 노드당 쿼리_제한은 4000입니다. 사용자가 이보다 많은 쿼리를 수집하려는 경우 세션을 초기화하기 전에 전역 설정을 수정해야 합니다:
“curl http://localhost:port/admin/settings -d '{"completed-limit":10000}' -u user:password"
세션이 성공적으로 초기화되면 아래와 같이 참조할 수 있는 고유 세션 이름이 반환됩니다. 를 설정하면 워크로드 수집이 완료된 직후에 인덱스 어드바이저를 호출하여 분석을 수행하는 비동기 작업이 실행되도록 예약됩니다.
1 2 3 4 5 6 7 |
[ { "$1": { "세션": "06fcdefe-f864-48f5-a79b-b2f3345a6745" } } ] |
2. ADVISOR( { "action" : "get",
"세션": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
분석 프로세스가 완료된 후 사용자는 다른 advisor() 함수를 실행하여 해당 세션 이름을 사용하여 인덱스 추천 결과를 검색할 수 있습니다.
3. ADVISOR( { "액션" : "퍼지",
"세션": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
특정 세션에 대한 인덱스 추천 결과가 더 이상 필요하지 않은 경우, 사용자는 공간 효율성을 위해 이를 제거하도록 선택할 수 있습니다.
가장 최근 세션도 캐시 용량에 도달하면 자동으로 플러시됩니다.
4. ADVISOR({ "action": "목록",
"status":"완료"})
이 기능은 다음을 수행할 수 있습니다. 현재 활성 상태인 세션, 현재 완료된 세션 및 모든 기존 세션의 목록을 제공합니다. '상태'에 대한 입력은 '활성', '완료', '모두' 중 하나만 입력할 수 있습니다.
출력 정보는 system:tasks_cache에서 가져옵니다. 인덱스 어드바이저와 관련된 정보를 이해하기 위해 예를 들어 보겠습니다:
-
- 클래스: 이 작업은 인덱스 어드바이저에서 제공됩니다.
- 지연: 쿼리 수집 단계가 지속되는 기간입니다.
- 이름: 위와 동일한 세션 이름입니다.
- 상태: 세션의 상태입니다: ["완료됨", "일정", "실행 중"].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "$1": [ { "작업_캐시": { "class": "advisor", "지연": "1m0s", "id": "ea673d76-086f-5f27-86b2-9b016f56f2a0", "name": "<span style="글꼴-무게: 400;">06fcdefe-f864-48f5-a79b-b2f3345a6745<\/span>", "node": "127.0.0.1:8091", "결과": [ {} ], "startTime": "2019-07-23 16:11:13.616100068 -0700 PDT m=+96637.000928100", "state": "완료", "stopTime": "2019-07-23 16:11:14.186697742 -0700 PDT m=+96637.571525466", "subClass": "분석", "submitTime": "2019-07-23 16:10:13.615964874 -0700 PDT m=+96577.000792768" } } ] } ] |
5. ADVISOR( { "action" : "stop",
"세션": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
사용자는 쿼리 수집을 조기에 중단하고 인덱스 분석을 즉시 실행하도록 가져옵니다.
6. ADVISOR( { "action" : "abort",
"세션": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
사용자는 다음을 수행할 수도 있습니다. 분석을 실행하지 않고 한 세션을 취소합니다.
요약
어드바이저 기능은 단일 쿼리 및 다중 쿼리에서 작동하며, 전체 쿼리 워크로드에 대해 현재 사용되는 인덱스, 권장 인덱스 및 권장 커버링 인덱스에 대한 정보를 제공합니다.
어드바이저 세션 처리를 사용하면 사용자가 세션을 만들어 일정 기간 동안 지정된 요구 사항을 충족하는 쿼리를 수집하고 인덱스 어드바이저를 호출하여 이에 대한 권장 사항을 제공할 수 있습니다.
두 기능 모두 기능과 성능에 대한 개선의 여지가 많기 때문에 다음 단계에서는 디자인을 최적화하기 위해 계속 탐색하고 피드백을 받을 것입니다.