기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Neptune의 쿼리 플랜 캐시
쿼리가 Neptune에 제출되면 쿼리 문자열이 구문 분석되고 최적화되고 쿼리 계획으로 변환된 다음 엔진에서 실행됩니다. 애플리케이션은 다양한 값으로 인스턴스화되는 일반적인 쿼리 패턴을 기반으로 하는 경우가 많습니다. 쿼리 계획 캐시는 쿼리 계획을 캐시하여 이러한 반복 패턴에 대한 구문 분석 및 최적화를 피함으로써 전체 대기 시간을 줄일 수 있습니다.
쿼리 계획 캐시는 매개 변수가 없는 OpenCypher쿼리와 매개 변수가 있는 쿼리 모두에 사용할 수 있습니다. Bolt에 대해READ, 그리고 Bolt에 대해 모두 사용할 수 있습니다. HTTP OC 뮤테이션 쿼리에는 지원되지 않습니다. Gremlin 또는 쿼리에서는 지원되지 않습니다. SPARQL
쿼리 계획 캐시를 강제로 활성화 또는 비활성화하는 방법
지연 시간이 짧은 파라미터화된 쿼리의 경우 쿼리 계획 캐시가 기본적으로 활성화됩니다. 매개변수화된 쿼리에 대한 계획은 지연 시간이 임계값인 100ms보다 낮은 경우에만 캐시됩니다. 이 동작은 쿼리 수준 쿼리 힌트를 통해 쿼리별 (매개변수화 여부에 관계없이) 재정의할 수 있습니다. QUERY:PLANCACHE
절과 함께 사용해야 합니다. USING
쿼리 힌트는 enabled
또는 disabled
를 값으로 받아들입니다.
# Forcing plan to be cached or reused % curl -k https://<endpoint>:<port>/opencypher \ -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" % curl -k https://<endpoint>:<port>/opencypher \ -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \ -d "parameters={\"arg\": 123}" # Forcing plan to be neither cached nor reused % curl -k https://<endpoint>:<port>/opencypher \ -d "query=Using QUERY:PLANCACHE \"disabled\" MATCH(n) RETURN n LIMIT 1"
계획이 캐시되었는지 여부를 확인하는 방법
에 대해 HTTPREAD, 쿼리가 제출되고 계획이 캐시된 경우 쿼리 계획 캐시와 explain
관련된 세부 정보가 표시됩니다.
% curl -k https://<endpoint>:<port>/opencypher \ -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \ -d "explain=[static|details]" Query: <QUERY STRING> Plan cached by request: <REQUEST ID OF FIRST TIME EXECUTION> Plan cached at: <TIMESTAMP OF FIRST TIME EXECUTION> Parameters: <PARAMETERS, IF QUERY IS PARAMETERIZED QUERY> Plan cache hits: <NUMBER OF CACHE HITS FOR CACHED PLAN> First query evaluation time: <LATENCY OF FIRST TIME EXECUTION> The query has been executed based on a cached query plan. Detailed explain with operator runtime statistics can be obtained by running the query with plan cache disabled (using HTTP parameter planCache=disabled).
Bolt를 사용할 때는 설명 기능이 지원되지 않습니다.
퇴거
쿼리 계획은 캐시 실행 시간 (TTL) 에 도달하거나 캐시된 쿼리 계획의 최대 수에 도달했을 때 제거됩니다. 쿼리 계획이 충족되면 가 새로 고쳐집니다. TTL 기본값은 다음과 같습니다.
-
1000 - 인스턴스당 캐시할 수 있는 최대 계획 수입니다.
-
TTL- 300,000밀리초 또는 5분. 캐시 히트가 다시 시작되고 다시 5분으로 재설정됩니다. TTL
계획이 캐시되지 않는 상황입니다.
다음과 같은 상황에서는 쿼리 계획 캐시가 사용되지 않습니다.
-
쿼리 힌트를
QUERY:PLANCACHE "disabled"
사용하여 쿼리를 제출한 경우. 쿼리를 다시 실행하고 제거하여 쿼리 계획 캐시를QUERY:PLANCACHE "disabled"
활성화할 수 있습니다. -
제출된 쿼리가 매개 변수화된 쿼리가 아니고 힌트를 포함하지 않는 경우
QUERY:PLANCACHE "enabled"
-
쿼리 평가 시간이 지연 시간 임계값보다 길면 쿼리가 캐시되지 않으며 쿼리 계획 캐시의 이점을 누리지 못하는 장기 실행 쿼리로 간주됩니다.
-
쿼리에 결과를 반환하지 않는 패턴이 포함된 경우
-
즉, 지정된 레이블을 가진 노드가 0개인
MATCH (n:nonexistentLabel) return n
경우 -
즉,
MATCH (n {name: $param}) return n
포함하는 노드가 0개인parameters={"param": "abcde"}
경우에 사용합니다name=abcde
.
-
-
쿼리 매개변수가 a
list
map
또는 a와 같은 복합 유형인 경우curl -k https://<endpoint>:<port>/opencypher \ -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \ -d "parameters={\"arg\": [1, 2, 3]}" curl -k https://<endpoint>:<port>/opencypher \ -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \ -d "parameters={\"arg\": {\"a\": 1}}"
-
쿼리 매개 변수가 데이터 로드 또는 데이터 삽입 작업에 포함되지 않은 문자열인 경우 예를 들어
CREATE (n {name: "X"})
를"X"
삽입하기 위해 실행하면 캐시되지만 삽입되지RETURN "Y"
않았거나 데이터베이스에 존재하지 않으므로 캐시되지 않습니다.RETURN "X"
"Y"