Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ketika kueri dikirimkan ke Neptunus, string kueri diurai, dioptimalkan, dan diubah menjadi rencana kueri, yang kemudian dieksekusi oleh mesin. Aplikasi sering didukung oleh pola kueri umum yang dipakai dengan nilai yang berbeda. Cache rencana kueri dapat mengurangi latensi keseluruhan dengan menyimpan paket kueri dan dengan demikian menghindari penguraian dan pengoptimalan untuk pola berulang tersebut.
Query Plan Cache dapat digunakan untuk OpenCypherkueri — baik kueri non-parameter maupun parameter. Ini diaktifkan untuk READ, dan untuk HTTP dan Bolt. Ini tidak didukung untuk kueri mutasi OC. Ini tidak didukung untuk kueri Gremlin atau SPARQL.
Cara memaksa mengaktifkan atau menonaktifkan cache rencana kueri
Cache paket kueri diaktifkan secara default untuk kueri berparameter latensi rendah. Rencana untuk kueri berparameter hanya di-cache ketika latensi lebih rendah dari ambang batas 100 ms. Perilaku ini dapat diganti berdasarkan per-kueri (diparameterisasi atau tidak) oleh Petunjuk Kueri tingkat kueri. QUERY:PLANCACHE
Itu perlu digunakan dengan USING
klausa. Petunjuk kueri menerima enabled
atau disabled
sebagai nilai.
# 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"
Cara menentukan apakah suatu rencana di-cache atau tidak
Untuk HTTP READ, jika kueri dikirimkan dan paket di-cache, explain
akan menampilkan detail yang relevan dengan cache rencana kueri.
% 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).
Saat menggunakan Bolt, fitur jelaskan tidak didukung.
Penggusuran
Rencana kueri diusir oleh cache time to live (TTL) atau ketika jumlah maksimum paket kueri cache telah tercapai. Saat paket kueri terpukul, TTL disegarkan. Defaultnya adalah:
-
1000 - Jumlah maksimum paket yang dapat di-cache per instance.
-
TTL - 300.000 milidetik atau 5 menit. Cache hit memulai ulang TTL, dan mengatur ulang kembali ke 5 menit.
Kondisi yang menyebabkan rencana tidak di-cache
Cache paket kueri tidak akan digunakan dalam kondisi berikut:
-
Saat kueri dikirimkan menggunakan petunjuk
QUERY:PLANCACHE "disabled"
kueri. Anda dapat menjalankan kembali kueri dan menghapusQUERY:PLANCACHE "disabled"
untuk mengaktifkan cache rencana kueri. -
Jika kueri yang dikirimkan bukan kueri berparameter dan tidak berisi petunjuk.
QUERY:PLANCACHE "enabled"
-
Jika waktu evaluasi kueri lebih besar dari ambang latensi, kueri tidak di-cache dan dianggap sebagai kueri yang berjalan lama yang tidak akan mendapat manfaat dari cache paket kueri.
-
Jika kueri berisi pola yang tidak mengembalikan hasil apa pun.
-
yaitu
MATCH (n:nonexistentLabel) return n
ketika ada nol node dengan label yang ditentukan. -
yaitu
MATCH (n {name: $param}) return n
denganparameters={"param": "abcde"}
ketika ada nol node yang mengandungname=abcde
.
-
-
Jika parameter kueri adalah tipe komposit, seperti a
list
atau amap
.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}}"
-
Jika parameter query adalah string yang belum menjadi bagian dari beban data atau operasi penyisipan data. Misalnya, jika
CREATE (n {name: "X"})
dijalankan untuk menyisipkan"X"
,RETURN "X"
maka di-cache, sementara tidakRETURN "Y"
akan di-cache, karena"Y"
belum dimasukkan dan tidak ada dalam database.