

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Plan-Cache in Amazon Neptune abfragen
<a name="access-graph-qpc"></a>

 Wenn eine Abfrage an Neptune gesendet wird, wird die Abfragezeichenfolge analysiert, optimiert und in einen Abfrageplan umgewandelt, der dann von der Engine ausgeführt wird. Anwendungen basieren häufig auf gängigen Abfragemustern, die mit unterschiedlichen Werten instanziiert werden. Der Abfrageplan-Cache kann die Gesamtlatenz reduzieren, indem er die Abfragepläne zwischenspeichert und so das Parsen und Optimieren für solche sich wiederholenden Muster vermeidet. 

 Der Abfrageplan-Cache kann für **OpenCypher**Abfragen verwendet werden — sowohl für nicht parametrisierte als auch für parametrisierte Abfragen. Es ist für READ sowie für HTTP und Bolt aktiviert. Es wird für OC-Mutationsabfragen **nicht** unterstützt. Es wird für Gremlin- oder SPARQL-Abfragen **nicht** unterstützt. 

## Wie erzwingt man die Aktivierung oder Deaktivierung des Abfrageplan-Caches
<a name="access-graph-qpc-enable"></a>

 Der Abfrageplan-Cache ist standardmäßig für parametrisierte Abfragen mit niedriger Latenz aktiviert. **Ein Plan für eine parametrisierte Abfrage wird nur zwischengespeichert, wenn die Latenz unter dem Schwellenwert von 100 ms liegt.** Dieses Verhalten kann pro Abfrage (parametrisiert oder nicht) durch den Abfragehinweis auf Abfrageebene außer Kraft gesetzt werden. `QUERY:PLANCACHE` Es muss zusammen mit der Klausel verwendet werden. `USING` Der Abfragehinweis akzeptiert `enabled` oder `disabled` als Wert. 

------
#### [ AWS CLI ]

Erzwingen, dass der Plan zwischengespeichert oder wiederverwendet wird:

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://your-neptune-endpoint:port \
  --open-cypher-query "Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1"
```

Mit Parametern:

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://your-neptune-endpoint:port \
  --open-cypher-query "Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
  --parameters '{"arg": 123}'
```

Erzwingen, dass der Plan weder zwischengespeichert noch wiederverwendet wird:

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://your-neptune-endpoint:port \
  --open-cypher-query "Using QUERY:PLANCACHE \"disabled\" MATCH(n) RETURN n LIMIT 1"
```

Weitere Informationen finden Sie [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)in der AWS CLI Befehlsreferenz.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://your-neptune-endpoint:port',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

# Forcing plan to be cached or reused
response = client.execute_open_cypher_query(
    openCypherQuery='Using QUERY:PLANCACHE "enabled" MATCH(n) RETURN n LIMIT 1'
)

print(response['results'])
```

 AWS SDK-Beispiele in anderen Sprachen finden Sie unter[AWS SDK](access-graph-opencypher-sdk.md).

------
#### [ awscurl ]

Erzwingen, dass der Plan zwischengespeichert oder wiederverwendet wird:

```
awscurl https://your-neptune-endpoint:port/openCypher \
  --region us-east-1 \
  --service neptune-db \
  -X POST \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1"
```

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Ihre AWS Anmeldeinformationen in Ihrer Umgebung konfiguriert sind. Ersetze es *us-east-1* durch die Region deines Neptun-Clusters.

------
#### [ curl ]

Erzwingen, dass der Plan zwischengespeichert oder wiederverwendet wird:

```
curl https://your-neptune-endpoint:port/openCypher \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1"
```

Mit Parametern:

```
curl https://your-neptune-endpoint:port/openCypher \
  -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
  -d "parameters={\"arg\": 123}"
```

Erzwingen, dass der Plan weder zwischengespeichert noch wiederverwendet wird:

```
curl https://your-neptune-endpoint:port/openCypher \
  -d "query=Using QUERY:PLANCACHE \"disabled\" MATCH(n) RETURN n LIMIT 1"
```

------

## Wie kann man feststellen, ob ein Plan zwischengespeichert ist oder nicht
<a name="access-graph-qpc-status"></a>

 Wenn bei HTTP READ die Anfrage eingereicht und der Plan zwischengespeichert wurde, `explain` würden Details angezeigt, die für den Abfrageplan-Cache relevant sind. 

------
#### [ AWS CLI ]

```
aws neptunedata execute-open-cypher-explain-query \
  --endpoint-url https://your-neptune-endpoint:port \
  --open-cypher-query "Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \
  --explain-mode details
```

Weitere Informationen finden Sie unter [execute-open-cypher-explain-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-explain-query.html) in der AWS CLI Befehlsreferenz.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://your-neptune-endpoint:port',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.execute_open_cypher_explain_query(
    openCypherQuery='Using QUERY:PLANCACHE "enabled" MATCH(n) RETURN n LIMIT 1',
    explainMode='details'
)

print(response['results'].read().decode('utf-8'))
```

 AWS SDK-Beispiele in anderen Sprachen finden Sie unter[AWS SDK](access-graph-opencypher-sdk.md).

------
#### [ awscurl ]

```
awscurl https://your-neptune-endpoint:port/openCypher \
  --region us-east-1 \
  --service neptune-db \
  -X POST \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \
  -d "explain=details"
```

**Anmerkung**  
In diesem Beispiel wird davon ausgegangen, dass Ihre AWS Anmeldeinformationen in Ihrer Umgebung konfiguriert sind. Ersetze es *us-east-1* durch die Region deines Neptun-Clusters.

------
#### [ curl ]

```
curl https://your-neptune-endpoint:port/openCypher \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \
  -d "explain=details"
```

------

Wenn der Plan zwischengespeichert wurde, zeigt die `explain` Ausgabe:

```
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).
```

 Bei Verwendung von Bolt wird die Erklärungsfunktion nicht unterstützt. 

## Räumung
<a name="access-graph-qpc-eviction"></a>

 Ein Abfrageplan wird aufgrund der Gültigkeitsdauer des Caches (TTL) gelöscht oder wenn eine maximale Anzahl von zwischengespeicherten Abfrageplänen erreicht wurde. Wenn der Abfrageplan erreicht wird, wird die TTL aktualisiert. Die Standardwerte sind: 
+  1000 — Die maximale Anzahl von Plänen, die pro Instanz zwischengespeichert werden können. 
+  TTL — 300.000 Millisekunden oder 5 Minuten. Der Cache-Treffer startet die TTL neu und setzt sie auf 5 Minuten zurück. 

## Bedingungen, die dazu führen, dass der Plan nicht zwischengespeichert wird
<a name="access-graph-qpc-conditions"></a>

 Der Abfrageplan-Cache würde unter den folgenden Bedingungen nicht verwendet werden: 

1.  Wenn eine Abfrage mithilfe des Abfragehinweises gesendet wird`QUERY:PLANCACHE "disabled"`. Sie können die Abfrage erneut ausführen und entfernen, `QUERY:PLANCACHE "disabled"` um den Abfrageplan-Cache zu aktivieren. 

1.  Wenn es sich bei der übermittelten Abfrage nicht um eine parametrisierte Abfrage handelt und sie den Hinweis nicht enthält. `QUERY:PLANCACHE "enabled"` 

1.  Wenn die Abfrageauswertungszeit den Latenzschwellenwert überschreitet, wird die Abfrage nicht zwischengespeichert und als Abfrage mit langer Laufzeit betrachtet, für die der Abfrageplan-Cache nicht von Vorteil wäre. 

1.  Wenn die Abfrage ein Muster enthält, das keine Ergebnisse zurückgibt. 
   +  dh `MATCH (n:nonexistentLabel) return n` wenn es keine Knoten mit dem angegebenen Label gibt. 
   +  d.h. `MATCH (n {name: $param}) return n` `parameters={"param": "abcde"}` wenn es keine Knoten gibt, die enthalten`name=abcde`. 

1.  Wenn der Abfrageparameter ein zusammengesetzter Typ ist, z. B. a `list` oder `map` a. 

   ```
   curl https://your-neptune-endpoint:port/openCypher \
     -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
     -d "parameters={\"arg\": [1, 2, 3]}"
   
   curl https://your-neptune-endpoint:port/openCypher \
     -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
     -d "parameters={\"arg\": {\"a\": 1}}"
   ```

1.  Wenn der Abfrageparameter eine Zeichenfolge ist, die nicht Teil eines Datenlade- oder Dateneinfügevorgangs war. Wird `CREATE (n {name: "X"})` beispielsweise ausgeführt, um einzufügen`"X"`, dann `RETURN "X"` wird es zwischengespeichert, `RETURN "Y"` würde aber nicht zwischengespeichert werden, da es nicht eingefügt wurde und nicht in der Datenbank vorhanden `"Y"` ist. 