Memahami tingkat isolasi
Transaksi menentukan tingkat isolasi yang menentukan bagaimana satu transaksi diisolasi dari transaksi lain. Isolasi adalah pemisahan modifikasi sumber daya atau data yang dilakukan oleh transaksi yang berbeda. Tingkat isolasi dijelaskan di mana efek samping konkurensi diizinkan, seperti bacaan kotor atau bacaan phantom.
Tingkat isolasi transaksi mengontrol efek berikut:
Apakah kunci diambil saat data dibaca, dan jenis kunci apa yang diminta.
Berapa lama kunci baca ditahan.
Apakah operasi baca mereferensikan baris yang dimodifikasi oleh transaksi lain:
Blokir hingga kunci eksklusif pada baris dibesarkan.
Ambil versi baris yang diterapkan yang ada pada saat pernyataan atau transaksi dimulai.
Baca modifikasi data yang tidak dikomit.
Memilih tingkat isolasi
Memilih tingkat isolasi transaksi tidak memengaruhi kunci yang diperoleh untuk melindungi modifikasi data. Transaksi selalu mendapatkan kunci eksklusif pada data apa pun yang dimodifikasinya. Ini menahan kunci itu sampai transaksi selesai, apa pun tingkat isolasi yang ditetapkan untuk transaksi tersebut. Untuk operasi baca, tingkat isolasi transaksi terutama menentukan bagaimana operasi dilindungi dari efek transaksi lain.
Tingkat isolasi yang lebih rendah meningkatkan kemampuan banyak pengguna untuk mengakses data secara bersamaan. Tetapi meningkatkan jumlah efek konkurensi, seperti bacaan kotor atau pembaruan yang hilang, yang mungkin dilihat pengguna. Sebaliknya, tingkat isolasi yang lebih tinggi mengurangi jenis efek konkurensi yang mungkin dilihat pengguna. Tetapi membutuhkan lebih banyak sumber daya sistem dan meningkatkan kemungkinan satu transaksi akan memblokir transaksi lain. Memilih tingkat isolasi yang sesuai tergantung pada penyeimbangan persyaratan integritas data aplikasi terhadap overhead setiap tingkat isolasi.
Tingkat isolasi tertinggi, dapat diserialisasikan, menjamin bahwa transaksi akan mengambil data yang sama persis setiap kali mengulangi operasi baca. Tetapi menggunakan tingkat penguncian yang kemungkinan berdampak pada pengguna lain dalam sistem multi-pengguna. Tingkat isolasi terendah, baca tidak dikomit, dapat mengambil data yang telah dimodifikasi tetapi tidak dilakukan oleh transaksi lain. Semua efek samping konkurensi dapat terjadi dalam baca yang tidak dikomit, namun tidak ada penguncian baca atau penerapan versi, sehingga overhead diminimalkan.
Keterangan
Tabel berikut menunjukkan efek samping konkurensi yang diizinkan oleh tingkat isolasi yang berbeda.
Tingkat Isolasi | Bacaan Kotor | Bacaan Yang Tidak Dapat Diulang | Hantu |
---|---|---|---|
Baca tidak dikomit | Ya | Ya | Ya |
Pembacaan yang diterapkan | Tidak | Ya | Ya |
Pembacaan berulang | Tidak | No | Ya |
Snapshot | Tidak | No | Tidak |
Serializable | Tidak | No | Tidak |
Transaksi harus dijalankan pada tingkat isolasi dari setidaknya bacaan berulang untuk mencegah pembaruan yang hilang yang dapat terjadi ketika dua transaksi masing-masing mengambil baris yang sama. Transaksi kemudian memperbarui baris berdasarkan nilai yang awalnya diambil. Jika dua transaksi memperbarui baris menggunakan satu pernyataan UPDATE dan tidak mendasarkan pembaruan pada nilai yang diambil sebelumnya, pembaruan yang hilang tidak dapat terjadi pada tingkat isolasi default yang diterapkan baca.
Untuk mengatur tingkat isolasi untuk transaksi, Anda dapat menggunakan metode setTransactionIsolation dari kelas SQLServerConnection . Metode ini menerima nilai int sebagai argumennya, yang didasarkan pada salah satu konstanta koneksi seperti dalam hal berikut:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Untuk menggunakan tingkat isolasi rekam jepret baru SQL Server, Anda dapat menggunakan salah SQLServerConnection
satu konstanta:
con.setTransactionIsolation(SQLServerConnection.TRANSACTION_SNAPSHOT);
atau Anda dapat menggunakan:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED + 4094);
Untuk informasi selengkapnya tentang tingkat isolasi SQL Server, lihat "Tingkat Isolasi di Mesin Database" di Buku SQL Server Online.
Lihat juga
Melakukan transaksi dengan driver JDBC
ATUR TINGKAT ISOLASI TRANSAKSI (Transact-SQL)