기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
쿼리가 Neptune에 제출되면 쿼리 문자열이 구문 분석, 최적화 및 쿼리 계획으로 변환된 다음 엔진에서 실행됩니다. 애플리케이션은 종종 서로 다른 값으로 인스턴스화되는 일반적인 쿼리 패턴에 의해 지원됩니다. 쿼리 계획 캐시는 쿼리 계획을 캐싱하여 이러한 반복 패턴에 대한 구문 분석 및 최적화를 방지함으로써 전체 지연 시간을 줄일 수 있습니다.
쿼리 계획 캐시는 파라미터화되지 않았거나 파라미터화된 쿼리인 OpenCypher 쿼리에 사용할 수 있습니다. READ와 HTTP 및 Bolt에 대해 활성화됩니다. 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"
계획이 캐시되는지 여부를 확인하는 방법
HTTP READ의 경우 쿼리가 제출되고 계획이 캐시된 경우 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(Time to Live) 또는 캐시된 쿼리 계획의 최대 수에 도달했을 때 제거됩니다. 쿼리 계획에 도달하면 TTL이 새로 고쳐집니다. 기본값은 다음과 같습니다.
-
1000 - 인스턴스당 캐싱할 수 있는 최대 계획 수입니다.
-
TTL - 300,000밀리초 또는 5분. 캐시 적중은 TTL을 다시 시작하고 다시 5분으로 재설정합니다.
계획이 캐시되지 않는 조건
쿼리 계획 캐시는 다음 조건에서는 사용되지 않습니다.
-
쿼리 힌트를 사용하여 쿼리를 제출하는 경우
QUERY:PLANCACHE "disabled"
. 쿼리를 다시 실행하고를 제거하여 쿼리 계획 캐시를 활성화QUERY:PLANCACHE "disabled"
할 수 있습니다. -
제출된 쿼리가 파라미터화된 쿼리가 아니고 힌트가 없는 경우
QUERY:PLANCACHE "enabled"
. -
쿼리 평가 시간이 지연 시간 임계값보다 크면 쿼리는 캐시되지 않으며 쿼리 계획 캐시의 이점을 얻지 못하는 장기 실행 쿼리로 간주됩니다.
-
쿼리에 결과를 반환하지 않는 패턴이 포함된 경우.
-
즉, 지정된 레이블이 있는 노드가 없는
MATCH (n:nonexistentLabel) return n
경우입니다. -
즉,
MATCH (n {name: $param}) return n
를 포함하는 노드가 없는parameters={"param": "abcde"}
경우를 사용합니다name=abcde
.
-
-
쿼리 파라미터가
list
또는와 같은 복합 유형인 경우map
.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 "X"
가 캐싱되지만"Y"
는RETURN "Y"
가 삽입되지 않았고 데이터베이스에 존재하지 않으므로 캐싱되지 않습니다.