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.
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.
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:
-
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. -
Wenn die übermittelte Abfrage keine parametrisierte Abfrage ist und den Hinweis nicht enthält.
QUERY:PLANCACHE "enabled" -
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.
-
Wenn die Abfrage ein Muster enthält, das keine Ergebnisse zurückgibt.
-
dh
MATCH (n:nonexistentLabel) return nwenn es keine Knoten mit dem angegebenen Label gibt. -
d.h.
MATCH (n {name: $param}) return nparameters={"param": "abcde"}wenn es null Knoten gibt, die enthaltenname=abcde.
-
-
Wenn der Abfrageparameter ein zusammengesetzter Typ ist, z. B. a
listodermapa.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}}" -
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", dannRETURN "X"wird zwischengespeichert, währendRETURN "Y"dies nicht zwischengespeichert würde, da"Y"er nicht eingefügt wurde und in der Datenbank nicht existiert.