Halaman ini menjelaskan cara menggunakan isolasi baca yang dapat diulang di Spanner.
Repeatable read adalah tingkat isolasi yang memastikan bahwa semua operasi baca dalam transaksi melihat snapshot database yang konsisten sebagaimana adanya pada awal transaksi. Di Spanner, tingkat isolasi ini diterapkan menggunakan teknik yang juga biasa disebut snapshot isolation. Pendekatan ini bermanfaat dalam skenario konkurensi baca-tulis tinggi di mana banyak transaksi membaca data yang mungkin sedang diubah oleh transaksi lain. Dengan menggunakan snapshot tetap, bacaan yang dapat diulang menghindari dampak performa dari tingkat isolasi yang dapat diserialisasi dan lebih ketat. Operasi baca dapat dieksekusi tanpa memperoleh kunci dan tanpa memblokir operasi tulis serentak, sehingga berpotensi mengurangi jumlah transaksi yang dibatalkan yang mungkin perlu dicoba lagi karena konflik serialisasi. Untuk informasi selengkapnya, lihat Ringkasan tingkat isolasi.
Menetapkan tingkat isolasi
Anda dapat menetapkan tingkat isolasi pada transaksi baca-tulis di tingkat klien database atau tingkat transaksi menggunakan metode berikut:
Library klien
Go
Java
Node.js
Python
REST
Anda dapat menggunakan
TransactionOptions.isolation_level
REST API untuk menetapkan tingkat isolasi pada transaksi baca-tulis dan hanya baca
di tingkat transaksi. Opsi yang valid adalah
TransactionOptions.SERIALIZABLE dan TransactionOptions.REPEATABLE_READ. Secara
default, Spanner menetapkan tingkat isolasi ke isolasi
serialisabel.
Batasan
Serangkaian batasan berikut ada dalam Pratinjau isolasi baca yang dapat diulang.
- Anda mungkin mengalami masalah jika skema Anda memiliki
batasan pemeriksaan.
- Ada masalah umum yang mencegah validasi batasan pemeriksaan, yang dapat menyebabkan pelanggaran batasan saat transaksi di-commit. Oleh karena itu, sebaiknya Anda tidak menggunakan isolasi baca yang dapat diulang di Pratinjau jika skema Anda memiliki batasan pemeriksaan.
- Anda mungkin mengalami masalah jika perubahan skema serentak terjadi di database Anda saat transaksi sedang dieksekusi.
- Jika pernyataan DML Anda menggunakan opsi
last_statementdan perubahan skema serentak terjadi saat pernyataan DML dijalankan, pernyataan DML tersebut mungkin mencoba lagi secara internal dan menampilkan error yang menyatakan bahwa DML dicoba lagi secara salah setelah opsilast_statementditetapkan. Mencoba ulang transaksi setelah perubahan skema diterapkan akan menyelesaikan masalah ini. - Jika permintaan dalam transaksi mengalami error
DEADLINE_EXCEEDEDdari klien, coba lagi transaksi setelah perubahan skema diterapkan untuk mengatasi masalah.
- Jika pernyataan DML Anda menggunakan opsi
Kasus penggunaan yang tidak didukung
- Anda tidak dapat menetapkan isolasi repeatable read pada transaksi DML yang dipartisi.
- Semua transaksi hanya baca sudah beroperasi pada snapshot tetap dan tidak memerlukan kunci, sehingga menyetel isolasi repeatable read dalam jenis transaksi ini tidak mengubah perilaku apa pun.
- Anda tidak dapat menyetel isolasi baca yang dapat diulang pada operasi hanya baca, sekali pakai, dan partisi menggunakan library klien Spanner. Library klien Spanner tidak akan memiliki opsi untuk menyetel isolasi baca yang dapat diulang pada operasi kueri hanya baca, sekali pakai, dan partisi.
Langkah berikutnya
Pelajari lebih lanjut tingkat isolasi.
Pelajari cara menggunakan SELECT FOR UPDATE dalam isolasi baca yang dapat diulang.
Untuk mempelajari lebih lanjut serialisabilitas dan konsistensi eksternal Spanner, lihat TrueTime dan konsistensi eksternal.