Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membandingkan tingkat isolasi Babelfish dan SQL Server
Di bawah ini adalah beberapa contoh tentang nuansa bagaimana SQL Server dan Babelfish menerapkan tingkat ANSI isolasi.
catatan
Tingkat isolasi
REPEATABLE READ
danSNAPSHOT
sama di Babelfish.Tingkat isolasi
READ UNCOMMITTED
danREAD COMMITTED
sama di Babelfish.
Contoh berikut menunjukkan cara membuat tabel dasar untuk semua contoh yang disebutkan di bawah ini:
CREATE TABLE employee ( id sys.INT NOT NULL PRIMARY KEY, name sys.VARCHAR(255)NOT NULL, age sys.INT NOT NULL ); INSERT INTO employee (id, name, age) VALUES (1, 'A', 10); INSERT INTO employee (id, name, age) VALUES (2, 'B', 20); INSERT INTO employee (id, name, age) VALUES (3, 'C', 30);
Topik
- Babelfish READ UNCOMMITTED dibandingkan dengan tingkat isolasi SQL Server READ UNCOMMITTED
- Babelfish READ COMMITTED dibandingkan dengan tingkat isolasi SQL Server READ COMMITTED
- Babelfish READ COMMITTED dibandingkan dengan tingkat isolasi SQL Server READ COMMITTED SNAPSHOT
- Babelfish REPEATABLE READ dibandingkan dengan tingkat isolasi SQL Server REPEATABLE READ
- Babelfish SERIALIZABLE dibandingkan dengan tingkat isolasi SQL Server SERIALIZABLE
Babelfish READ UNCOMMITTED
dibandingkan dengan tingkat isolasi SQL Server READ UNCOMMITTED
Tabel berikut memberikan rincian tentang pembacaan kotor ketika transaksi bersamaan dieksekusi. Ini menunjukkan hasil yang diamati saat menggunakan tingkat READ UNCOMMITTED
isolasi di SQL Server dibandingkan dengan implementasi Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer READ UNCOMMITTED |
Ikan babelfish READ UNCOMMITTED |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Pembaruan berhasil. |
Pembaruan berhasil. |
Idle pada transaksi |
|
Masukkan berhasil. |
Masukkan berhasil. |
|
Idle pada transaksi |
Transaksi 1 dapat melihat perubahan tanpa komitmen dari transaksi 2. |
Sama seperti |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Melihat perubahan yang dilakukan oleh transaksi 2. |
Melihat perubahan yang dilakukan oleh transaksi 2. |
Babelfish READ COMMITTED
dibandingkan dengan tingkat isolasi SQL Server READ COMMITTED
Tabel berikut memberikan rincian tentang perilaku pemblokiran baca-tulis ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat READ COMMITTED
isolasi di SQL Server dibandingkan dengan implementasi Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer READ COMMITTED |
Ikan babelfish READ COMMITTED |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Pembaruan berhasil. |
Pembaruan berhasil. |
|
Idle pada transaksi |
Langkah diblokir hingga transaksi 2 dilakukan. |
Transaksi 2 perubahan belum terlihat. Update baris dengan id = 3. |
Idle pada transaksi |
|
Transaksi 2 berhasil dilakukan. Transaksi 1 sekarang tidak diblokir dan melihat pembaruan dari transaksi 2. |
Transaksi 2 berhasil dilakukan. |
|
Idle pada transaksi |
Transaksi 1 memperbarui baris dengan id = 1. |
Transaksi 1 memperbarui baris dengan id = 3. |
Babelfish READ COMMITTED
dibandingkan dengan tingkat isolasi SQL Server READ COMMITTED SNAPSHOT
Tabel berikut memberikan rincian tentang perilaku pemblokiran baris yang baru dimasukkan ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat READ COMMITTED SNAPSHOT
isolasi di SQL Server dibandingkan dengan implementasi READ COMMITTED
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer READ COMMITTED SNAPSHOT |
Ikan babelfish READ COMMITTED |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Langkah diblokir sampai transaksi 1 dilakukan. Baris yang dimasukkan dikunci oleh transaksi 1. |
Diperbarui tiga baris. Baris yang baru dimasukkan belum terlihat. |
|
Idle pada transaksi |
Berkomitmen sukses. Transaksi 2 sekarang tidak diblokir. |
Berkomitmen sukses. |
Idle pada transaksi |
|
Semua 4 baris memiliki usia = 99. |
Baris dengan id = 4 memiliki nilai usia 40 karena tidak terlihat oleh transaksi 2 selama kueri pembaruan. Baris lainnya diperbarui ke age=99. |
Babelfish REPEATABLE READ
dibandingkan dengan tingkat isolasi SQL Server REPEATABLE READ
Tabel berikut memberikan rincian tentang perilaku pemblokiran baca-tulis ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat REPEATABLE READ
isolasi di SQL Server dibandingkan dengan implementasi REPEATABLE READ
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer REPEATABLE READ |
Ikan babelfish REPEATABLE READ |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Transaksi 2 diblokir sampai transaksi 1 dilakukan. |
Transaksi 2 berlangsung secara normal. |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Pembaruan dari transaksi 1 terlihat. |
Pembaruan dari transaksi 1 tidak terlihat. |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
melihat pembaruan dari transaksi 1. |
melihat pembaruan dari transaksi 1. |
Tabel berikut memberikan rincian tentang perilaku pemblokiran tulis-tulis ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat REPEATABLE READ
isolasi di SQL Server dibandingkan dengan implementasi REPEATABLE READ
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer REPEATABLE READ |
Ikan babelfish REPEATABLE READ |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Transaksi 2 diblokir. |
Transaksi 2 diblokir. |
|
Idle pada transaksi |
Komit berhasil dan transaksi 2 telah diblokir. |
Komit berhasil dan transaksi 2 gagal dengan kesalahan tidak dapat membuat serial akses karena pembaruan bersamaan. |
Idle pada transaksi |
|
Berkomitmen sukses. |
Transaksi 2 telah dibatalkan. |
Idle pada transaksi |
|
Baris dengan id=1 memiliki TX2 name='a_ '. |
Baris dengan id=1 memiliki TX1 name='a_ '. |
Tabel berikut memberikan rincian tentang perilaku membaca hantu ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat REPEATABLE READ
isolasi di SQL Server dibandingkan dengan implementasi REPEATABLE READ
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer REPEATABLE READ |
Ikan babelfish REPEATABLE READ |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Transaksi 2 berlangsung tanpa pemblokiran. |
Transaksi 2 berlangsung tanpa pemblokiran. |
Idle pada transaksi |
|
Baris yang baru dimasukkan terlihat. |
Baris yang baru dimasukkan terlihat. |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Baris baru yang dimasukkan oleh transaksi 2 terlihat. |
Baris baru yang dimasukkan oleh transaksi 2 tidak terlihat. |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Baris yang baru dimasukkan terlihat. |
Baris yang baru dimasukkan terlihat. |
Tabel berikut memberikan rincian kapan transaksi bersamaan dijalankan dan hasil akhir yang berbeda saat menggunakan tingkat REPEATABLE READ
isolasi di SQL Server dibandingkan dengan implementasi REPEATABLE READ
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer REPEATABLE READ |
Ikan babelfish REPEATABLE READ |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Transaksi 1 memperbarui baris dengan id 1. |
Transaksi 1 memperbarui baris dengan id 1. |
Idle pada transaksi |
|
Transaksi 2 diblokir karena SELECT pernyataan mencoba membaca baris yang dikunci oleh UPDATE kueri dalam transaksi 1. |
Transaksi 2 berlangsung tanpa pemblokiran karena baca tidak pernah diblokir, SELECT pernyataan dijalankan dan akhirnya baris dengan id = 3 diperbarui karena perubahan transaksi 1 belum terlihat. |
Idle pada transaksi |
|
Langkah ini dilakukan setelah transaksi 1 dilakukan. Baris dengan id = 1 diperbarui oleh transaksi 2 pada langkah sebelumnya dan terlihat di sini. |
Baris dengan id = 3 diperbarui oleh Transaksi 2. |
|
Idle pada transaksi |
Transaksi 2 sekarang tidak diblokir. |
Berkomitmen sukses. |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Kedua transaksi mengeksekusi pembaruan pada baris dengan id = 1. |
Baris yang berbeda diperbarui dengan transaksi 1 dan 2. |
Babelfish SERIALIZABLE
dibandingkan dengan tingkat isolasi SQL Server SERIALIZABLE
Tabel berikut memberikan rincian tentang kunci rentang ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat SERIALIZABLE
isolasi di SQL Server dibandingkan dengan implementasi SERIALIZABLE
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer SERIALIZABLE |
Ikan babelfish SERIALIZABLE |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Transaksi 2 diblokir sampai transaksi 1 dilakukan. |
Transaksi 2 berlangsung tanpa pemblokiran. |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Transaksi 1 berhasil dilakukan. Transaksi 2 sekarang tidak diblokir. |
Transaksi 1 berhasil dilakukan. |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Baris yang baru dimasukkan terlihat. |
Baris yang baru dimasukkan terlihat. |
Tabel berikut memberikan rincian kapan transaksi bersamaan dijalankan dan hasil akhir yang berbeda saat menggunakan tingkat SERIALIZABLE
isolasi di SQL Server dibandingkan dengan implementasi SERIALIZABLE
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer SERIALIZABLE |
Ikan babelfish SERIALIZABLE |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Transaksi 1 diblokir sampai transaksi 2 dilakukan. |
Transaksi 1 berlangsung tanpa pemblokiran. |
Idle pada transaksi |
|
Transaksi 2 berhasil dilakukan. Transaksi 1 sekarang tidak diblokir. |
Transaksi 2 berhasil dilakukan. |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Baris yang baru dimasukkan terlihat dengan nilai usia = 99. |
Baris yang baru dimasukkan terlihat dengan nilai usia = 40. |
Tabel berikut memberikan rincian ketika Anda INSERT
ke dalam tabel dengan kendala yang unik. Ini menunjukkan hasil yang diamati saat menggunakan tingkat SERIALIZABLE
isolasi di SQL Server dibandingkan dengan implementasi SERIALIZABLE
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer SERIALIZABLE |
Ikan babelfish SERIALIZABLE |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Transaksi 1 diblokir sampai transaksi 2 dilakukan. |
Transaksi 1 diblokir sampai transaksi 2 dilakukan. |
Idle pada transaksi |
|
Transaksi 2 berhasil dilakukan. Transaksi 1 sekarang tidak diblokir. |
Transaksi 2 berhasil dilakukan. Transaksi 1 dibatalkan dengan kesalahan nilai kunci duplikat melanggar batasan unik. |
|
Idle pada transaksi |
Transaksi 1 berhasil dilakukan. |
Transaksi 1 komit gagal dengan tidak dapat membuat serial akses karena ketergantungan baca atau tulis di antara transaksi. |
|
Idle pada transaksi |
baris (5, 'E', 50) dimasukkan. |
Hanya ada 4 baris. |
Di Babelfish, transaksi bersamaan yang berjalan dengan Isolation Level serializable akan gagal dengan kesalahan anomali serialisasi jika eksekusi transaksi ini tidak konsisten dengan semua kemungkinan eksekusi serial (satu per satu) dari transaksi tersebut.
Tabel berikut memberikan rincian tentang anomali serialisasi ketika transaksi bersamaan dijalankan. Ini menunjukkan hasil yang diamati saat menggunakan tingkat SERIALIZABLE
isolasi di SQL Server dibandingkan dengan implementasi SERIALIZABLE
Babelfish.
Transaksi 1 | Transaksi 2 | SQLServer SERIALIZABLE |
Ikan babelfish SERIALIZABLE |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Transaksi 2 diblokir sampai transaksi 1 dilakukan. |
Transaksi 2 berlangsung tanpa pemblokiran. |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Transaksi 1 berhasil dilakukan. |
Transaksi 1 dilakukan terlebih dahulu dan mampu melakukan komit dengan sukses. |
Idle pada transaksi |
|
Transaksi 2 berhasil dilakukan. |
Komit transaksi 2 gagal dengan kesalahan serialisasi, seluruh transaksi telah dibatalkan. Coba lagi transaksi 2. |
|
Idle pada transaksi |
Perubahan dari kedua transaksi terlihat. |
Transaksi 2 digulirkan kembali. Hanya transaksi 1 perubahan yang terlihat. |
Di Babelfish, anomali serialisasi hanya mungkin terjadi jika semua transaksi bersamaan dijalankan pada tingkat isolasi. SERIALIZABLE
Dalam tabel berikut, mari kita ambil contoh di atas tetapi atur transaksi 2 ke tingkat isolasi REPEATABLE READ
sebagai gantinya.
Transaksi 1 | Transaksi 2 | SQLTingkat isolasi server | Tingkat isolasi babelfish |
---|---|---|---|
|
|
Tidak ada |
Tidak ada |
|
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Tidak ada |
Tidak ada |
Idle pada transaksi |
|
Transaksi 2 diblokir sampai transaksi 1 dilakukan. |
Transaksi 2 berlangsung tanpa pemblokiran. |
Idle pada transaksi |
|
Tidak ada |
Tidak ada |
|
Idle pada transaksi |
Transaksi 1 berhasil dilakukan. |
Transaksi 1 berhasil dilakukan. |
Idle pada transaksi |
|
Transaksi 2 berhasil dilakukan. |
Transaksi 2 berhasil dilakukan. |
|
Idle pada transaksi |
Perubahan dari kedua transaksi terlihat. |
Perubahan dari kedua transaksi terlihat. |