View a markdown version of this page

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 PostgreSQL. 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 perilaku PostgreSQL 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 SQL Server.

Misalnya, pertimbangkan transaksi dengan tingkat isolasi SERIALIZABLE yang awalnya diblokir di SQL Server tetapi berhasil nanti. 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 SQL Server. Aplikasi yang menggunakan tingkat isolasi, harus diuji secara menyeluruh untuk skenario konkurensi.

Tingkat isolasi di SQL Server Tingkat isolasi babelfish Tingkat isolasi PostgreSQL Komentar

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTED

READ UNCOMMITTEDsama seperti READ COMMITTED di Babelfish atau PostgreSQL

READ COMMITTED

READ COMMITTED

READ COMMITTED

SQL Server READ COMMITTED berbasis penguncian pesimis, Babelfish berbasis snapshot (READ COMMITTEDMVCC).

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

SQL Server REPEATABLE READ berbasis penguncian pesimis, Babelfish berbasis snapshot (REPEATABLE READMVCC).

SERIALIZABLE

SERIALIZABLE

SERIALIZABLE

SQL Server SERIALIZABLE adalah isolasi pesimis, Babelfish berbasis snapshot (SERIALIZABLEMVCC).

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:

contoh
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.

contoh
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.

contoh
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.

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

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

contoh
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.

contoh
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.

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