Kebuntuan yang didistribusikan di Aurora SQL Postgre Limitless Database - Amazon Aurora

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.

Kebuntuan terdistribusi pada dua transaksi terdistribusi.

Transaksi mengunci tabel dan membuat acara tunggu di dua pecahan sebagai berikut:

  1. Transaksi terdistribusi 1:

    UPDATE table SET value = 1 WHERE key = 'shard1_key';

    Ini memegang kunci pada pecahan 1.

  2. Transaksi terdistribusi 2:

    UPDATE table SET value = 2 WHERE key = 'shard2_key';

    Ini memegang kunci pada pecahan 2.

  3. Transaksi terdistribusi 1:

    UPDATE table SET value = 3 WHERE key = 'shard2_key';

    Transaksi terdistribusi 1 sedang menunggu di shard 2.

  4. Transaksi terdistribusi 2:

    UPDATE table SET value = 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