توضیحات
عنوان: تحقیق عیب یابی بن بست و رفع مشکلات آن
- مقدمه
- بن بست (Deadlock)
- انواع بن بست (Deadlock) :
- یافتن خودکار بن بست
- پیدا کردن علت بن بست
- Lock-Based Protocols (تکنیک های قفل گذاری)
- Exclusive and Shared Locks
- Lock-Compatibility Matrix
- Pitfalls of Lock-Based Protocols -مشکلات پروتکلهایی که بر پایه قفل گذاری کار می کنند
- Deadlock
- Starvation
- The Two-Phase Locking Protocol (پروتکل قفل گذاری دو مرحله ای)
- Deadlock Handling- راه حل های مشکل بن بست
- Deadlock prevention- پیشگیری از بن بست
- Deadlock Prevention Strategies: Wait-die and Wound-wait
- Deadlock prevention Strategies :Timeout-Based Schemes
- Deadlock Detection
- منابع
مقدمه
امروزه در بعضی مواقع تراکنشهای صورت گرفته بر روی پایگاه های داده دچار مشکل شده و سیستم آن پایگاه در یک حالت قفل شدن قرار گرفته و از انجام فعالیتهای عادی خود باز می ماند که در اصطلاح در حالت بن بستقرار می گیرند. در این مقاله با تحقیق بر روی الگوریتم های تشخیص و رفع بن بست در پایگاه داده و با نگرش صوری سعی در بر طرف کردن این مشکل شده است. یک بن بست زمانی رخ می دهد که دو جلسه (Session) هر یک برای منبعی که دیگری قفل کرده است منتظر باشد ، در این حالت هیچ کدام از آنها نمی توانند ادامه پیدا کنند زیرا دیگری از بدست آوردن منبع مورد نیاز جلوگیری می کند.
بن بست (Deadlock)
یک بن بست زمانی رخ می دهد که دو جلسه (Session) هر یک برای منبعی که دیگری قفل کرده است منتظر باشد ، در این حالت هیچ کدام از آنها نمی توانند ادامه پیدا کنند زیرا دیگری از بدست آوردن منبع مورد نیاز جلوگیری می کند.
توجه داشته باشید هنگامی که یک فرآیند قفلی را بر روی منبعی نگه می دارد دیگر فرآیندها برای بدست آوردن قفل باید تا پایان کار فرآیند اول صبر کنند که این انتظار ساده برای بدست آوردن قفل بن بست نیست .
انواع بن بست (Deadlock) :
دو نوع عمده بن بست می تواند رخ دهد :
۱- چرخه ی بن بست.
۲- تبدیل بن بست .
در شکل زیر که از کتاب آنلاین sql server گرفته شده است ، یک نمونه ای از چرخه ی بن بست را نشان می دهد . تراکنش ۱ آغاز می شود ،یک قفل انحصاری بر روی جدول Supplier بدست می آورد ، و در خواست یک قفل انحصاری برروی جدول part را می دهد.
هم زمان تراکنش ۲ آغاز می شود ، یک قفل انحصاری بر روی جدول partبدست می آورد ، و در خواست یک قفل انحصاری بر روی جدول Supplier را می دهد . هر تراکنش منبع مورد نیاز تراکنش دیگر را نگه داشته است ، در این حالت بن بست رخ می دهد .
ما با استفاده از دستورات زیر می توانیم یک چرخه ی بن بست را تولید کنیم ، در عوض جدول part ، ما از جدول Production.Product و در عوض جدول Supplier ، ما از جدول Purchasing.PurchaseOrderDetail استفاده کرده ایم .
مرحله 1
از پایگاه داده AdventureWorksاستفاده کنید
مرحله2 بر روی اولین اتصال تراکنش زیر را شروع کنید
1
2 3 4 5 6 |
BEGIN TRAN
UPDATE Purchasing .PurchaseOrderDetail SET OrderQty = OrderQty + ۲۰۰ WHERE ProductID = 922 AND PurchaseOrderID = ۴۹۹; GO |
مرحله3 اتصال جدید دیگر را باز کنید و تراکنش زیر را اجرا کنید
1
2 3 4 5 |
BEGIN TRAN
UPDATE Production .Product SET ListPrice = ListPrice * 0.9 WHERE ProductID = 922; GO |
مرحله4 به اتصال مرحله ۲ باز گردید و دستور زیر را اجرا کنید
1
2 3 4 |
UPDATE Production .Product
SET ListPrice = ListPrice * 1.1 WHERE ProductID = 922; GO |
توجه داشته باشید که در این مرحله بن بستی رخ نمی دهد و فقط منتظر بدست آوردن قفل می ماند
- برای دانلود فایل کامل ورد لطفا اقدام به خرید نمایید.
- پس از خرید بلافاصله لینک دانلود فایل برای شما ایمیل خواهد شد
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.