Pemecahan masalah Amazon QLDB - 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.

Pemecahan masalah Amazon QLDB

Bagian berikut ini menyediakan daftar agregat kesalahan umum yang mungkin Anda alami ketika menggunakan Amazon QLDB, dan panduan cara untuk memecahkan masalah tersebut.

Untuk panduan pemecahan masalah khusus untuk akses IAM, lihatMemecahkan masalah identitas dan akses QLDB Amazon.

Untuk praktik terbaik untuk menyetel pernyataan PartiQL Anda, lihatMengoptimalkan kinerja kueri.

Menjalankan transaksi menggunakan driver QLDB

Bagian ini mencantumkan pengecualian umum yang dapat dikembalikan oleh driver Amazon QLDB saat Anda menggunakannya untuk menjalankan transaksi PartiQL pada buku besar. Untuk informasi selengkapnya tentang fitur ini, lihat Memulai dengan driver. Untuk praktik terbaik dalam mengonfigurasi dan menggunakan driver, lihatRekomendasi pengemudi.

Setiap pengecualian mencakup pesan kesalahan tertentu, diikuti dengan deskripsi singkat dan saran untuk solusi yang mungkin.

CapacityExceededException

Pesan: Kapasitas terlampaui

Amazon QLDB menolak permintaan karena melebihi kapasitas pemrosesan buku besar. QLDB memberlakukan batas skala internal per buku besar untuk menjaga kesehatan dan kinerja layanan. Batas ini bervariasi tergantung pada ukuran beban kerja setiap permintaan individu. Misalnya, permintaan dapat memiliki beban kerja yang meningkat jika melakukan transaksi data yang tidak efisien, seperti pemindaian tabel yang dihasilkan dari kueri non-indeks yang memenuhi syarat.

Kami menyarankan Anda menunggu sebelum mencoba ulang permintaan. Jika aplikasi Anda secara konsisten menemukan pengecualian ini, optimalkan pernyataan Anda dan kurangi tingkat dan volume permintaan yang Anda kirim ke buku besar. Contoh optimasi pernyataan termasuk menjalankan lebih sedikit pernyataan per transaksi dan menyetel indeks tabel Anda. Untuk mempelajari cara mengoptimalkan pernyataan dan menghindari pemindaian tabel, lihatMengoptimalkan kinerja kueri.

Kami juga merekomendasikan menggunakan versi terbaru dari driver QLDB. Driver memiliki kebijakan coba ulang default yang menggunakan Exponential Backoff dan Jitter untuk secara otomatis mencoba lagi pengecualian seperti ini. Konsep backoff eksponensial adalah menggunakan waktu tunggu yang semakin lama antara percobaan ulang untuk respons kesalahan berturut-turut.

InvalidSessionException

Pesan: Transaksi TransactionID telah kedaluwarsa

Transaksi melebihi masa maksimumnya. Transaksi dapat berjalan hingga 30 detik sebelum dilakukan. Setelah batas batas waktu ini, setiap pekerjaan yang dilakukan pada transaksi ditolak, dan QLDB membuang sesi. Batas ini melindungi klien dari sesi bocor dengan memulai transaksi dan tidak melakukan atau membatalkannya.

Jika ini adalah pengecualian umum dalam aplikasi Anda, kemungkinan transaksi hanya membutuhkan waktu terlalu lama untuk dijalankan. Jika runtime transaksi memakan waktu lebih dari 30 detik, optimalkan laporan Anda untuk mempercepat transaksi. Contoh optimasi pernyataan termasuk menjalankan lebih sedikit pernyataan per transaksi dan menyetel indeks tabel Anda. Untuk informasi selengkapnya, lihat Mengoptimalkan kinerja kueri.

InvalidSessionException

Pesan: Session sessionId telah kedaluwarsa

QLDB dibuang sesi karena melebihi total seumur hidup maksimum. QLDB membuang sesi setelah 13-17 menit, terlepas dari transaksi aktif. Sesi dapat hilang atau terganggu karena sejumlah alasan, seperti kegagalan perangkat keras, kegagalan jaringan, atau restart aplikasi. Jadi, QLDB memberlakukan seumur hidup maksimum pada sesi untuk memastikan bahwa perangkat lunak klien tangguh terhadap kegagalan sesi.

Jika Anda menemukan pengecualian ini, kami sarankan Anda memperoleh sesi baru dan mencoba kembali transaksi. Kami juga merekomendasikan penggunaan driver QLDB versi terbaru, yang mengelola kumpulan sesi dan kesehatannya atas nama aplikasi.

InvalidSessionException

Pesan: Tidak ada sesi seperti itu

Klien mencoba untuk bertransaksi dengan QLDB menggunakan sesi yang tidak ada. Dengan asumsi bahwa klien menggunakan sesi yang sebelumnya ada, sesi mungkin tidak lagi ada karena salah satu dari berikut ini:

  • Jika sesi terlibat dalam kegagalan server internal (yaitu, kesalahan dengan kode respons HTTP 500), QLDB mungkin memilih untuk membuang sesi sepenuhnya, daripada memungkinkan pelanggan untuk bertransaksi dengan sesi keadaan tidak pasti. Kemudian, setiap percobaan ulang pada sesi itu gagal dengan kesalahan ini.

  • Sesi kedaluwarsa akhirnya dilupakan oleh QLDB. Kemudian, setiap upaya untuk terus menggunakan sesi mengakibatkan kesalahan ini, bukan awalInvalidSessionException.

Jika Anda menemukan pengecualian ini, kami sarankan Anda memperoleh sesi baru dan mencoba kembali transaksi. Kami juga merekomendasikan penggunaan driver QLDB versi terbaru, yang mengelola kumpulan sesi dan kesehatannya atas nama aplikasi.

RateExceededException

Pesan: Tarif terlampaui

QLDB mencekik klien berdasarkan identitas penelepon. QLDB memberlakukan throttling pada basis per wilayah, per akun menggunakan algoritma throttling token bucket. QLDB melakukan ini untuk membantu kinerja layanan, dan untuk memastikan penggunaan yang adil bagi semua pelanggan QLDB. Misalnya, mencoba memperoleh sejumlah besar sesi bersamaan menggunakanStartSessionRequest operasi dapat menyebabkan pelambatan.

Untuk menjaga kesehatan aplikasi Anda dan mengurangi pelambatan lebih lanjut, Anda dapat mencoba lagi pengecualian ini menggunakan Exponential Backoff dan Jitter. Konsep backoff eksponensial adalah menggunakan waktu tunggu yang semakin lama antara percobaan ulang untuk respons kesalahan berturut-turut. Sebaiknya gunakan versi terbaru dari driver QLDB. Driver memiliki kebijakan coba ulang default yang menggunakan backoff eksponensial dan jitter untuk secara otomatis mencoba lagi pengecualian seperti ini.

Versi terbaru dari driver QLDB juga dapat membantu jika aplikasi Anda secara konsisten mendapatkan throttled oleh QLDB untukStartSessionRequest panggilan. Pengemudi mempertahankan kumpulan sesi yang digunakan kembali di seluruh transaksi, yang dapat membantu mengurangi jumlahStartSessionRequest panggilan yang dibuat aplikasi Anda. Untuk meminta peningkatan batas pembatasan API, hubungi AWS SupportPusat.

LimitExceededException

Pesan: Melebihi batas sesi

Buku besar melebihi kuota (juga dikenal sebagai batas) pada jumlah sesi aktif. Kuota ini didefinisikan dalamKuota dan batasan di Amazon QLDB. Jumlah sesi aktif buku besar pada akhirnya konsisten, dan buku besar secara konsisten berjalan di dekat kuota mungkin secara berkala melihat pengecualian ini.

Untuk menjaga kesehatan aplikasi Anda, kami sarankan untuk mencoba kembali pengecualian ini. Untuk menghindari pengecualian ini, pastikan bahwa Anda belum mengkonfigurasi lebih dari 1.500 sesi bersamaan untuk digunakan untuk buku besar tunggal di semua klien. Misalnya, Anda dapat menggunakan maxConcurrentTransactionsmetode driver Amazon QLDB untuk Java untuk mengonfigurasi jumlah maksimum sesi yang tersedia dalam instance driver.

QldbClientException

Pesan: Hasil streaming hanya berlaku saat transaksi induk terbuka

Transaksi ditutup, dan tidak dapat digunakan untuk mengambil hasil dari QLDB. Transaksi ditutup saat transaksi dilakukan atau dibatalkan.

Pengecualian ini terjadi ketika klien bekerja secara langsung denganTransaction objek, dan itu mencoba untuk mengambil hasil dari QLDB setelah melakukan atau membatalkan transaksi. Untuk mengurangi masalah ini, klien harus membaca data sebelum menutup transaksi.

Mengekspor data jurnal

Bagian ini mencantumkan pengecualian umum yang dapat dikembalikan QLDB saat Anda mengekspor data jurnal dari buku besar ke bucket Amazon S3. Untuk informasi selengkapnya tentang fitur ini, lihat Mengekspor data jurnal dari Amazon QLDB.

Setiap pengecualian mencakup pesan kesalahan tertentu, diikuti dengan deskripsi singkat dan saran untuk solusi yang mungkin.

AccessDeniedException

Pesan: Pengguna: UserArn tidak diizinkan untuk melakukan: iam:PassRole pada sumber daya: roleARN

Anda tidak memiliki izin untuk meneruskan sebuah peran IAM ke layanan QLDB. QLDB memerlukan peran untuk semua permintaan ekspor jurnal, dan Anda harus memiliki izin untuk meneruskan peran ini ke QLDB. Peran ini memberikan izin tulis kepada QLDB di bucket Amazon S3 yang Anda tentukan.

Pastikan Anda menentukan kebijakan IAM yang memberikan izin untuk melakukan operasiPassRole API pada sumber daya peran IAM yang Anda tentukan untuk layanan QLDB (qldb.amazonaws.com). Untuk contoh kebijakan, lihatContoh kebijakan berbasis identitas untuk Amazon QLDB.

IllegalArgumentException

Pesan: QLDB mengalami kesalahan memvalidasi konfigurasi S3: errorCode errorMessage

Kemungkinan penyebab kesalahan ini adalah bucket Amazon S3 yang disediakan tidak ada di Amazon S3. Atau, QLDB tidak memiliki izin yang cukup untuk menulis objek ke dalam bucket Amazon S3 yang Anda tentukan.

Pastikan nama bucket S3 yang Anda berikan dalam permintaan pekerjaan ekspor sudah benar. Untuk informasi selengkapnya tentang penamaan bucket, lihat Pembatasan dan batasan Bucket dalam Panduan Pengguna Amazon Simple Storage Service.

Juga, verifikasi bahwa Anda menentukan kebijakan untuk bucket yang ditentukan yang memberikanPutObject danPutObjectAcl izin ke layanan QLDB (qldb.amazonaws.com). Untuk mempelajari selengkapnya, lihat Izin ekspor.

IllegalArgumentException

Pesan: Respons tak terduga dari Amazon S3 saat memvalidasi konfigurasi S3. Tanggapan dari S3: errorCode errorMessage

Upaya untuk menulis data ekspor jurnal ke bucket S3 yang disediakan gagal dengan respons kesalahan Amazon S3 yang disediakan. Untuk informasi selengkapnya tentang kemungkinan penyebabnya, lihat Pemecahan Masalah Amazon S3 di Panduan Pengguna Amazon Simple Storage Service.

IllegalArgumentException

Pesan: Awalan bucket Amazon S3 tidak boleh melebihi 128 karakter

Awalan yang disediakan dalam permintaan ekspor jurnal berisi lebih dari 128 karakter.

IllegalArgumentException

Pesan: Tanggal mulai tidak boleh lebih besar dari tanggal akhir

BaikInclusiveStartTime danExclusiveEndTime harus berada dalam format tanggal dan waktu ISO 8601 dan dalam Waktu Universal Terkoordinasi (UTC).

IllegalArgumentException

Pesan: Tanggal akhir tidak bisa di masa future

KeduanyaInclusiveStartTime danExclusiveEndTime harus dalam formatISO 8601 tanggal dan waktu dan di UTC.

IllegalArgumentException

Pesan: Pengaturan enkripsi objek yang disediakan (S3EncryptionConfiguration) tidak kompatibel dengan kunciAWS Key Management Service (AWS KMS)

Anda menyediakanKMSKeyArn denganObjectEncryptionType salah satuNO_ENCRYPTION atauSSE_S3. Anda hanya dapat menyediakan pelanggan yang dikelolaAWS KMS key untuk jenis enkripsi objekSSE_KMS. Untuk mempelajari lebih lanjut tentang opsi enkripsi sisi server di Amazon S3, lihat Melindungi data menggunakan enkripsi sisi server dalam Panduan Pengembang Amazon S3.

LimitExceededException

Pesan: Melebihi batas 2 secara bersamaan menjalankan pekerjaan ekspor Jurnal

QLDB memberlakukan batas default dari dua pekerjaan ekspor jurnal bersamaan.

Streaming data jurnal

Bagian ini mencantumkan pengecualian umum yang dapat dikembalikan QLDB saat Anda melakukan streaming data jurnal dari buku besar ke Amazon Kinesis Data Streams. Untuk informasi selengkapnya tentang fitur ini, lihat Streaming data jurnal dari Amazon QLDB.

Setiap pengecualian mencakup pesan kesalahan tertentu, diikuti dengan deskripsi singkat dan saran untuk solusi yang mungkin.

AccessDeniedException

Pesan: Pengguna: UserArn tidak diizinkan untuk melakukan: iam:PassRole pada sumber daya: roleARN

Anda tidak memiliki izin untuk meneruskan sebuah peran IAM ke layanan QLDB. QLDB memerlukan peran untuk semua permintaan aliran jurnal, dan Anda harus memiliki izin untuk meneruskan peran ini ke QLDB. Peran ini memberi QLDB izin tulis di sumber daya Amazon Kinesis Data Streams yang Anda tentukan.

Pastikan Anda menentukan kebijakan IAM yang memberikan izin untuk melakukan operasiPassRole API pada sumber daya peran IAM yang Anda tentukan untuk layanan QLDB (qldb.amazonaws.com). Untuk contoh kebijakan, lihatContoh kebijakan berbasis identitas untuk Amazon QLDB.

IllegalArgumentException

Pesan: QLDB mengalami kesalahan saat memvalidasi Kinesis Data Streams: Respons dari Kinesis: errorCode errorMessage

Kemungkinan penyebab kesalahan ini adalah sumber daya Kinesis Data Streams yang disediakan tidak ada. Atau, QLDB tidak memiliki cukup izin untuk menulis catatan data ke aliran data Kinesis yang Anda tentukan.

Pastikan bahwa aliran data Kinesis yang Anda berikan dalam permintaan stream sudah benar. Untuk informasi selengkapnya, lihat Membuat dan memperbarui aliran data dalam Panduan Developer Amazon Kinesis Data Streams.

Juga, verifikasi bahwa Anda menentukan kebijakan untuk aliran data Kinesis yang ditentukan yang memberikan izin layanan (qldb.amazonaws.com) QLDB ke tindakan berikut. Untuk informasi selengkapnya, lihat Izin streaming.

  • kinesis:PutRecord

  • kinesis:PutRecords

  • kinesis:DescribeStream

  • kinesis:ListShards

IllegalArgumentException

Pesan: Respons tak terduga dari Kinesis Data Streams saat memvalidasi konfigurasi Kinesis. Tanggapan dari Kinesis: errorCode errorMessage

Upaya untuk menulis catatan data ke aliran data Kinesis yang disediakan gagal dengan respons kesalahan Kinesis yang disediakan. Untuk informasi selengkapnya tentang kemungkinan penyebabnya, lihat Pemecahan masalah produsen Amazon Kinesis Data Streams dalam Panduan Developer Amazon Kinesis Data Streams.

IllegalArgumentException

Pesan: Tanggal mulai tidak boleh lebih besar dari tanggal akhir.

BaikInclusiveStartTime danExclusiveEndTime harus berada dalam format tanggal dan waktu ISO 8601 dan dalam Waktu Universal Terkoordinasi (UTC).

IllegalArgumentException

Pesan: Tanggal mulai tidak dapat di masa future.

KeduanyaInclusiveStartTime danExclusiveEndTime harus dalam formatISO 8601 tanggal dan waktu dan di UTC.

LimitExceededException

Pesan: Melampaui batas 5 secara bersamaan menjalankan aliran Jurnal ke Kinesis Data Streams

QLDB memberlakukan batas default lima aliran jurnal bersamaan.

Memverifikasi data jurnal

Bagian ini mencantumkan pengecualian umum yang dapat dikembalikan QLDB saat Anda memverifikasi data jurnal dalam buku besar. Untuk informasi selengkapnya tentang fitur ini, lihat Verifikasi data di Amazon QLDB.

Setiap pengecualian menyertakan pesan kesalahan tertentu, diikuti oleh operasi API yang dapat membuangnya, deskripsi singkat, dan saran untuk kemungkinan solusi.

IllegalArgumentException

Pesan: Nilai Ion yang disediakan tidak valid dan tidak dapat diurai.

Operasi API:GetDigest, GetBlock, GetRevision

Pastikan Anda memberikan nilai Amazon Ion yang valid sebelum mencoba ulang permintaan Anda.

IllegalArgumentException

Pesan: Alamat blok yang disediakan tidak valid.

Operasi API:GetDigest, GetBlock, GetRevision

Pastikan Anda memberikan alamat pemblokiran yang valid sebelum mencoba ulang permintaan Anda. Alamat blok adalah struktur Amazon Ion yang memiliki dua bidang:strandId dansequenceNo.

Misalnya: {strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

IllegalArgumentException

Pesan: Nomor urut alamat tip intisari yang disediakan berada di luar catatan komitmen terbaru untai.

Operasi API:GetDigest, GetBlock, GetRevision

Alamat tip intisari yang Anda berikan harus memiliki nomor urut kurang dari atau sama dengan nomor urut catatan berkomitmen terbaru untai jurnal. Sebelum mencoba ulang permintaan Anda, pastikan Anda memberikan alamat tip intisari dengan nomor urut yang valid.

IllegalArgumentException

Pesan: ID Strand dari alamat blok yang disediakan tidak valid.

Operasi API:GetDigest, GetBlock, GetRevision

Alamat blok yang Anda berikan harus memiliki ID untai yang cocok dengan ID untai jurnal. Sebelum mencoba ulang permintaan Anda, pastikan Anda memberikan alamat pemblokiran dengan ID untai yang valid.

IllegalArgumentException

Pesan: Nomor urut alamat blok yang disediakan berada di luar catatan komitmen terbaru untai.

Operasi API:GetBlock, GetRevision

Alamat blok yang Anda berikan harus memiliki nomor urut kurang dari atau sama dengan nomor urut catatan berkomitmen terbaru untai. Sebelum mencoba ulang permintaan Anda, pastikan Anda memberikan alamat pemblokiran dengan nomor urut yang valid.

IllegalArgumentException

Pesan: Strand ID dari alamat blok yang disediakan harus sesuai dengan ID Strand dari alamat tip intisari yang disediakan.

Operasi API:GetBlock, GetRevision

Anda hanya dapat memverifikasi revisi atau memblokir dokumen jika ada di untaian jurnal yang sama dengan intisari yang Anda berikan.

IllegalArgumentException

Pesan: Nomor urut alamat blok yang disediakan tidak boleh lebih besar dari nomor urut alamat tip intisari yang disediakan.

Operasi API:GetBlock, GetRevision

Anda hanya dapat memverifikasi revisi atau memblokir dokumen jika dicakup oleh intisari yang Anda berikan. Ini berarti bahwa itu berkomitmen untuk jurnal sebelum alamat tip mencerna.

IllegalArgumentException

Pesan: ID Dokumen yang disediakan tidak ditemukan di blok di alamat blok yang ditentukan.

Operasi API:GetRevision

ID dokumen yang Anda berikan harus ada di alamat blok yang Anda berikan. Sebelum mencoba ulang permintaan Anda, pastikan kedua parameter ini konsisten.