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. 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.
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:
-
Buka QLDB konsol Amazon di https://console.aws.amazon.com/qldb.
-
Di panel navigasi, pilih editor PartiQL.
-
Pilih buku besar dari daftar dropdown buku besar.
-
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.
-
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:
-
Di panel navigasi, pilih Kueri terbaru di bawah editor PartiQL.
-
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;
});
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;
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')
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.
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.
Untuk mendapatkan informasi waktu pernyataan dengan menggunakan QLDB konsol, lakukan langkah-langkah berikut:
-
Buka QLDB konsol Amazon di https://console.aws.amazon.com/qldb.
-
Di panel navigasi, pilih editor PartiQL.
-
Pilih buku besar dari daftar dropdown buku besar.
-
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.
-
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:
-
Di panel navigasi, pilih Kueri terbaru di bawah editor PartiQL.
-
Kolom Waktu eksekusi (ms) menampilkan informasi waktu ini untuk setiap pernyataan.
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;
});
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;
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')
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.