Kontrol Konkurensi
Konkurensi adalah kemampuan dua transaksi untuk menggunakan data yang sama secara bersamaan, dan dengan peningkatan isolasi transaksi biasanya berkurang konkurensinya. Ini karena isolasi transaksi biasanya diimplementasikan dengan mengunci baris, dan karena lebih banyak baris terkunci, lebih sedikit transaksi yang dapat diselesaikan tanpa diblokir setidaknya untuk sementara oleh baris terkunci. Meskipun konkurensi yang berkurang umumnya diterima sebagai trade-off untuk tingkat isolasi transaksi yang lebih tinggi yang diperlukan untuk menjaga integritas database, itu dapat menjadi masalah dalam aplikasi interaktif dengan aktivitas baca/tulis tinggi yang menggunakan kursor.
Misalnya, aplikasi menjalankan pernyataan SQL SELECT * FROM Orders. Ini memanggil SQLFetchScroll untuk menggulir di sekitar kumpulan hasil dan memungkinkan pengguna untuk memperbarui, menghapus, atau menyisipkan pesanan. Setelah pengguna memperbarui, menghapus, atau menyisipkan pesanan, aplikasi melakukan transaksi.
Jika tingkat isolasi adalah Repeatable Read, transaksi mungkin - tergantung pada cara penerapannya - kunci setiap baris yang dikembalikan oleh SQLFetchScroll. Jika tingkat isolasi Dapat Diserialisasikan, transaksi mungkin mengunci seluruh tabel Pesanan. Dalam kedua kasus, transaksi melepaskan kuncinya hanya ketika dilakukan atau digulung balik. Jadi jika pengguna menghabiskan banyak waktu membaca pesanan dan sangat sedikit waktu memperbarui, menghapus, atau memasukkannya, transaksi dapat dengan mudah mengunci sejumlah besar baris, membuatnya tidak tersedia untuk pengguna lain.
Ini adalah masalah bahkan jika kursor baca-saja dan aplikasi memungkinkan pengguna untuk membaca pesanan yang ada saja. Dalam hal ini, aplikasi melakukan transaksi, dan melepaskan kunci, ketika memanggil SQLCloseCursor (dalam mode penerapan otomatis) atau SQLEndTran (dalam mode penerapan manual).
Bagian ini berisi topik berikut.