View a markdown version of this page

Cache rencana kueri di Amazon Neptunus - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Cache rencana kueri di Amazon Neptunus

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 dibuat dengan nilai yang berbeda. Cache rencana kueri dapat mengurangi latensi keseluruhan dengan men-cache rencana kueri dan dengan demikian menghindari penguraian dan pengoptimalan untuk pola berulang tersebut.

Query Plan Cache dapat digunakan untuk OpenCypher kueri — kueri non-parameter atau parameter. Ini diaktifkan untuk BACA, dan untuk HTTP dan Bolt. Itu 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 di-cache hanya ketika latensi lebih rendah dari ambang 100ms. Perilaku ini dapat diganti berdasarkan per-kueri (diparameter atau tidak) oleh Petunjuk Kueri tingkat kueri. QUERY:PLANCACHE Itu perlu digunakan dengan USING klausa. Petunjuk kueri menerima enabled atau disabled sebagai nilai.

AWS CLI

Memaksa rencana untuk di-cache atau digunakan kembali:

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"

Dengan parameter:

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}'

Memaksa rencana untuk tidak di-cache atau digunakan kembali:

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"

Untuk informasi selengkapnya, lihat execute-open-cypher- query di Referensi Perintah. 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'])

Untuk contoh AWS SDK dalam bahasa lain, lihatAWS SDK.

awscurl

Memaksa rencana untuk di-cache atau digunakan kembali:

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"
catatan

Contoh ini mengasumsikan bahwa AWS kredenSIAL Anda dikonfigurasi di lingkungan Anda. Ganti us-east-1 dengan Wilayah cluster Neptunus Anda.

curl

Memaksa rencana untuk di-cache atau digunakan kembali:

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

Dengan parameter:

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

Memaksa rencana untuk tidak di-cache atau digunakan kembali:

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

Cara menentukan apakah rencana di-cache atau tidak

Untuk HTTP READ, jika kueri dikirimkan dan rencana di-cache, explain akan menampilkan detail yang relevan dengan cache rencana kueri.

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

Untuk informasi selengkapnya, lihat execute-open-cypher- explain-query di Referensi Perintah. 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'))

Untuk contoh AWS SDK dalam bahasa lain, lihatAWS 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"
catatan

Contoh ini mengasumsikan bahwa AWS kredenSIAL Anda dikonfigurasi di lingkungan Anda. Ganti us-east-1 dengan Wilayah cluster Neptunus Anda.

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

Jika rencana di-cache, explain output menunjukkan:

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 penjelasan tidak didukung.

Pengusiran

Rencana kueri diusir oleh waktu cache untuk hidup (TTL) atau ketika jumlah maksimum rencana kueri yang di-cache telah tercapai. Saat paket kueri tertekan, TTL diperbarui. Defaultnya adalah:

  • 1000 - Jumlah maksimum paket yang dapat di-cache per instance.

  • TTL - 300.000 milidetik atau 5 menit. Tekan cache 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:

  1. Ketika kueri dikirimkan menggunakan petunjuk kueriQUERY:PLANCACHE "disabled". Anda dapat menjalankan kembali kueri dan menghapus QUERY:PLANCACHE "disabled" untuk mengaktifkan cache rencana kueri.

  2. Jika kueri yang dikirimkan bukan kueri berparameter dan tidak mengandung petunjukQUERY:PLANCACHE "enabled".

  3. 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 rencana kueri.

  4. 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 dengan parameters={"param": "abcde"} ketika ada nol node yang mengandungname=abcde.

  5. Jika parameter kueri adalah tipe komposit, seperti a list atau amap.

    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. Jika parameter query adalah string yang belum menjadi bagian dari operasi pemuatan data atau penyisipan data. Misalnya, jika CREATE (n {name: "X"}) dijalankan untuk menyisipkan"X", RETURN "X" maka di-cache, sementara tidak RETURN "Y" akan di-cache, "Y" karena belum dimasukkan dan tidak ada dalam database.