توجه: در این تکنیک پس از برداشتن قفل، حق قفل مجدد وجود ندارد.
-
- قضیه: پروتکل ۲PL توالیپذیری تعارضی را تضمین میکند و نیازی به آزمون توالیپذیری نیست. (این موضوع اثبات شده است و یک قضیهی مهم میباشد.)
-
- لحظه یا نقطه قفل: لحظه درست قبل از برداشتن اولین قفل را لحظه یا نقطه قفل میگویند. لازم به ذکر است که Unlock الزاماً آخرین دستور تراکنش نیست. در شکل ۳-۲، پروتکل ۲PL و لحظه قفل را مشاهده مینمایید.
لحظه قفل
آغاز
بسط
قبض
زمان
پایان
قفل
شکل ۳-۲- پروتکل ۲PL و لحظه قفل
مشکلات تداخل کنترل نشده
-
-
- نتیجه از دست رفته[۳۴]: مشکل نتیجه از دست رفته زمانی رخ میدهد که تراکنشی، بلافاصله بعد از تراکنش دیگری که مقداری را برای دادهای نوشته، مقدار جدیدی را برای همان داده بنویسد.
-
-
- خواندن داده ناجور[۳۵]: داده ناجور دادهای است که توسط تراکنشی که هنوز به مرحله تثبیت نرسیده، نوشته شده باشد. نحوهی ایجاد داده ناجور به این صورت است که تراکنشی مثل T2 مقدار موقتِ بههنگام درآمده توسط تراکنشی مثل T1 را بخواند. حال اگر تراکنش T1 دچار نقص شود آنگاه تراکنش T2 داده ناجور خوانده است. به مشکل خواندن داده ناجور، مشکل وابستگی به تراکنش تثبیت نشده، نیز میگویند.
-
- تحلیل ناسازگار[۳۶]: به مشکل تحلیل ناسازگار، مشکل حاصل جمع نادرست، نیز میگویند. زمان بروز مشکل، زمانی است که تراکنش T1 دو مقدار دادهی D1 و D2 را بههنگام میکند و تراکنش T2 یکی از این دادهها مثلاً D1 را پس از بههنگامسازی میخواند و مقدار دیگری مثلاً D2 را پیش از بههنگامسازی میخواند.
-
- خواندن تکرار نشدنی[۳۷]: به مشکل خواندن تکرار نشدنی، مشکل فازی، هم گفته میشود. زمان بروز مشکل زمانی است که تراکنشی مثل T1 بخواهد دادهی D1 را دوباره بخواند، اما دادهی D1 توسط تراکنش T2 بههنگام شده و نتیجه عمل آن تثبیت گردیده لذا تراکنش T1 دیگر نمیتواند مثل قبل دادهی D1 را بخواند.
خصوصیات و مشکلات ۲PL مبنایی
-
- تضعیف همروندی: فرض کنید تراکنش T روی دادهی D1 قفل دارد. اگر تراکنش T درخواست قفل روی دادهی D2 راداشته باشد، نمیتواند قفل را از روی دادهی D1 بردارد، حتی اگر کارش با دادهی D1 تمام شده باشد. به عبارت دیگر، اگر تراکنش دیگری به D1 نیاز داشته باشد باید منتظر بماند، حتی اگر تراکنش T کارش با دادهی D1 تمام شده باشد. در نتیجه، پردازشِ تراکنش، با کارایی بالا، در این روش وجود ندارد.
-
- طرد تسلسلی: طرد تسلسلی زمانی رخ میدهد که اگر یک تراکنش طرد شود، سلسلهای از تراکنشهای دیگر هم طرد شوند. مشکل طرد تسلسلی نامطلوب بوده و در صورت بروز، برای سیستم بیشکاری دارد.
-
- بنبست: مشکل بنبست زمانی رخ میدهد که حداقل دو تراکنش منتظرند تا دیگری از داده مورد نیاز، قفل بردارد. اگر تراکنشی دچار بنبست شود مرتباً به عنوان قربانی انتخاب شده و طرد میشود و هرگز اجرای آن تمام نمیشود. در مورد بنبست در بخش ۳-۳، به طور کامل توضیح خواهیم داد و برای رفع مشکل بنبست، در بخشهای ۳-۳-۲-۱ و ۳-۳-۲-۲ به معرفی دو الگوریتم WD و WW خواهیم پرداخت.
-
- محرومیت: محرومیت زمانی رخ میدهد که تراکنش برای مدت نامحدودی نتواند اجرا شود ولی تراکنشهای دیگر به طور عادی اجرا شوند و اولویت اجرا به سایر تراکنشها داده شود و تراکنش محروم نتواند قفلی را از سیستم دریافت نماید.
تغییر قفل در پروتکل ۲PL
در مرحله بسط، تقویت و در مرحله قبض، تضعیف قفل را داریم. لازم به ذکر است که این امکان وجود دارد که تراکنشی که درخواست تقویت قفل دارد ناچار به انتظار باشد چرا که ممکن است داده مورد نظرش توسط تراکنش دیگری قفل اشتراکی شده باشد.
تأثیرعملیات درج در کنترل همروندی
عمل درج با عملیات حذف، خواندن و نوشتن تعارض دارد. با ۲PL، اگر تراکنش Ti عمل درج D را انجام دهد، به Ti روی داده درج شده یک قفل انحصاری داده میشود.
تأثیرعملیات حذف در کنترل همروندی
اگر Ii=DE(D) یک دستورالعمل برای حذف داده D باشد. آنگاه یکی از سه حالت کلی زیر رخ خواهد داد.
-
- اگر Ij=R(D) یا Ij=W(D) باشد یعنی Ij دستوری برای خواندن یا نوشتن داده D باشد؛ در این صورت Ii و Ij تعارض دارند. اگر Ii قبل از Ij بیاید، در تراکنش Tj اشتباه منطقی بروز میکند. اگر Ij قبل از Ii بیاید، تراکنش Ti میتواند عمل W(D) یا R(D) را با موفقیت انجام دهد.
-
- اگر Ij=DE(D) باشد یعنی Ij یک دستورالعمل برای حذف D باشد؛ در این صورت Ii و Ij تعارض دارند. اگر Ii قبل از Ij بیاید، در Tj اشتباه منطقی بروز میکند. اگر Ij قبل از Ii بیاید، در Ti اشتباه منطقی رخ میدهد.
-
- اگر Ij=IT(D) باشد یعنی Ij یک دستورالعمل برای درج داده D باشد؛ در این صورت Ii و Ij تعارض دارند. فرض میکنیم داده D قبل از اجرای Ii و Ij وجود نداشته باشد، اگر Ii قبل از Ij بیاید، در Tj اشتباه منطقی بروز میکند. اگر Ij قبل ازIi بیاید، اشتباهی پیش نمیآید.
اگر از ۲PL استفاده شود، قبل از انجام عمل حذف D، یک قفل انحصاری روی D لازم است.
بنبست
در قفلگذاری، به میزان چشمگیری خطر بروز بنبست وجود دارد. بنبست حالتی است که در آن حداقل دو تراکنش منتظر هستند تا فقره دادهای را قفل را کنند که دیگری روی آن قفل ناهمایند دارد و هنوز قفلگشایی نکرده است. در شکل ۳-۳، نمونهای از نحوه رخ دادن بنبست را مشاهده مینمایید. در این شکل مشاهده میشود که تراکنش T1 بر روی داده D1 قفل X دارد. این تراکنش در خواست قفل X بر روی داده D2 را دارد اما نمیتواند آن را دریافت کند و به حالت انتظار میرود، زیرا تراکنش T2 بر روی D2 قفل دارد. از سمت دیگر تراکنش T2 نیز به حالت انتظار رفته است، زیرا درخواست قفل X بر روی داده D1 را دارد که در اختیار T1 است. به این ترتیب هردو تراکنش منتظر یکدیگر هستند و در حالت انتظار رفتهاند.
T1
T2
زمان
LOCK-X(D1)
LOCK-X(D2)
LOCK-X(D2)