View a markdown version of this page

Zwischenspeicher für Abfragepläne in Amazon Neptune - Amazon Neptune

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.

Zwischenspeicher für Abfragepläne in Amazon Neptune

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 werden häufig durch allgemeine Abfragemuster unterstützt, die mit unterschiedlichen Werten instanziiert werden. Der Abfrageplan-Cache kann die Gesamtlatenz reduzieren, indem die Abfragepläne zwischengespeichert werden und so das Analysieren und Optimieren für solche wiederholten Muster vermieden wird.

Der Query Plan 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 nicht für Gremlin- oder SPARQL-Abfragen unterstützt.

Wie erzwingt man die Aktivierung oder Deaktivierung des Abfrageplan-Caches

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 für jede 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}'

Erzwingt, 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 unter https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html execute-open-cypher-query in der Befehlsreferenz. AWS CLI

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

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. us-east-1Ersetzen Sie durch die Region Ihres Neptune-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}"

Erzwingt, 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

Wenn für HTTP READ die Abfrage 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 https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-explain-query.html execute-open-cypher-explain-query in der Befehlsreferenz. AWS CLI

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

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. us-east-1Ersetzen Sie durch die Region Ihres Neptune-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).

Wenn Sie Bolt verwenden, wird die Erklärungsfunktion nicht unterstützt.

Räumung

Ein Abfrageplan wird aufgrund der Cache-Gültigkeitsdauer (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

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

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

  2. Wenn die übermittelte Abfrage keine parametrisierte Abfrage ist und den Hinweis nicht enthält. QUERY:PLANCACHE "enabled"

  3. Wenn die Evaluierungszeit der Abfrage den Latenzschwellenwert überschreitet, wird die Abfrage nicht zwischengespeichert und gilt als eine Abfrage mit langer Ausführungsdauer, die nicht vom Abfrageplan-Cache profitieren würde.

  4. 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 null Knoten gibt, die enthaltenname=abcde.

  5. 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}}"
  6. Wenn der Abfrageparameter eine Zeichenfolge ist, die nicht Teil eines Datenlade- oder Dateneinfügevorgangs war. Wenn beispielsweise ausgeführt CREATE (n {name: "X"}) wird, um einzufügen"X", dann RETURN "X" wird zwischengespeichert, während RETURN "Y" dies nicht zwischengespeichert würde, da "Y" er nicht eingefügt wurde und in der Datenbank nicht existiert.