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
Topik
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 |
---|---|---|---|
|
|
|
|
|
|
|
SQLServer |
|
|
|
Keduanya berbasis snapshot (MVCC) tetapi tidak persis sama. |
|
|
|
Persis sama. |
|
|
|
SQLServer |
|
|
|
SQLServer |
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'