Mendapatkan statistik pernyataan PartiQL - Database Buku Besar Amazon Quantum (AmazonQLDB)

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

Mendapatkan statistik pernyataan PartiQL

penting

Pemberitahuan akhir dukungan: Pelanggan yang ada akan dapat menggunakan Amazon QLDB hingga akhir dukungan pada 07/31/2025. Untuk detail selengkapnya, lihat Memigrasi QLDB Buku Besar Amazon ke Amazon Aurora Postgre. SQL

Amazon QLDB menyediakan statistik eksekusi pernyataan yang dapat membantu Anda mengoptimalkan penggunaan QLDB dengan menjalankan pernyataan PartiQL yang lebih efisien. QLDBmengembalikan statistik ini bersama dengan hasil pernyataan. Mereka termasuk metrik yang mengukur penggunaan I/O yang dikonsumsi dan waktu pemrosesan sisi server, yang dapat Anda gunakan untuk mengidentifikasi pernyataan yang tidak efisien.

Fitur ini saat ini tersedia di editor PartiQL di QLDB konsol, shell, QLDB dan versi driver terbaru untuk semua bahasa QLDByang didukung. Anda juga dapat melihat statistik pernyataan untuk riwayat kueri Anda di konsol.

Penggunaan I/O

Metrik penggunaan I/O menjelaskan jumlah permintaan I/O baca. Jika jumlah permintaan I/O baca lebih tinggi dari yang diharapkan, ini menunjukkan bahwa pernyataan tersebut tidak dioptimalkan, seperti kurangnya indeks. Kami menyarankan Anda meninjau Pola kueri yang optimal topik sebelumnya, Mengoptimalkan kinerja kueri.

catatan

Saat Anda menjalankan CREATE INDEX pernyataan pada tabel yang tidak kosong, metrik penggunaan I/O menyertakan permintaan baca untuk panggilan pembuatan indeks sinkron saja.

QLDBmembangun indeks untuk dokumen yang ada dalam tabel secara asinkron. Permintaan baca asinkron ini tidak disertakan dalam metrik penggunaan I/O dari hasil pernyataan Anda. Permintaan baca asinkron dibebankan secara terpisah dan ditambahkan ke total I/O baca Anda setelah pembuatan indeks selesai.

Menggunakan konsol QLDB

Untuk mendapatkan penggunaan I/O baca pernyataan dengan menggunakan QLDB konsol, lakukan langkah-langkah berikut:

  1. Buka QLDB konsol Amazon di https://console.aws.amazon.com/qldb.

  2. Di panel navigasi, pilih editor PartiQL.

  3. Pilih buku besar dari daftar dropdown buku besar.

  4. Di jendela editor kueri, masukkan pernyataan pilihan Anda, lalu pilih Jalankan. Berikut ini adalah contoh query.

    SELECT * FROM testTable WHERE firstName = 'Jim'

    Untuk menjalankan pernyataan, Anda juga dapat menggunakan pintasan Ctrl Enter keyboard+untuk Windows, Cmd Return atau+untuk macOS. Untuk pintasan keyboard lainnya, lihatPintasan keyboard editor PartiQL.

  5. Di bawah jendela editor kueri, hasil kueri Anda termasuk baca I/Os, yang merupakan jumlah permintaan baca yang dibuat oleh pernyataan tersebut.

Anda juga dapat melihat I/Os baca riwayat kueri Anda dengan melakukan langkah-langkah berikut:

  1. Di panel navigasi, pilih Kueri terbaru di bawah editor PartiQL.

  2. Kolom Baca I/Os menampilkan jumlah permintaan baca yang dibuat oleh setiap pernyataan.

Menggunakan QLDB driver

Untuk mendapatkan penggunaan I/O pernyataan dengan menggunakan QLDB driver, panggil getConsumedIOs operasi kursor aliran hasil atau kursor buffer.

Contoh kode berikut menunjukkan cara membaca I/Os dari kursor aliran hasil pernyataan.

Java
import com.amazon.ion.IonSystem; import com.amazon.ion.IonValue; import com.amazon.ion.system.IonSystemBuilder; import software.amazon.qldb.IOUsage; import software.amazon.qldb.Result; IonSystem ionSystem = IonSystemBuilder.standard().build(); IonValue ionFirstName = ionSystem.newString("Jim"); driver.execute(txn -> { Result result = txn.execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); for (IonValue ionValue : result) { // User code here to handle results } IOUsage ioUsage = result.getConsumedIOs(); long readIOs = ioUsage.getReadIOs(); });
.NET
using Amazon.IonDotnet.Builders; using Amazon.IonDotnet.Tree; using Amazon.QLDB.Driver; using IAsyncResult = Amazon.QLDB.Driver.IAsyncResult; // This is one way of creating Ion values. We can also use a ValueFactory. // For more details, see: https://docs.aws.amazon.com/qldb/latest/developerguide/driver-cookbook-dotnet.html#cookbook-dotnet.ion IIonValue ionFirstName = IonLoader.Default.Load("Jim"); await driver.Execute(async txn => { IAsyncResult result = await txn.Execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); // Iterate through stream cursor to accumulate read IOs. await foreach (IIonValue ionValue in result) { // User code here to handle results. // Warning: It is bad practice to rely on results within a lambda block, unless // it is to check the state of a result. This is because lambdas are retryable. } var ioUsage = result.GetConsumedIOs(); var readIOs = ioUsage?.ReadIOs; });
catatan

Untuk mengonversi ke kode sinkron, hapus async kata kunci await dan kata kunci, dan ubah IAsyncResult jenisnya menjadiIResult.

Go
import ( "context" "fmt" "github.com/awslabs/amazon-qldb-driver-go/v2/qldbdriver" ) driver.Execute(context.Background(), func(txn qldbdriver.Transaction) (interface{}, error) { result, err := txn.Execute("SELECT * FROM testTable WHERE firstName = ?", "Jim") if err != nil { panic(err) } for result.Next(txn) { // User code here to handle results } ioUsage := result.GetConsumedIOs() readIOs := *ioUsage.GetReadIOs() fmt.Println(readIOs) return nil,nil })
Node.js
import { IOUsage, ResultReadable, TransactionExecutor } from "amazon-qldb-driver-nodejs"; await driver.executeLambda(async (txn: TransactionExecutor) => { const result: ResultReadable = await txn.executeAndStreamResults("SELECT * FROM testTable WHERE firstName = ?", "Jim"); for await (const chunk of result) { // User code here to handle results } const ioUsage: IOUsage = result.getConsumedIOs(); const readIOs: number = ioUsage.getReadIOs(); });
Python
def get_read_ios(transaction_executor): cursor = transaction_executor.execute_statement("SELECT * FROM testTable WHERE firstName = ?", "Jim") for row in cursor: # User code here to handle results pass consumed_ios = cursor.get_consumed_ios() read_ios = consumed_ios.get('ReadIOs') qldb_driver.execute_lambda(lambda txn: get_read_ios(txn))

Contoh kode berikut menunjukkan cara membaca I/Os dari kursor buffer dari hasil pernyataan. Ini mengembalikan total baca I/Os dari ExecuteStatement dan FetchPage permintaan.

Java
import com.amazon.ion.IonSystem; import com.amazon.ion.IonValue; import com.amazon.ion.system.IonSystemBuilder; import software.amazon.qldb.IOUsage; import software.amazon.qldb.Result; IonSystem ionSystem = IonSystemBuilder.standard().build(); IonValue ionFirstName = ionSystem.newString("Jim"); Result result = driver.execute(txn -> { return txn.execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); }); IOUsage ioUsage = result.getConsumedIOs(); long readIOs = ioUsage.getReadIOs();
.NET
using Amazon.IonDotnet.Builders; using Amazon.IonDotnet.Tree; using Amazon.QLDB.Driver; using IAsyncResult = Amazon.QLDB.Driver.IAsyncResult; IIonValue ionFirstName = IonLoader.Default.Load("Jim"); IAsyncResult result = await driver.Execute(async txn => { return await txn.Execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); }); var ioUsage = result.GetConsumedIOs(); var readIOs = ioUsage?.ReadIOs;
catatan

Untuk mengonversi ke kode sinkron, hapus async kata kunci await dan kata kunci, dan ubah IAsyncResult jenisnya menjadiIResult.

Go
import ( "context" "fmt" "github.com/awslabs/amazon-qldb-driver-go/v2/qldbdriver" ) result, err := driver.Execute(context.Background(), func(txn qldbdriver.Transaction) (interface{}, error) { result, err := txn.Execute("SELECT * FROM testTable WHERE firstName = ?", "Jim") if err != nil { return nil, err } return txn.BufferResult(result) }) if err != nil { panic(err) } qldbResult := result.(*qldbdriver.BufferedResult) ioUsage := qldbResult.GetConsumedIOs() readIOs := *ioUsage.GetReadIOs() fmt.Println(readIOs)
Node.js
import { IOUsage, Result, TransactionExecutor } from "amazon-qldb-driver-nodejs"; const result: Result = await driver.executeLambda(async (txn: TransactionExecutor) => { return await txn.execute("SELECT * FROM testTable WHERE firstName = ?", "Jim"); }); const ioUsage: IOUsage = result.getConsumedIOs(); const readIOs: number = ioUsage.getReadIOs();
Python
cursor = qldb_driver.execute_lambda( lambda txn: txn.execute_statement("SELECT * FROM testTable WHERE firstName = ?", "Jim")) consumed_ios = cursor.get_consumed_ios() read_ios = consumed_ios.get('ReadIOs')
catatan

Kursor aliran stateful karena melakukan paginasi pada set hasil. Oleh karena itu, getConsumedIOs dan getTimingInformation operasi mengembalikan metrik yang terakumulasi sejak Anda memanggilnya.

Kursor buffer buffer hasil yang disetel dalam memori dan mengembalikan total metrik akumulasi.

Informasi waktu

Metrik informasi waktu menggambarkan waktu pemrosesan sisi server dalam milidetik. Waktu pemrosesan sisi server didefinisikan sebagai jumlah waktu yang QLDB dihabiskan untuk memproses pernyataan. Ini tidak termasuk waktu yang dihabiskan untuk panggilan jaringan atau jeda. Metrik ini membedakan waktu pemrosesan di sisi QLDB layanan dari waktu pemrosesan di sisi klien.

Menggunakan konsol QLDB

Untuk mendapatkan informasi waktu pernyataan dengan menggunakan QLDB konsol, lakukan langkah-langkah berikut:

  1. Buka QLDB konsol Amazon di https://console.aws.amazon.com/qldb.

  2. Di panel navigasi, pilih editor PartiQL.

  3. Pilih buku besar dari daftar dropdown buku besar.

  4. Di jendela editor kueri, masukkan pernyataan pilihan Anda, lalu pilih Jalankan. Berikut ini adalah contoh query.

    SELECT * FROM testTable WHERE firstName = 'Jim'

    Untuk menjalankan pernyataan, Anda juga dapat menggunakan pintasan Ctrl Enter keyboard+untuk Windows, Cmd Return atau+untuk macOS. Untuk pintasan keyboard lainnya, lihatPintasan keyboard editor PartiQL.

  5. Di bawah jendela editor kueri, hasil kueri Anda menyertakan latensi sisi server, yang merupakan jumlah waktu antara saat QLDB menerima permintaan pernyataan, dan saat mengirim respons. Ini adalah bagian dari total durasi kueri.

Anda juga dapat melihat informasi waktu dari riwayat kueri Anda dengan melakukan langkah-langkah berikut:

  1. Di panel navigasi, pilih Kueri terbaru di bawah editor PartiQL.

  2. Kolom Waktu eksekusi (ms) menampilkan informasi waktu ini untuk setiap pernyataan.

Menggunakan QLDB driver

Untuk mendapatkan informasi waktu pernyataan dengan menggunakan QLDB driver, panggil getTimingInformation pengoperasian kursor aliran hasil atau kursor buffer.

Contoh kode berikut menunjukkan cara mendapatkan waktu pemrosesan dari kursor aliran hasil pernyataan.

Java
import com.amazon.ion.IonSystem; import com.amazon.ion.IonValue; import com.amazon.ion.system.IonSystemBuilder; import software.amazon.qldb.Result; import software.amazon.qldb.TimingInformation; IonSystem ionSystem = IonSystemBuilder.standard().build(); IonValue ionFirstName = ionSystem.newString("Jim"); driver.execute(txn -> { Result result = txn.execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); for (IonValue ionValue : result) { // User code here to handle results } TimingInformation timingInformation = result.getTimingInformation(); long processingTimeMilliseconds = timingInformation.getProcessingTimeMilliseconds(); });
.NET
using Amazon.IonDotnet.Builders; using Amazon.IonDotnet.Tree; using Amazon.QLDB.Driver; using IAsyncResult = Amazon.QLDB.Driver.IAsyncResult; IIonValue ionFirstName = IonLoader.Default.Load("Jim"); await driver.Execute(async txn => { IAsyncResult result = await txn.Execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); // Iterate through stream cursor to accumulate processing time. await foreach(IIonValue ionValue in result) { // User code here to handle results. // Warning: It is bad practice to rely on results within a lambda block, unless // it is to check the state of a result. This is because lambdas are retryable. } var timingInformation = result.GetTimingInformation(); var processingTimeMilliseconds = timingInformation?.ProcessingTimeMilliseconds; });
catatan

Untuk mengonversi ke kode sinkron, hapus async kata kunci await dan kata kunci, dan ubah IAsyncResult jenisnya menjadiIResult.

Go
import ( "context" "fmt" "github.com/awslabs/amazon-qldb-driver-go/v2/qldbdriver" ) driver.Execute(context.Background(), func(txn qldbdriver.Transaction) (interface{}, error) { result, err := txn.Execute("SELECT * FROM testTable WHERE firstName = ?", "Jim") if err != nil { panic(err) } for result.Next(txn) { // User code here to handle results } timingInformation := result.GetTimingInformation() processingTimeMilliseconds := *timingInformation.GetProcessingTimeMilliseconds() fmt.Println(processingTimeMilliseconds) return nil, nil })
Node.js
import { ResultReadable, TimingInformation, TransactionExecutor } from "amazon-qldb-driver-nodejs"; await driver.executeLambda(async (txn: TransactionExecutor) => { const result: ResultReadable = await txn.executeAndStreamResults("SELECT * FROM testTable WHERE firstName = ?", "Jim"); for await (const chunk of result) { // User code here to handle results } const timingInformation: TimingInformation = result.getTimingInformation(); const processingTimeMilliseconds: number = timingInformation.getProcessingTimeMilliseconds(); });
Python
def get_processing_time_milliseconds(transaction_executor): cursor = transaction_executor.execute_statement("SELECT * FROM testTable WHERE firstName = ?", "Jim") for row in cursor: # User code here to handle results pass timing_information = cursor.get_timing_information() processing_time_milliseconds = timing_information.get('ProcessingTimeMilliseconds') qldb_driver.execute_lambda(lambda txn: get_processing_time_milliseconds(txn))

Contoh kode berikut menunjukkan cara mendapatkan waktu pemrosesan dari kursor buffer dari hasil pernyataan. Ini mengembalikan total waktu pemrosesan dari ExecuteStatement dan FetchPage permintaan.

Java
import com.amazon.ion.IonSystem; import com.amazon.ion.IonValue; import com.amazon.ion.system.IonSystemBuilder; import software.amazon.qldb.Result; import software.amazon.qldb.TimingInformation; IonSystem ionSystem = IonSystemBuilder.standard().build(); IonValue ionFirstName = ionSystem.newString("Jim"); Result result = driver.execute(txn -> { return txn.execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); }); TimingInformation timingInformation = result.getTimingInformation(); long processingTimeMilliseconds = timingInformation.getProcessingTimeMilliseconds();
.NET
using Amazon.IonDotnet.Builders; using Amazon.IonDotnet.Tree; using Amazon.QLDB.Driver; using IAsyncResult = Amazon.QLDB.Driver.IAsyncResult; IIonValue ionFirstName = IonLoader.Default.Load("Jim"); IAsyncResult result = await driver.Execute(async txn => { return await txn.Execute("SELECT * FROM testTable WHERE firstName = ?", ionFirstName); }); var timingInformation = result.GetTimingInformation(); var processingTimeMilliseconds = timingInformation?.ProcessingTimeMilliseconds;
catatan

Untuk mengonversi ke kode sinkron, hapus async kata kunci await dan kata kunci, dan ubah IAsyncResult jenisnya menjadiIResult.

Go
import ( "context" "fmt" "github.com/awslabs/amazon-qldb-driver-go/v2/qldbdriver" ) result, err := driver.Execute(context.Background(), func(txn qldbdriver.Transaction) (interface{}, error) { result, err := txn.Execute("SELECT * FROM testTable WHERE firstName = ?", "Jim") if err != nil { return nil, err } return txn.BufferResult(result) }) if err != nil { panic(err) } qldbResult := result.(*qldbdriver.BufferedResult) timingInformation := qldbResult.GetTimingInformation() processingTimeMilliseconds := *timingInformation.GetProcessingTimeMilliseconds() fmt.Println(processingTimeMilliseconds)
Node.js
import { Result, TimingInformation, TransactionExecutor } from "amazon-qldb-driver-nodejs"; const result: Result = await driver.executeLambda(async (txn: TransactionExecutor) => { return await txn.execute("SELECT * FROM testTable WHERE firstName = ?", "Jim"); }); const timingInformation: TimingInformation = result.getTimingInformation(); const processingTimeMilliseconds: number = timingInformation.getProcessingTimeMilliseconds();
Python
cursor = qldb_driver.execute_lambda( lambda txn: txn.execute_statement("SELECT * FROM testTable WHERE firstName = ?", "Jim")) timing_information = cursor.get_timing_information() processing_time_milliseconds = timing_information.get('ProcessingTimeMilliseconds')
catatan

Kursor aliran stateful karena melakukan paginasi pada set hasil. Oleh karena itu, getConsumedIOs dan getTimingInformation operasi mengembalikan metrik yang terakumulasi sejak Anda memanggilnya.

Kursor buffer buffer hasil yang disetel dalam memori dan mengembalikan total metrik akumulasi.

Untuk mempelajari cara menanyakan katalog sistem, lanjutkan keMenanyakan katalog sistem.