Umumiy blokirovka(shared lock)
Faqat o`qish uchun resursni (sahifa yoki qator) zaxiraga oladi. Boshqa jarayonlar shu tarzda qulflangan resursni o`zgartira olmaydi, biroq, boshqa tomondan, bir nechta jarayonlar parallel bitta resursda umumiy blokirovkaga ega bo'lishi mumkin. Boshqacha qilib aytganda, bir nechta jarayonlar birgalikda blokirovka qilingan resursni o`qishi mumkin.
Monopol blokirovka (exclusive lock)
Tranzaksiyada monopol foydalanish uchun sahifa yoki qatorni qulflaydi. Ushbu turdagi blokirovkalar resurslarni o`zgartiradigan DML instruksiyalar (INSERT, UPDATE va DELETE) tomonidan qo`llaniladi. Monopol blokirovkaga ega bo'lgan resursda (sahifa yoki qator) boshqa hech qanday blokirovka o'rnatilishi mumkin emas.
O`zgatirish blokirovkasi (update lock)
Resursda faqat boshqa o`zgarish blokirovkasi yoki monopol blokirovka bo'lmasa o'rnatilishi mumkin. Shu bilan bir qatorda, ushbu turdagi blokirovka ochiq blokirovkalar o'rnatilgan resurslarda o'rnatilishi mumkin. Bunday holda, o`zgartirish blokirovkasi resursga boshqa umumiy qulfni joylashtiradi. Agar resursni o`zgartiradigan tranzaksiya ishga tushsa va resursda boshqa qulflar bo'lmasa, o`zgartirish blokirovkasi monopol blokirovkaga aylantiriladi. Resursda faqat bitta o`zgartirish blokirovkasi bo'lishi mumkin.
O`zaro blokirovkalar
O`zaro blokirovkalar (Deadlock) - bu bir vaqtning o`zida ikkita tranzaksiya bir-birini blokirovka qiladigan maxsus parallel murojaat muammosi. Xususan, birinchi tranzaksiya boshqa tranzaksiya murojaat qilmoqchi bo’lgan ma`lumotlar bazasi ob`yektini bloklaydi va aksincha. (Umuman olganda, Deadlock ga bir nechta tranzaksiyalar sabab bo'lishi mumkin.) Quyidagi misolda ikkita tranzaktsiyaning o`zaro blokirovkasi holati ko`rsatilgan:
USE SampleDb;
BEGIN TRANSACTION BEGIN TRANSACTION
UPDATE Works_on UPDATE Employee
SET Job = 'Menedjer' SET DepartamentNumber = 'd2'
WHERE EmpId = 25348 WHERE Id = 28559
AND ProjectNumber = 'p2'
WAITFOR DELAY '00:00:10' WAITFOR DELAY '00:00:10'
UPDATE Employee DELETE FROM Works_on
SET LastName = 'Frolova' WHERE EmpId = 25348
WHERE Id = 28559 AND ProjectNumber = 'p2'
COMMIT COMMIT
Izolyatsiya darajalari
Izolyatsiya darajalaridan foydalanib, ma’lumotlar bazasiga parallel murojaatda qaysi muammolar yuzaga kelishi mumkinligini va qaysi birining oldini olish kerakligini belgilash mumkin. Database Engine komponenti ma`lumotlarga parallel murojaat qilishni boshqaradigan quyidagi beshta izolyatsiya darajasini qo`llab-quvvatlaydi:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
SNAPSHOT
Izolyasiya darajasi SET instruksiyasining TRANSACTION ISOLATION LEVEL parametri orqali o’rnatiladi
Do'stlaringiz bilan baham: |