Konsistensi baca untuk penerusan tulis - Amazon Aurora

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

Konsistensi baca untuk penerusan tulis

Anda dapat mengontrol tingkat konsistensi baca di klaster DB. Tingkat konsistensi baca menentukan berapa lama klaster DB menunggu sebelum operasi baca untuk memastikan beberapa atau semua perubahan direplikasi dari penulis. Anda dapat menyesuaikan tingkat konsistensi baca untuk memastikan bahwa semua operasi tulis yang diteruskan dari sesi Anda terlihat dalam klaster DB sebelum kueri berikutnya. Anda juga dapat menggunakan pengaturan ini untuk memastikan kueri pada klaster DB selalu melihat pembaruan terkini dari penulis. Pengaturan ini juga berlaku untuk kueri yang dikirimkan oleh sesi lain atau klaster lainnya. Untuk menentukan jenis perilaku ini untuk aplikasi Anda, pilih nilai untuk parameter DB aurora_replica_read_consistency atau parameter klaster DB.

penting

Selalu atur parameter DB aurora_replica_read_consistency atau parameter klaster DB saat Anda ingin meneruskan penulisan. Jika Anda tidak mengaturnya, Aurora tidak akan meneruskan penulisan. Parameter ini mempunyai nilai kosong secara default, jadi pilih nilai tertentu apabila Anda menggunakan parameter ini. Parameter aurora_replica_read_consistency hanya memengaruhi klaster atau instans DB yang mengaktifkan penerusan tulis.

Saat Anda meningkatkan tingkat konsistensi, aplikasi Anda menghabiskan lebih banyak waktu untuk menunggu perubahan disebarkan di antara instans-instans DB. Anda dapat memilih keseimbangan antara waktu respons yang cepat dan memastikan bahwa perubahan yang dilakukan dalam instans DB lainnya sepenuhnya tersedia sebelum kueri Anda berjalan.

Anda dapat menentukan nilai berikut untuk parameter aurora_replica_read_consistency:

  • EVENTUAL – Hasil operasi tulis dalam sesi yang sama tidak terlihat sampai operasi tulis dilakukan pada instans DB penulis. Kueri tidak menunggu hasil yang diperbarui untuk tersedia. Dengan demikian, kueri dapat mengambil data yang lebih lama atau data yang diperbarui, bergantung pada waktu pernyataan dan jumlah lag replikasi. Ini adalah konsistensi yang sama seperti untuk cluster Aurora My SQL DB yang tidak menggunakan penerusan tulis.

  • SESSION – Semua kueri yang menggunakan penerusan tulis melihat hasil semua perubahan yang dilakukan dalam sesi tersebut. Perubahan dapat dilihat terlepas dari apakah transaksi dilakukan. Jika perlu, kueri menunggu hasil operasi tulis yang diteruskan untuk direplikasi.

  • GLOBAL – Sebuah sesi melihat semua perubahan yang dilakukan di semua sesi dan instans di dalam klaster DB. Setiap kueri mungkin akan menunggu selama periode yang berbeda-beda tergantung jumlah lag sesi. Kueri berlanjut ketika cluster DB up-to-date dengan semua data yang dikomit dari penulis, pada saat kueri dimulai.

Untuk informasi tentang parameter konfigurasi yang terlibat dalam penerusan tulis, lihat Parameter konfigurasi untuk penerusan tulis.

catatan

Anda juga dapat menggunakan aurora_replica_read_consistency sebagai variabel sesi, misalnya:

mysql> set aurora_replica_read_consistency = 'session';

Contoh menggunakan penerusan tulis

Contoh berikut ini menunjukkan efek parameter aurora_replica_read_consistency pada pernyataan INSERT yang berjalan diikuti oleh pernyataan SELECT. Hasilnya dapat berbeda, tergantung nilai aurora_replica_read_consistency dan waktu pernyataan.

Untuk mencapai konsistensi yang lebih tinggi, Anda mungkin menunggu sebentar sebelum mengeluarkan pernyataan SELECT. Atau Aurora dapat secara otomatis menunggu sampai hasil selesai mereplikasi sebelum melanjutkan dengan SELECT.

Untuk informasi tentang cara menetapkan parameter DB, lihat .

contoh dengan aurora_replica_read_consistency diatur ke EVENTUAL

Menjalankan pernyataan INSERT, yang langsung diikuti dengan pernyataan SELECT, memunculkan nilai untuk COUNT(*) dengan jumlah baris sebelum baris baru disisipkan. Dengan menjalankan SELECT lagi beberapa saat kemudian, muncul hitungan baris yang diperbarui. Pernyataan SELECT tidak menunggu.

mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> insert into t1 values (6); select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec)
contoh dengan aurora_replica_read_consistency diatur ke SESSION

Pernyataan SELECT langsung setelah INSERT akan menunggu sampai perubahan dari pernyataan INSERT terlihat. Pernyataan SELECT selanjutnya tidak menunggu.

mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.01 sec) mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1; Query OK, 1 row affected (0.08 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.37 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.00 sec)

Dengan pengaturan konsistensi baca tetap disetel ke SESSION, memperkenalkan waktu tunggu singkat setelah melaksanakan pernyataan INSERT membuat hitungan baris yang diperbarui tersedia pada saat pernyataan SELECT berikutnya berjalan.

mysql> insert into t1 values (6); select sleep(2); select count(*) from t1; Query OK, 1 row affected (0.07 sec) +----------+ | sleep(2) | +----------+ | 0 | +----------+ 1 row in set (2.01 sec) +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.00 sec)
contoh dengan aurora_replica_read_consistency diatur ke GLOBAL

Setiap pernyataan SELECT menunggu sampai semua perubahan data, sejak waktu mulai pernyataan, terlihat sebelum melakukan kueri. Waktu tunggu untuk setiap pernyataan SELECT bervariasi, tergantung jumlah lag replikasi.

mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.75 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.37 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.66 sec)