

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
<a name="babelfish-transaction"></a>

Babelfish mendukung tingkat isolasi transaksi`READ 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.](https://www.postgresql.org/docs/current/transaction-iso.html) 

**Topics**
+ [Ikhtisar tingkat isolasi transaksi](#babelfish-transaction.overview)
+ [Menyiapkan tingkat isolasi transaksi](#babelfish-transaction.setting)
+ [Mengaktifkan atau menonaktifkan tingkat isolasi transaksi](#babelfish-transaction.enabling)
+ [Membandingkan tingkat isolasi Babelfish dan SQL Server](babelfish-transaction.examples.md)

## Ikhtisar tingkat isolasi transaksi
<a name="babelfish-transaction.overview"></a>

 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 UNCOMMITTED`sama seperti `READ COMMITTED` di Babelfish atau PostgreSQL  | 
|  `READ COMMITTED`  |  `READ COMMITTED`  |  `READ COMMITTED`  |  SQL Server `READ COMMITTED` berbasis penguncian pesimis, Babelfish berbasis snapshot (`READ COMMITTED`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`  |  SQL Server `REPEATABLE READ` berbasis penguncian pesimis, Babelfish berbasis snapshot (`REPEATABLE READ`MVCC).  | 
|  `SERIALIZABLE`  |  `SERIALIZABLE`  |  `SERIALIZABLE`  |  SQL Server `SERIALIZABLE` adalah isolasi pesimis, Babelfish berbasis snapshot (`SERIALIZABLE`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
<a name="babelfish-transaction.setting"></a>

Gunakan perintah berikut untuk mengatur tingkat isolasi transaksi:

**Example**  

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

## Mengaktifkan atau menonaktifkan tingkat isolasi transaksi
<a name="babelfish-transaction.enabling"></a>

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](babelfish-strict.md).

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. 

**Example**  

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

**Example**  

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

**Example**  

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

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

**Example**  

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

**Example**  

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

**Example**  

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