Halaman ini menjelaskan cara menggunakan isolasi repeatable read di Spanner.
Repeatable read adalah tingkat isolasi yang memastikan bahwa semua operasi baca dalam transaksi melihat snapshot yang konsisten dari database seperti yang ada pada awal transaksi. Di Spanner, tingkat isolasi ini diimplementasikan menggunakan teknik yang juga biasa disebut isolasi snapshot. Pendekatan ini bermanfaat dalam skenario konkurensi baca-tulis tinggi saat banyak transaksi membaca data yang mungkin diubah oleh transaksi lain. Dengan menggunakan snapshot tetap, repeatable read menghindari dampak performa dari tingkat isolasi serialisabel yang lebih ketat. Operasi baca dapat dieksekusi tanpa memperoleh kunci dan tanpa memblokir operasi tulis serentak, yang berpotensi menghasilkan lebih sedikit transaksi yang dibatalkan yang mungkin perlu dicoba lagi karena konflik serialisasi. Untuk mengetahui 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
Kumpulan batasan berikut ada dalam Pratinjau isolasi repeatable read.
- Anda mungkin mengalami masalah jika skema Anda memiliki
batasan pemeriksaan.
- Ada masalah umum yang mencegah batasan pemeriksaan divalidasi, yang dapat mengakibatkan pelanggaran batasan saat transaksi di-commit. Oleh karena itu, sebaiknya jangan gunakan isolasi repeatable read dalam Pratinjau jika skema Anda memiliki batasan pemeriksaan.
- Anda mungkin mengalami masalah jika perubahan skema serentak terjadi di database saat transaksi sedang dieksekusi.
- Jika pernyataan DML Anda menggunakan opsi
last_statementdan perubahan skema serentak terjadi saat pernyataan DML dieksekusi, pernyataan tersebut mungkin akan mencoba ulang secara internal dan menampilkan error yang menyatakan bahwa DML dicoba ulang dengan 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 ulang transaksi setelah perubahan skema diterapkan untuk menyelesaikan 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 menetapkan isolasi repeatable read dalam jenis transaksi ini tidak mengubah perilaku apa pun.
- Anda tidak dapat menetapkan isolasi repeatable read pada operasi hanya baca, sekali pakai, dan partisi menggunakan library klien Spanner. Library klien Spanner tidak akan memiliki opsi untuk menetapkan isolasi repeatable read pada operasi kueri hanya baca, sekali pakai, dan partisi.
Langkah berikutnya
Pelajari lebih lanjut tentang tingkat isolasi.
Pelajari cara menggunakan SELECT FOR UPDATE dalam isolasi repeatable read.
Pelajari lebih lanjut serialisabilitas dan konsistensi eksternal Spanner, lihat TrueTime dan konsistensi eksternal.