Saya mencoba untuk menemukan beberapa informasi tentang pemblokiran dalam SQL Server, tetapi saya tidak dapat menemukan penjelasan singkat untuk apa itu dan bagaimana hal itu terjadi. Bisakah Anda mencerahkan saya?
sumber
Saya mencoba untuk menemukan beberapa informasi tentang pemblokiran dalam SQL Server, tetapi saya tidak dapat menemukan penjelasan singkat untuk apa itu dan bagaimana hal itu terjadi. Bisakah Anda mencerahkan saya?
Analogi
Terkadang membantu menggunakan analogi yang jauh dari komputer.
Katakanlah Anda punya bola dan dua anak. Hanya satu anak yang dapat memiliki bolanya pada satu waktu. Namun, jika salah satu dari anak-anak mendapatkan bola dan tidak melepaskannya karena dia terganggu (menonton TV, misalnya), maka anak yang lain tidak akan bisa bermain dengan bola.
Anak yang lain diblokir dari sumber itu.
Jika kita membandingkan ini dengan TV, misalnya, beberapa anak dapat menonton TV pada satu titik.
Kunci
Jika kita pindah ke dunia basis data, kita melihat bahwa ada berbagai cara untuk menggunakan sumber daya (seperti dua contoh di atas). Kita dapat melakukan "membaca" atau kita dapat melakukan "menulis".
Ketika kami ingin membaca data, tidak ada alasan orang lain tidak dapat membaca data juga - seperti dua orang yang menonton TV. Namun, jika kita ingin menulis data, maka kita perlu memastikan bahwa tidak ada orang lain yang melihatnya. Jika mereka membacanya saat kami sedang menulisnya, mereka akan mendapatkan "kotor" bacaan. (Artinya, mereka akan melihat data yang sebagian ditulis, yang tidak valid.)
Untuk memastikan bahwa pembacaan kotor ini tidak pernah terjadi, kami memiliki dua jenis kunci utama, Baca Kunci dan Kunci Eksklusif.
Baca Kunci
Anda dapat memiliki beberapa koneksi berbeda yang membaca dari sumber data yang sama pada waktu tertentu. Tetapi untuk memastikan bahwa tidak ada yang mengubah data saat mereka membacanya, mereka mengeluarkan Kunci Baca.
Setelah koneksi memiliki kunci baca pada sepotong data, semua koneksi lain harus menunggu sampai Kunci Baca dirilis sebelum mereka dapat menulis data. Namun, yang lain dapat mengambil Baca Kunci mereka sendiri pada sepotong data yang sama.
Kunci Eksklusif
Jika koneksi ingin memperbarui / memasukkan / menghapus data, mereka harus mengeluarkan kunci eksklusif. Ini mencegah koneksi lain dari juga mengeluarkan kunci pada data (membuat kunci eksklusif untuk koneksi itu).
Ketika suatu koneksi memiliki kunci eksklusif pada data, tidak ada koneksi lain dapat membaca dari data. Ini membantu mencegah pembacaan kotor dengan memastikan bahwa tidak ada yang dapat membaca data saat sedang ditulis.
Pemblokiran
"Memblokir" hanyalah sebuah istilah yang berarti bahwa satu koneksi memegang kunci pada sumber daya ketika koneksi lain ingin membaca atau menulis padanya. Itu tidak selalu berarti bahwa koneksi pemilik tidak akan melepaskannya, hanya saja itu saat ini menahannya.
Bandingkan ini dengan kasing anak yang memegang bola. Anak yang memegang bola menghalangi semua anak lain dari memegang bola.
Jalan buntu
Saya tahu Anda tidak menanyakan hal ini, tetapi hanya satu langkah lagi untuk mencapai kebuntuan (dan ini terkait langsung dengan pemblokiran).
Kebuntuan dapat terjadi ketika Anda memiliki dua koneksi yang masing-masing memiliki kunci, tetapi mereka menginginkan satu sama lain sumber daya. Dalam skenario ini, seperti dua anak yang masing-masing memiliki bola, tetapi menginginkan bola yang lain.
Seperti anak-anak, koneksi ini tidak mau berbagi sama sekali. Setiap koneksi membutuhkan akses ke kedua sumber daya untuk melanjutkan. Namun, mereka dalam keadaan memblokir permanen. Dalam keadaan ini, orang tua (DBMS) harus datang dan memilih seorang pecundang sehingga salah satu anak (koneksi) dapat memiliki akses ke kedua sumber daya.
Setelah koneksi "menang" selesai, ia melepaskan sumber daya dan kemudian koneksi lainnya ("kehilangan") dapat mencoba lagi untuk mencapai kedua sumber tersebut.
Jadi, konsep kebuntuan adalah di mana Anda memiliki dua sumber daya yang saling menghalangi.
Di sini , Anda dapat membaca lebih lanjut tentang semua jenis kunci yang ditawarkan SQL Server dan berbagai sumber daya yang dapat menyebabkan pemblokiran / kebuntuan. Artikel ini sudah tua, tetapi masih berlaku untuk SQL Server 2000 hingga 2008 R2. (Ada beberapa jenis kunci yang ditambahkan ke versi SQL Server yang lebih baru, tetapi itu akan memberi Anda titik awal.)
Penjelasan hebat dari Richard, tetapi hanya ingin menambahkan tautan ke dokumentasi resmi. Topik-topik ini ditulis untuk SQL Server 2000, tetapi banyak konsep tetap sama hari ini:
Memahami dan Menghindari Pemblokiran
Memahami Mengunci di SQL Server
Edit - beberapa tambahan:
Five Ways to Fight Blocking Video - video yang sangat segar dari Kendra Little (diterbitkan hari ini)
DBA sebagai Detektif: Mengatasi Masalah Penguncian dan Pemblokiran - oleh Rodney Landrum
Bagaimana Mengidentifikasi Masalah Pemblokiran dengan SQL Profiler - oleh Brad McGehee
Ketiga adalah penulis SQL Server dan / atau MVP yang sangat terkenal.
sumber