Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Kebuntuan yang didistribusikan di Aurora SQL Postgre Limitless Database
Dalam grup pecahan DB, kebuntuan dapat terjadi antara transaksi yang didistribusikan di antara berbagai router dan pecahan. Misalnya, dua transaksi terdistribusi bersamaan yang menjangkau dua pecahan dijalankan, seperti yang ditunjukkan pada gambar berikut.
Transaksi mengunci tabel dan membuat acara tunggu di dua pecahan sebagai berikut:
-
Transaksi terdistribusi 1:
UPDATE
table
SETvalue
= 1 WHERE key = 'shard1_key
';Ini memegang kunci pada pecahan 1.
-
Transaksi terdistribusi 2:
UPDATE
table
SETvalue
= 2 WHERE key = 'shard2_key
';Ini memegang kunci pada pecahan 2.
-
Transaksi terdistribusi 1:
UPDATE
table
SETvalue
= 3 WHERE key = 'shard2_key
';Transaksi terdistribusi 1 sedang menunggu di shard 2.
-
Transaksi terdistribusi 2:
UPDATE
table
SETvalue
= 4 WHERE key = 'shard1_key
';Transaksi terdistribusi 2 sedang menunggu di shard 1.
Dalam skenario ini, baik shard 1 maupun shard 2 tidak melihat masalah: transaksi 1 sedang menunggu transaksi 2 pada shard 2, dan transaksi 2 sedang menunggu transaksi 1 pada shard 1. Dari pandangan global, transaksi 1 sedang menunggu transaksi 2, dan transaksi 2 sedang menunggu transaksi 1. Situasi di mana dua transaksi pada dua pecahan berbeda menunggu satu sama lain disebut kebuntuan terdistribusi.
Aurora Postgre SQL Limitless Database dapat mendeteksi dan menyelesaikan kebuntuan terdistribusi secara otomatis. Router dalam grup pecahan DB diberitahu ketika transaksi menunggu terlalu lama untuk memperoleh sumber daya. Router yang menerima notifikasi mulai mengumpulkan informasi yang diperlukan dari semua router dan pecahan dalam grup pecahan DB. Router kemudian melanjutkan untuk mengakhiri transaksi yang berpartisipasi dalam kebuntuan terdistribusi, sampai sisa transaksi dalam grup shard DB dapat dilanjutkan tanpa diblokir satu sama lain.
Anda menerima kesalahan berikut ketika transaksi Anda adalah bagian dari kebuntuan terdistribusi, dan kemudian diakhiri oleh router:
ERROR: aborting transaction participating in a distributed deadlock
Parameter cluster rds_aurora.limitless_distributed_deadlock_timeout
DB menetapkan waktu untuk setiap transaksi untuk menunggu sumber daya sebelum memberi tahu router untuk memeriksa kebuntuan terdistribusi. Anda dapat meningkatkan nilai parameter jika beban kerja Anda kurang rentan terhadap situasi kebuntuan. Defaultnya adalah 1000
milidetik (1 detik).
Siklus kebuntuan terdistribusi dipublikasikan ke SQL log Postgre ketika kebuntuan lintas-simpul ditemukan dan diselesaikan. Informasi tentang setiap proses yang merupakan bagian dari kebuntuan meliputi:
-
Node koordinator yang memulai transaksi
-
ID transaksi virtual (xid) dari transaksi pada node koordinator, dalam format
backend_id
/backend_local_xid
-
ID sesi transaksi yang didistribusikan