Tingkat isolasi transaksi di Babelfish - Amazon Aurora

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

Tingkat isolasi transaksi di Babelfish

Babelfish mendukung tingkat isolasi transaksiREAD UNCOMMITTED, READ COMMITTED dan. SNAPSHOT Mulai dari versi Babelfish 3.4 tingkat isolasi tambahan REPEATABLE READ dan SERIALIZABLE didukung. Semua tingkat isolasi di Babelfish didukung dengan perilaku tingkat isolasi yang sesuai di Postgre. SQL SQL Server dan Babelfish menggunakan mekanisme dasar yang berbeda untuk menerapkan tingkat isolasi transaksi (memblokir untuk akses bersamaan, kunci yang dipegang oleh transaksi, penanganan kesalahan, dll). Dan, ada beberapa perbedaan halus dalam cara akses bersamaan dapat bekerja untuk beban kerja yang berbeda. Untuk informasi selengkapnya tentang SQL perilaku Postgre ini, lihat Isolasi Transaksi.

Ikhtisar tingkat isolasi transaksi

Tingkat isolasi transaksi SQL Server asli didasarkan pada penguncian pesimis di mana hanya satu salinan data yang ada dan kueri harus mengunci sumber daya seperti baris sebelum mengaksesnya. Kemudian, variasi tingkat READ COMMITTED isolasi diperkenalkan. Ini memungkinkan penggunaan versi baris untuk memberikan konkurensi yang lebih baik antara pembaca dan penulis menggunakan akses non-pemblokiran. Selain itu, tingkat isolasi baru yang SNAPSHOT disebut tersedia. Ini juga menggunakan versi baris untuk memberikan konkurensi yang lebih baik daripada tingkat REPEATABLE READ isolasi dengan menghindari kunci bersama pada data baca yang disimpan hingga akhir transaksi.

Tidak seperti SQL Server, semua tingkat isolasi transaksi di Babelfish didasarkan pada Optimistic Locking (). MVCC Setiap transaksi melihat snapshot data baik di awal pernyataan (READ COMMITTED) atau di awal transaksi (REPEATABLE READ,SERIALIZABLE), terlepas dari keadaan saat ini dari data yang mendasarinya. Oleh karena itu, perilaku eksekusi transaksi bersamaan di Babelfish mungkin berbeda dari Server. SQL

Misalnya, pertimbangkan transaksi dengan tingkat isolasi SERIALIZABLE yang awalnya diblokir di SQL Server tetapi berhasil kemudian. Ini mungkin berakhir gagal di Babelfish karena konflik serialisasi dengan transaksi bersamaan yang membaca atau memperbarui baris yang sama. Mungkin juga ada kasus di mana mengeksekusi beberapa transaksi bersamaan menghasilkan hasil akhir yang berbeda di Babelfish dibandingkan dengan Server. SQL Aplikasi yang menggunakan tingkat isolasi, harus diuji secara menyeluruh untuk skenario konkurensi.

Tingkat isolasi di SQL Server Tingkat isolasi babelfish Tingkat isolasi postgre SQL Komentar

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTEDsama seperti READ COMMITTED di Babelfish atau Postgre SQL

READ COMMITTED

READ COMMITTED

READ COMMITTED

SQLServer READ COMMITTED berbasis penguncian pesimis, Babelfish READ COMMITTED berbasis snapshot (). MVCC

READ COMMITTED SNAPSHOT

READ COMMITTED

READ COMMITTED

Keduanya berbasis snapshot (MVCC) tetapi tidak persis sama.

SNAPSHOT

SNAPSHOT

REPEATABLE READ

Persis sama.

REPEATABLE READ

REPEATABLE READ

REPEATABLE READ

SQLServer REPEATABLE READ berbasis penguncian pesimis, Babelfish REPEATABLE READ berbasis snapshot (). MVCC

SERIALIZABLE

SERIALIZABLE

SERIALIZABLE

SQLServer SERIALIZABLE adalah isolasi pesimis, Babelfish SERIALIZABLE berbasis snapshot (). MVCC

catatan

Petunjuk tabel saat ini tidak didukung dan perilakunya dikendalikan dengan menggunakan palka pelarian Babelfish yang telah ditentukan sebelumnya. escape_hatch_table_hints

Menyiapkan tingkat isolasi transaksi

Gunakan perintah berikut untuk mengatur tingkat isolasi transaksi:

SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }

Mengaktifkan atau menonaktifkan tingkat isolasi transaksi

Tingkat isolasi transaksi REPEATABLE READ dan dinonaktifkan SERIALIZABLE secara default di Babelfish dan Anda harus mengaktifkannya secara eksplisit dengan menyetel babelfishpg_tsql.isolation_level_serializable atau babelfishpg_tsql.isolation_level_repeatable_read escape hatch untuk digunakan. pg_isolation sp_babelfish_configure Untuk informasi selengkapnya, lihat Mengelola penanganan kesalahan Babelfish dengan escape hatch.

Di bawah ini adalah contoh untuk mengaktifkan atau menonaktifkan penggunaan REPEATABLE READ dan SERIALIZABLE dalam sesi saat ini dengan mengatur lubang keluar masing-masing. Secara opsional sertakan server parameter untuk mengatur escape hatch untuk sesi saat ini serta untuk semua sesi baru berikutnya.

Untuk mengaktifkan penggunaan SET TRANSACTION ISOLATION LEVEL REPEATABLE READ dalam sesi saat ini saja.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation'

Untuk mengaktifkan penggunaan SET TRANSACTION ISOLATION LEVEL REPEATABLE READ dalam sesi saat ini dan semua sesi baru yang diakibatkannya.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation', 'server'

Untuk menonaktifkan penggunaan SET TRANSACTION ISOLATION LEVEL REPEATABLE READ dalam sesi saat ini dan konsekuen sesi baru.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'off', 'server'

Untuk mengaktifkan penggunaan SET TRANSACTION ISOLATION LEVEL SERIALIZABLE dalam sesi saat ini saja.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation'

Untuk mengaktifkan penggunaan SET TRANSACTION ISOLATION LEVEL SERIALIZABLE dalam sesi saat ini dan semua sesi baru yang diakibatkannya.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation', 'server'

Untuk menonaktifkan penggunaan SET TRANSACTION ISOLATION LEVEL SERIALIZABLE dalam sesi saat ini dan konsekuen sesi baru.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'off', 'server'