Mendapatkan statistik pernyataan PartiQL - Amazon Quantum Ledger Database (Amazon QLDB)

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

Mendapatkan statistik pernyataan PartiQL

Amazon QLDB menyediakan statistik eksekusi pernyataan yang dapat membantu Anda mengoptimalkan penggunaan QLDB dengan menjalankan pernyataan PartiQL yang lebih efisien. QLDB mengembalikan statistik ini bersama dengan hasil pernyataan. Ini mencakup 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 pada konsol QLDB, shell QLDB, dan versi terbaru dari driver QLDB untuk semua bahasa yang 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 yang dibaca. Jika jumlah permintaan I/O baca lebih tinggi dari yang diharapkan, ini menunjukkan bahwa pernyataan tersebut tidak dioptimalkan, seperti kurangnya indeks. Kami menyarankan Anda meninjauPola kueri optimal topik sebelumnya, Mengoptimalkan kinerja kueri.

catatan

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

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

Menggunakan konsol QLDB

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

  1. Buka konsol Amazon QLDB 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 keyboardCtrl +Enter untuk Windows, atauCmd +Return untuk macOS. Untuk pintasan keyboard lainnya, lihatPintasan keyboard editor PartiQL.

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

Anda juga dapat melihat I/O 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 driver QLDB

Untuk mendapatkan penggunaan I/O pernyataan dengan menggunakan driver QLDB, memanggilgetConsumedIOs operasi kursor aliran hasil atau kursor buffered.

Contoh kode berikut menunjukkan bagaimana untuk mendapatkan 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 mengkonversi ke kode sinkron, menghapusawait danasync kata kunci, dan mengubahIAsyncResult jenis untukIResult.

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 bagaimana untuk mendapatkan membaca I/Os dari kursor buffered dari hasil pernyataan. Ini mengembalikan total membaca I/Os dariExecuteStatement danFetchPage 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 mengkonversi ke kode sinkron, menghapusawait danasync kata kunci, dan mengubahIAsyncResult jenis untukIResult.

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 paginasi hasil set. Oleh karena itu,getConsumedIOs dangetTimingInformation operasi mengembalikan akumulasi metrik dari waktu yang Anda panggil mereka.

Kursor buffer buffer hasil diatur dalam memori dan mengembalikan total akumulasi metrik.

Informasi waktu

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

Menggunakan konsol QLDB

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

  1. Buka konsol Amazon QLDB 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 keyboardCtrl +Enter untuk Windows, atauCmd +Return untuk macOS. Untuk pintasan keyboard lainnya, lihatPintasan keyboard editor PartiQL.

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

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

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

  2. Waktu Eksekusi (ms) kolom menampilkan informasi waktu ini untuk setiap pernyataan.

Menggunakan driver QLDB

Untuk mendapatkan informasi waktu pernyataan dengan menggunakan driver QLDB, panggilgetTimingInformation operasi kursor aliran hasil atau kursor buffer.

Contoh kode berikut menunjukkan bagaimana untuk 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 mengkonversi ke kode sinkron, menghapusawait danasync kata kunci, dan mengubahIAsyncResult jenis untukIResult.

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 bagaimana untuk mendapatkan waktu pemrosesan dari kursor buffered dari hasil pernyataan. Ini mengembalikan total waktu pemrosesan dariExecuteStatement danFetchPage 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 mengkonversi ke kode sinkron, menghapusawait danasync kata kunci, dan mengubahIAsyncResult jenis untukIResult.

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 paginasi hasil set. Oleh karena itu,getConsumedIOs dangetTimingInformation operasi mengembalikan akumulasi metrik dari waktu yang Anda panggil mereka.

Kursor buffer buffer hasil diatur dalam memori dan mengembalikan total akumulasi metrik.

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