Bagikan melalui


Memahami tingkat isolasi

Unduh driver JDBC

Transaksi menentukan tingkat isolasi yang menentukan bagaimana satu transaksi diisolasi dari transaksi lain. Isolasi adalah pemisahan sumber daya atau modifikasi 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 dikosongkan.

    • Ambil versi berkomitmen dari baris 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 memegang 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 pembacaan 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 yang 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 Baca yang Tidak Dapat Diulang Phantom
Baca tidak dikomit Ya Ya Ya
Pembacaan yang diterapkan Tidak Ya Ya
Pembacaan berulang Tidak Tidak Ya
Snapshot Tidak Tidak Tidak
Serializable Tidak Tidak Tidak

Transaksi harus dijalankan pada tingkat isolasi setidaknya baca yang dapat diulang 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.

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 SQL Server Books Online.

Lihat juga

Melakukan transaksi dengan driver JDBC
ATUR TINGKAT ISOLASI TRANSAKSI (Transact-SQL)