Transcript تکنيک های قفل گذاری
Slide 1
کنترل همروندی()1
)(Concurrency Control
مدرس :دکتر فاطمه احمدی آبکناری
بهار 1392
Slide 2
تکنيک های کنترل همروندی
اجرای همروند تراکنش ها باعث افزايش کارايی سيستم می شود .از طرف ديگر هر مدل اجرای همروندی از تراکنش
ها صحيح نيست و مدلی درست است که قابليت سريال شدن داشته باشد .از اين رو برای تضمين قابليت سريال
شدن تراکنش های درگير در يک اجرای همروند ،از تکنيک های کنترل همروندی استفاده می شود که عبارتند از:
Locking Techniques
(تکنيک های قفل گذاری)
Timestamping Technique
(تکنيک ُمهر زمانی)
Multiversioning Technique
(تکنيک چند نسخه سازی)
Certification Technique
(تکنيک تاييد)
تکنيک های کنترل همروندی به دو دسته ی تکنيک های بدبينانه ( )Pessimisticو تکنيک های خوشبينانه
( )Optimisticتقسيم می شوند .تکنيک های قفل گذاری ماهيت بدبينانه دارند حال آنکه ساير تکنيک ها به
صورت خوشبينانه عمل می کنند.
2
Slide 3
تکنيک های قفل گذاری
قفل ( )Lockبر روی يک آيتم يا يک قلم داده ای به معنی مجوز دستيابی يک تراکنش به آن قلم داده ای است
که توسط زير سيستم قفل گذاری در سيستم مديريت پايگاه داده ها به تراکنش ها اعطا شده ( )Grantو يا از آنها
بازپس گرفته می شود .بنابراين می توان گفت که قفل بر روی يک واحد داده ای ،متغيری است که وضع آن واحد
داده ای را نسبت به عمل قابل انجام بر روی آن ( Readيا )Writeمشخص می کند.
اندازه ی واحد قفل شدنی ( )Lock Granularityدر سيستم های مختلف متفاوت است .يک واحد داده ای
قفل پذير می تواند يک رکورد ،فيلد ،جدول (رابطه) ،يک بالک ،يک فايل و يا تمام پايگاه داده باشد .اگرچه در
بعض ی از سيستم ها از چند اندازه برای واحد قفل شدنی استفاده می شود .همچنين اندازه ی واحد قفل شدنی
گاهی می تواند به صورت پويا تغيير کند .ريزی اين واحد را می توان ارتقا ( )Lock Escalationداد و به عنوان
مثال قفل در سطح تاپل را به قفل در سطح رابطه تبديل کرد.
در صورت کوچک بودن اندازه ی واحد قفل شدنی ،تعداد واحد ها در سيستم زياد و سربار سيستم که ناش ی از
مديريت قفل هاست نيز افزايش می يابد .در اين صورت ميزان همروندی تراکنش ها افزايش يافته و احتمال تداخل
آنها کاهش می يابد.
3
Slide 4
تکنيک های قفل گذاری
ساختار قفل :اين ساختار شامل فيلد های شناسه ی قفل ،نوع قفل (متناظر با عمليات مورد نظر) ،مقدار قفل
(مقدار مجاز که گاه به صورت باينری است) و شناسه ی تراکنش (که قفل به آن اعطا می شود) می باشد.
در سيستم مديريت پايگاه داده ،مدير قفل ( )Lock Managerکه قفل ها را در اختيار تراکنش ها می گذارد و يا
از آنها بازپس می گيرد ممکن است قفل ها را به صورت ايستا و يا پويا در اختيار تراکنش ها قرار دهد .در حالت
پويا ،مدير قفل به اعطای قفل به تراکنش در صورت درخواست تراکنش در حين اجرای آن اقدام می نمايد در
صورتيکه در حالت ايستا ،قفل های مورد نياز قبل از اجرای يک تراکنش شناخته شده و توسط مدير قفل اعطا
می شود.
انواع قفل :قفل ها در حالت کلی به دودسته ی قفل دوگانی ( )Binary Lockو قفل چند حالتی (Multi-
)mode Lockتقسيم می شوند .نوع خاص ديگری از قفل تحت عنوان چفت ( )Latchوجود دارد که تنها
برای زمان کوتاهی گذاشته می شود مانند چفت بر روی يک صفحه در زمان انتقال آن صفحه از بافر به ديسک.
تکنيک های ديگر قفل گذاری شامل قفل گذاری دو فازی ،قفل گذاری چند سطحی و قفل گذاری چند نسخه ای
هستند.
4
Slide 5
قفل دوگانی
اين قفل ،يک متغير دو مقداری است که با Lvalنمايش داده می شود و يکی از دو مقدار 0و يا 1می گيرد.
بنابراين در صورتيکه مقدار اين متغير برای يک فقره داده ای 1باشد يعنی آن واحد داده ای قفل شده و دستيابی
به آن برای تراکنش های غير از تراکنش دارنده قفل ممکن نيست .در صورتيکه مقدار اين متغير برای يک واحد
داده ای 0باشد آن واحد قفل نشده و دستيابی به آن برای تراکنش ها امکان پذير است.
عمليات ممکن بر روی واحدهای داده ای تحت پروتکل قفل گذاری دوگانی شامل دو عمليات ) Lock(Dبرای قفل
گذاری و ) Unlock(Dبرای قفل گشايی است.
يک تراکنش ( )Tiدر صورتيکه درخواست قفل روی واحد داده ای Dرا بنمايد مقدار ) Lval(Dتعيين کننده
وضعيت تراکنش مورد نظر خواهد بود به اين معنا که:
اگر Lval(D)=1باشد تراکنش Tiبايد به حالت انتظار ( )Waitرود.
اگر Lval(D)=0باشد دستور ) Lock(Dاجرا می شده Lval(D)=1شده و Dقفل می شود .پس از اتمام
اجرای تراکنش Tiدستور ) Unlock(Dاجرا می شود و Lval(D)=0می شود.
5
Slide 6
پروتکل قفل گذاری دوگانی
-1تراکنش Tiبايد قبل از هر عمل ) R(Dو يا ) W(Dدستور ) Lock(Dرا اجرا کند.
-2تراکنش Tiبايد بعد از هر عمل ) R(Dو يا ) W(Dدستور ) Unlock(Dرا اجرا کند.
-3تراکنش Tiنمی تواند درخواست قفل روی Dرا بدهد اگر از قبل روی Dقفل داشته باشد.
-4تراکنش Tiنمی تواند دستور ) Unlock(Dرا اجرا کند مگر اينکه روی Dقفل داشته باشد.
اين پروتکل بسيار محدود کننده بوده و برای قفل گذاری ،تفاوتی بين عمليات بر روی واحد های داده ای
قايل نمی شود .بر اساس پروتکل قفل گذاری دوگانی ،در هر لحظه فقط يک تراکنش می تواند بر روی
داده قفل داشته باشد.
6
Slide 7
قفل چند حالتی
در تکنيک قفل گذاری چند حالتی ،دو نوع قفل می تواند به تراکنش ها اعطا شود:
قفل اشتراکی ( )Shared Lockکه به اختصار به Sنمايش داده می شود که به آن ،قفل خواندن نيز گفته میشود.
-قفل انحصاری ( )Exclusive Lockکه به Xنمايش داده می شود و به قفل نوشتن نيز موسوم است.
اگر تراکنش ی بر روی داده ی Dقفل Sداشته باشد تراکنش های ديگر نيز می توانند بر روی داده ی Dقفل S
داشته باشند .به اين مفهوم که چند تراکنش همزمان می توانند داده ی Dرا بخوانند.
اگر تراکنش ی بر روی داده ی Dقفل Xداشته باشد فقط همان تراکنش به صورت انحصاری به Dدستيابی دارد
و ساير تراکنش ها هيچ نوع قفلی نمی توانند بر روی Dداشته باشند.
عمليات ممکن بر روی واحدهای داده ای تحت پروتکل قفل گذاری چند حالتی شامل سه عمليات:
) S-Lock(Dيا ) R-Lock(Dو ) X-Lock(Dيا ) W-Lock(Dبرای قفل گذاری و ) Unlock(Dبرای
قفل گشايی است.
7
Slide 8
پروتکل قفل گذاری چند حالتی
-1تراکنش Tiبايد قبل از هر عمل )، R(Dآنرا با ) R-Lock(Dو يا ) W-Lock(Dقفل کند.
-2تراکنش Tiبايد قبل از هر عمل ) ، W(Dآنرا با ) W-Lock(Dقفل کند.
-3تراکنش Tiبايد بعد از اتمام هر عمل ) R(Dو يا ) W(Dدستور ) Unlock(Dرا اجرا کند.
-4تراکنش Tiنمی تواند دستور ) R-Lock(Dرا اجرا کند اگر از قبل يک قفل Sيا Xروی Dقفل داشته
باشد.
-5تراکنش Tiنمی تواند دستور ) W-Lock(Dرا اجرا کند اگر از قبل يک قفل Sيا Xروی Dقفل داشته
باشد.
-6تراکنش Tiنمی تواند دستور ) Unlock(Dرا اجرا کند اگر از قبل يک قفل Sيا Xروی Dقفل داشته
باشد.
8
Slide 9
قفل چند حالتی :تغيير قفل
می توان قفل گذاشته شده روی يک فقره داده را تغيير داد .اين تغيير به يکی از دو صورت زير ممکن است:
-1تقويت قفل ()Lock Upgrading
-2تضعيف قفل ()Lock Downgrading
(برای تقويت و تضعيف قفل ،موارد 4و 5در پروتکل ناديده گرفته می شود).
برای تقويت قفل ،قفل از Sبه Xتغيير می يابد و برای تضعيف قفل ،قفل از Xبه Sتغيير می يابد.
بنابراين اگر تراکنش Tiدستور ) R-Lock(Dرا اجرا کند و بعد بخواهد دستور ) W-Lock(Dرا نيز اجرا کند
اگر تنها تراکنش ی باشد که روی Dقفل دارد می تواند درخواست کند که تقويت قفل صورت گيرد.
تقويت قفل در صورتيکه تعداد تراکنش هايی که بر روی داده ی Dقفل Sدارند بيش از يک تراکنش باشد ايجاد
بن بست می کند ( بن بست در درس بعد مورد بررس ی قرار خواهد گرفت).
تکنيک های قفل گذاری دوگانی و چند حالتی ،قابليت سريال شدن طرح های همروند را تضمين نمی کنند.
9
Slide 10
تکنيک قفل گذاری دو فازی و انواع آن
به اين دليل که تکنيک های قفل گذاری دو گانی و چند حالتی ،قابليت سريال شدن طرح های همروند را تضمين
نمی کنند تکنيک ديگری به نام تکنيک دو فازی ( )Two-Phase Lockingکه به اختصار به 2PLموسوم
است در اين مرحله مورد بررس ی قرار می گيرد .هر طرح اجرا که از 2PLتبعيت کند قابليت سريال شدن به
صورت تعارض ی را داراست .تکنيک قفل گذاری دو فازی دارای انواع زير است:
2PLمبنايی
2PLمحافظه کارانه (ايستا)
()Conservative 2PL
2PLجسورانه
()Aggressive 2PL
10
2PLشديد (سخت)
()Strict 2PL
2PLدقيق (بسيار سخت)
()Rigorous 2PL
Slide 11
تکنيک قفل گذاری دو فازی مدل مبنايي
زمانی که يک طرح همروند از تکنيک قفل گذاری دو فازی مبنايی ( )2PLپيروی می کند که در آن تمام قفل گذاری
ها قبل از اولين قفل گشايی صورت گيرد .اين روش شامل دو مرحله ی گسترش ( )Expanding Stepو افت
( )Shrinkage Stepاست که همه ی قفل گذاری ها در مرحله ی گسترش و همه ی قفل گشايی ها در مرحله ی
افت صورت می گيرد .در اين روش ،قفل گذاری بر روی داده ها به تدريج که نياز به دستيابی به آنها توسط تراکنش
ها باشد صورت می گيرد و قفل گشايی از داده ها نيز به تدريج صورت می گيرد.
T2
از آن جا که در اين طرح ،تمامی قفل گذاری ها قبل از تمامی
قفل گشايی ها صورت گرفته است اين طرح 2PLرا رعايت
می کند.
11
)Lock-S(A
)Read(A
)Lock-S(B
)Read(B
)Display(A, B
)Unlock(A
)Unlock(B
T1
)Lock-S(B
)Read(B
)Display(B
)Lock-X(A
)Read(A
A:=A+M
)Write(A
)Unlock(B
)Unlock(A
Slide 12
مشکالت قفل گذاری دو فازی مبنايی
تضعيف همروندی
طرد تسلسلی
()Cascading Abort
بن بست
()Deadlock
گرسنگی
()Starvation
T2
اين طرح 2PLرا رعايت می کند اما رعايت 2PLدراين طرح
باعث کاهش و تضعيف همروندی می شود چرا که تراکنش T1
بايد منتظر آزاد شدن قفل توسط T2بماند و نمی تواند به
صورت همروند در لحظاتی که بايد صبر کند اجرا شود.
12
)Lock-X(D
)Read(D
D:=D+100
)Write (D
)Unlock(D
T1
)Lock -X(D
Wait
Wait
Wait
)Read(D
D:=D-10
)Write(D
)Unlock(D
Slide 13
مشکالت قفل گذاری دو فازی مبنايی
T2
طرح 2PL ،S1را رعايت می کند اما با طرد شدن يک تراکنش
(در اين مثال )T1تراکنش های ديگر نيز به دليل استفاده از
داده های آن به صورت تسلسلی طرد می شوند (در اين مثال
T2پس از T1طرد شده است).
13
)Lock-X(D1
Wait
)Read(D1
)Write(D1
)Unlock(D1
.
.
.
.
Rollback
T1
)Lock-X(D1
)Read(D1
)Lock-S(D2
)Read(D2
D1:=D1+D2
)Write (D1
)Unlock(D1
.
.
.
.
Rollback
Slide 14
مشکالت قفل گذاری دو فازی مبنايی
در طرح S2تراکنش T1برای قفل گذاری از
نوع نوشتن بر روی D2بايد منتظر آزاد شدن
قفل بر روی آن توسط T2بماند و T2نيز
برای قفل گذاری خواندن بر روی D1بايد
منتظر آزاد شدن قفل توسط T1بماند که اين
امر موجب بروز بن بست می شود.
(پديده ی بن بست در درس بعد به تفضيل
مورد بررس ی قرار خواهد گرفت).
T2
T1
)Lock-X(D1
)Read(D1
D1:=D1+100
)Write (D1
)Lock-S(D2
)Read(D2
)Lock-S(D1
Wait
)Lock-X(D2
Wait
.
.
اگر تراکنش T2يک قفل اشتراکی بر روی داده ی Dداشته باشد و تراکنش T1درخواست قفل انحصاری بر روی Dکند T1
بايد منتظر برداشته شدن قفل توسط T2بماند حال اگر تراکنش T3زمانی که T1منتظر است درخواست قفل اشتراکی بر روی
Dداشته باشد اين قفل به T3اعطا می شود و اين تسلسل می تواند ادامه داشته باشد بنابراين T1دچار گرسنگی می شود.
14
Slide 15
انواع ديگر تکنيک قفل گذاری دو فازی
در 2PLمحافظه کارانه ،تراکنش بايد قبل از شروع به اجرا تمام داده های مورد نيازش را قفل کند .بنابراين اگر يکی از داده
های مورد نياز را نتواند قفل کند ساير داده ها نيز قفل نمی شوند .با استفاده از راهکار FIFOتراکنش ها به ترتيب زمان
ورودشان در صف می مانند و فقط آن دسته از درخواست های فقل پذيرفته می شود که با قفل های موجود سازگار باشد .در
اين روش به اين علت که زمان انتظار تراکنش ها افزايش می يابد ممکن است مشکل قفل زنده ( )Live Lockپيش آيد ولی به
دليل عدم وجود رقابت ،پديده بن بست رخ نمی دهد.
در 2PLشديد ،که رايج ترين پروتکل قفل گذاری است تنها در صورتی قفل های انحصاری گشوده می شوند که تراکنش به
تثبيت رسيده باشد و يا طرد شده باشد .در اين پروتکل امکان بروز بن بست وجود دارد اما طرد تسلسلی هرگز پيش نمی آيد.
در 2PLجسورانه ،درخواست قفل بر روی داده درست قبل از عمليات خواندن و يا نوشتن به سيستم داده می شود .بنابراين
اگر پس از خواندن داده نياز باشد که داده نوشته شود تشديد قفل صورت می گيرد .در اين پروتکل امکان بروز بن بست وجود
دارد .اين روش زمانی کاراست که احتمال اينکه دو تراکنش همزمان درخواست قفل بر روی يک فقره داده کنند ضعيف باشد.
در 2PLدقيق ،تمامی قفل ها اعم از اشتراکی و يا انحصاری تا تثبيت شدن تراکنش حفظ می شوند .بنابراين طرد تسلسلی
پيش نمی آيد اما احتمال بروز بن بست وجود دارد.
15
Slide 16
تکنيک قفل گذاری چند سطحی
همانطور که قبال ذکر شد می توان در سيستم پايگاه داده از چند واحد قفل شدنی با اندازه های گوناگون استفاده
کرد .اين راهکار به تکنيک قفل گذاری چند سطحی ( )Multiple Granularity Lockingيا به اختصار
MGLموسوم است .اندازه ی واحد های قفل شدنی در يک سلسله مراتب از پايين به بال به صورت صفت
(فيلد) ،تاپل (رکورد) ،صفحه ،رابطه (جدول) و در نهايت کل پايگاه داده ی رابطه ای است.
در اين تکنيک ،زمانی که تراکنش ی يک واحد داده ای را قفل می کند تمامی سطوح زيرين آن نيز قفل می شوند .مثال
قفل بر روی يک رابطه تمامی صفحات ،تاپل ها و فيلد های رابطه مزبور را نيز قفل می کند و اگر تراکنش ی نياز به
دسترس ی به سطوح زيرين داشته باشد بايد به حالت انتظار رود.
تکنيک قفل گذاری چند سطحی باعث افزايش همروندی و همچنين افزايش کارايی مديريت قفل می شود .اگر
تراکنش ی بخواهد بر روی واحد داده ی کوچکی مثل تاپل قفل داشته باشد و سيستم فقط قادر به قفل گذاری بر
روی واحد بزرگی مثل رابطه باشد واحد داده ای بزرگ قفل می شود و در نتيجه همروندی تضعيف می گردد .در
حالت ديگر اگر تنها واحد قفل شدنی تاپل باشد و تراکنش ی بخواهد کل پايگاه را قفل کند اين تراکنش بايد به تعداد
تاپل ها قفل درخواست کند .در نتيجه با افزايش تعداد قفل ها سربار ناش ی از مديريت قفلها افزايش می يابد.
16
Slide 17
قفل گذاری چند نسخه ای
در اين تکنيک عالوه بر نسخه فعلی و مورد استفاده از داده ،حداقل يک نسخه ديگر نيز نگهداری می شود .نگهداری
از نسخه های ديگری از داده ها در سيستم پايگاه داده امری متداول است که در درس ترميم به آن اشاره خواهد
شد.
بنابراين اگر يک تراکنش قصد خواندن داده ای را داشته باشد که تراکنش ديگر بر روی آن يک قفل ناسازگار با اين
درخواست خواندن دارد ،ديگر نسخه موجود در اختيار تراکنش درخواست کننده قرار می گيرد.
زمانی از تکنيک قفل گذاری از نوع چند نسخه سازی استفاده می شود که اندازه ی واحد قفل شدنی بزرگ نباشد.
يک واحد قفل شدنی در سطح رکورد يا صفحه برای کاربرد اين تکنيک مناسب است.
همچنين در کاربردهايی که در آنها نياز به دسترس ی به آخرين نسخه دقيق باشد نمی توان از تکنيک قفل گذاری از نوع
چند نسخه سازی استفاده کرد.
تکنيک های مهر زمانی و تاييد در درس بعد مورد بحث قرار
خواهد گرفت.
17
Slide 18
برای مطالعه بيشتر
1- Database Systems An Application Oriented Approach
Chapter 20, Implementing Isolation.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.
.) سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها-2
. تکنيک های کنترل همروندی،فصل سوم
. سيد محمد تقی روحانی رانکوهی:تاليف
.1386 ،13 مجموعه دانش و فن کامپيوتر،انتشارات جلوه
18
کنترل همروندی()1
)(Concurrency Control
مدرس :دکتر فاطمه احمدی آبکناری
بهار 1392
Slide 2
تکنيک های کنترل همروندی
اجرای همروند تراکنش ها باعث افزايش کارايی سيستم می شود .از طرف ديگر هر مدل اجرای همروندی از تراکنش
ها صحيح نيست و مدلی درست است که قابليت سريال شدن داشته باشد .از اين رو برای تضمين قابليت سريال
شدن تراکنش های درگير در يک اجرای همروند ،از تکنيک های کنترل همروندی استفاده می شود که عبارتند از:
Locking Techniques
(تکنيک های قفل گذاری)
Timestamping Technique
(تکنيک ُمهر زمانی)
Multiversioning Technique
(تکنيک چند نسخه سازی)
Certification Technique
(تکنيک تاييد)
تکنيک های کنترل همروندی به دو دسته ی تکنيک های بدبينانه ( )Pessimisticو تکنيک های خوشبينانه
( )Optimisticتقسيم می شوند .تکنيک های قفل گذاری ماهيت بدبينانه دارند حال آنکه ساير تکنيک ها به
صورت خوشبينانه عمل می کنند.
2
Slide 3
تکنيک های قفل گذاری
قفل ( )Lockبر روی يک آيتم يا يک قلم داده ای به معنی مجوز دستيابی يک تراکنش به آن قلم داده ای است
که توسط زير سيستم قفل گذاری در سيستم مديريت پايگاه داده ها به تراکنش ها اعطا شده ( )Grantو يا از آنها
بازپس گرفته می شود .بنابراين می توان گفت که قفل بر روی يک واحد داده ای ،متغيری است که وضع آن واحد
داده ای را نسبت به عمل قابل انجام بر روی آن ( Readيا )Writeمشخص می کند.
اندازه ی واحد قفل شدنی ( )Lock Granularityدر سيستم های مختلف متفاوت است .يک واحد داده ای
قفل پذير می تواند يک رکورد ،فيلد ،جدول (رابطه) ،يک بالک ،يک فايل و يا تمام پايگاه داده باشد .اگرچه در
بعض ی از سيستم ها از چند اندازه برای واحد قفل شدنی استفاده می شود .همچنين اندازه ی واحد قفل شدنی
گاهی می تواند به صورت پويا تغيير کند .ريزی اين واحد را می توان ارتقا ( )Lock Escalationداد و به عنوان
مثال قفل در سطح تاپل را به قفل در سطح رابطه تبديل کرد.
در صورت کوچک بودن اندازه ی واحد قفل شدنی ،تعداد واحد ها در سيستم زياد و سربار سيستم که ناش ی از
مديريت قفل هاست نيز افزايش می يابد .در اين صورت ميزان همروندی تراکنش ها افزايش يافته و احتمال تداخل
آنها کاهش می يابد.
3
Slide 4
تکنيک های قفل گذاری
ساختار قفل :اين ساختار شامل فيلد های شناسه ی قفل ،نوع قفل (متناظر با عمليات مورد نظر) ،مقدار قفل
(مقدار مجاز که گاه به صورت باينری است) و شناسه ی تراکنش (که قفل به آن اعطا می شود) می باشد.
در سيستم مديريت پايگاه داده ،مدير قفل ( )Lock Managerکه قفل ها را در اختيار تراکنش ها می گذارد و يا
از آنها بازپس می گيرد ممکن است قفل ها را به صورت ايستا و يا پويا در اختيار تراکنش ها قرار دهد .در حالت
پويا ،مدير قفل به اعطای قفل به تراکنش در صورت درخواست تراکنش در حين اجرای آن اقدام می نمايد در
صورتيکه در حالت ايستا ،قفل های مورد نياز قبل از اجرای يک تراکنش شناخته شده و توسط مدير قفل اعطا
می شود.
انواع قفل :قفل ها در حالت کلی به دودسته ی قفل دوگانی ( )Binary Lockو قفل چند حالتی (Multi-
)mode Lockتقسيم می شوند .نوع خاص ديگری از قفل تحت عنوان چفت ( )Latchوجود دارد که تنها
برای زمان کوتاهی گذاشته می شود مانند چفت بر روی يک صفحه در زمان انتقال آن صفحه از بافر به ديسک.
تکنيک های ديگر قفل گذاری شامل قفل گذاری دو فازی ،قفل گذاری چند سطحی و قفل گذاری چند نسخه ای
هستند.
4
Slide 5
قفل دوگانی
اين قفل ،يک متغير دو مقداری است که با Lvalنمايش داده می شود و يکی از دو مقدار 0و يا 1می گيرد.
بنابراين در صورتيکه مقدار اين متغير برای يک فقره داده ای 1باشد يعنی آن واحد داده ای قفل شده و دستيابی
به آن برای تراکنش های غير از تراکنش دارنده قفل ممکن نيست .در صورتيکه مقدار اين متغير برای يک واحد
داده ای 0باشد آن واحد قفل نشده و دستيابی به آن برای تراکنش ها امکان پذير است.
عمليات ممکن بر روی واحدهای داده ای تحت پروتکل قفل گذاری دوگانی شامل دو عمليات ) Lock(Dبرای قفل
گذاری و ) Unlock(Dبرای قفل گشايی است.
يک تراکنش ( )Tiدر صورتيکه درخواست قفل روی واحد داده ای Dرا بنمايد مقدار ) Lval(Dتعيين کننده
وضعيت تراکنش مورد نظر خواهد بود به اين معنا که:
اگر Lval(D)=1باشد تراکنش Tiبايد به حالت انتظار ( )Waitرود.
اگر Lval(D)=0باشد دستور ) Lock(Dاجرا می شده Lval(D)=1شده و Dقفل می شود .پس از اتمام
اجرای تراکنش Tiدستور ) Unlock(Dاجرا می شود و Lval(D)=0می شود.
5
Slide 6
پروتکل قفل گذاری دوگانی
-1تراکنش Tiبايد قبل از هر عمل ) R(Dو يا ) W(Dدستور ) Lock(Dرا اجرا کند.
-2تراکنش Tiبايد بعد از هر عمل ) R(Dو يا ) W(Dدستور ) Unlock(Dرا اجرا کند.
-3تراکنش Tiنمی تواند درخواست قفل روی Dرا بدهد اگر از قبل روی Dقفل داشته باشد.
-4تراکنش Tiنمی تواند دستور ) Unlock(Dرا اجرا کند مگر اينکه روی Dقفل داشته باشد.
اين پروتکل بسيار محدود کننده بوده و برای قفل گذاری ،تفاوتی بين عمليات بر روی واحد های داده ای
قايل نمی شود .بر اساس پروتکل قفل گذاری دوگانی ،در هر لحظه فقط يک تراکنش می تواند بر روی
داده قفل داشته باشد.
6
Slide 7
قفل چند حالتی
در تکنيک قفل گذاری چند حالتی ،دو نوع قفل می تواند به تراکنش ها اعطا شود:
قفل اشتراکی ( )Shared Lockکه به اختصار به Sنمايش داده می شود که به آن ،قفل خواندن نيز گفته میشود.
-قفل انحصاری ( )Exclusive Lockکه به Xنمايش داده می شود و به قفل نوشتن نيز موسوم است.
اگر تراکنش ی بر روی داده ی Dقفل Sداشته باشد تراکنش های ديگر نيز می توانند بر روی داده ی Dقفل S
داشته باشند .به اين مفهوم که چند تراکنش همزمان می توانند داده ی Dرا بخوانند.
اگر تراکنش ی بر روی داده ی Dقفل Xداشته باشد فقط همان تراکنش به صورت انحصاری به Dدستيابی دارد
و ساير تراکنش ها هيچ نوع قفلی نمی توانند بر روی Dداشته باشند.
عمليات ممکن بر روی واحدهای داده ای تحت پروتکل قفل گذاری چند حالتی شامل سه عمليات:
) S-Lock(Dيا ) R-Lock(Dو ) X-Lock(Dيا ) W-Lock(Dبرای قفل گذاری و ) Unlock(Dبرای
قفل گشايی است.
7
Slide 8
پروتکل قفل گذاری چند حالتی
-1تراکنش Tiبايد قبل از هر عمل )، R(Dآنرا با ) R-Lock(Dو يا ) W-Lock(Dقفل کند.
-2تراکنش Tiبايد قبل از هر عمل ) ، W(Dآنرا با ) W-Lock(Dقفل کند.
-3تراکنش Tiبايد بعد از اتمام هر عمل ) R(Dو يا ) W(Dدستور ) Unlock(Dرا اجرا کند.
-4تراکنش Tiنمی تواند دستور ) R-Lock(Dرا اجرا کند اگر از قبل يک قفل Sيا Xروی Dقفل داشته
باشد.
-5تراکنش Tiنمی تواند دستور ) W-Lock(Dرا اجرا کند اگر از قبل يک قفل Sيا Xروی Dقفل داشته
باشد.
-6تراکنش Tiنمی تواند دستور ) Unlock(Dرا اجرا کند اگر از قبل يک قفل Sيا Xروی Dقفل داشته
باشد.
8
Slide 9
قفل چند حالتی :تغيير قفل
می توان قفل گذاشته شده روی يک فقره داده را تغيير داد .اين تغيير به يکی از دو صورت زير ممکن است:
-1تقويت قفل ()Lock Upgrading
-2تضعيف قفل ()Lock Downgrading
(برای تقويت و تضعيف قفل ،موارد 4و 5در پروتکل ناديده گرفته می شود).
برای تقويت قفل ،قفل از Sبه Xتغيير می يابد و برای تضعيف قفل ،قفل از Xبه Sتغيير می يابد.
بنابراين اگر تراکنش Tiدستور ) R-Lock(Dرا اجرا کند و بعد بخواهد دستور ) W-Lock(Dرا نيز اجرا کند
اگر تنها تراکنش ی باشد که روی Dقفل دارد می تواند درخواست کند که تقويت قفل صورت گيرد.
تقويت قفل در صورتيکه تعداد تراکنش هايی که بر روی داده ی Dقفل Sدارند بيش از يک تراکنش باشد ايجاد
بن بست می کند ( بن بست در درس بعد مورد بررس ی قرار خواهد گرفت).
تکنيک های قفل گذاری دوگانی و چند حالتی ،قابليت سريال شدن طرح های همروند را تضمين نمی کنند.
9
Slide 10
تکنيک قفل گذاری دو فازی و انواع آن
به اين دليل که تکنيک های قفل گذاری دو گانی و چند حالتی ،قابليت سريال شدن طرح های همروند را تضمين
نمی کنند تکنيک ديگری به نام تکنيک دو فازی ( )Two-Phase Lockingکه به اختصار به 2PLموسوم
است در اين مرحله مورد بررس ی قرار می گيرد .هر طرح اجرا که از 2PLتبعيت کند قابليت سريال شدن به
صورت تعارض ی را داراست .تکنيک قفل گذاری دو فازی دارای انواع زير است:
2PLمبنايی
2PLمحافظه کارانه (ايستا)
()Conservative 2PL
2PLجسورانه
()Aggressive 2PL
10
2PLشديد (سخت)
()Strict 2PL
2PLدقيق (بسيار سخت)
()Rigorous 2PL
Slide 11
تکنيک قفل گذاری دو فازی مدل مبنايي
زمانی که يک طرح همروند از تکنيک قفل گذاری دو فازی مبنايی ( )2PLپيروی می کند که در آن تمام قفل گذاری
ها قبل از اولين قفل گشايی صورت گيرد .اين روش شامل دو مرحله ی گسترش ( )Expanding Stepو افت
( )Shrinkage Stepاست که همه ی قفل گذاری ها در مرحله ی گسترش و همه ی قفل گشايی ها در مرحله ی
افت صورت می گيرد .در اين روش ،قفل گذاری بر روی داده ها به تدريج که نياز به دستيابی به آنها توسط تراکنش
ها باشد صورت می گيرد و قفل گشايی از داده ها نيز به تدريج صورت می گيرد.
T2
از آن جا که در اين طرح ،تمامی قفل گذاری ها قبل از تمامی
قفل گشايی ها صورت گرفته است اين طرح 2PLرا رعايت
می کند.
11
)Lock-S(A
)Read(A
)Lock-S(B
)Read(B
)Display(A, B
)Unlock(A
)Unlock(B
T1
)Lock-S(B
)Read(B
)Display(B
)Lock-X(A
)Read(A
A:=A+M
)Write(A
)Unlock(B
)Unlock(A
Slide 12
مشکالت قفل گذاری دو فازی مبنايی
تضعيف همروندی
طرد تسلسلی
()Cascading Abort
بن بست
()Deadlock
گرسنگی
()Starvation
T2
اين طرح 2PLرا رعايت می کند اما رعايت 2PLدراين طرح
باعث کاهش و تضعيف همروندی می شود چرا که تراکنش T1
بايد منتظر آزاد شدن قفل توسط T2بماند و نمی تواند به
صورت همروند در لحظاتی که بايد صبر کند اجرا شود.
12
)Lock-X(D
)Read(D
D:=D+100
)Write (D
)Unlock(D
T1
)Lock -X(D
Wait
Wait
Wait
)Read(D
D:=D-10
)Write(D
)Unlock(D
Slide 13
مشکالت قفل گذاری دو فازی مبنايی
T2
طرح 2PL ،S1را رعايت می کند اما با طرد شدن يک تراکنش
(در اين مثال )T1تراکنش های ديگر نيز به دليل استفاده از
داده های آن به صورت تسلسلی طرد می شوند (در اين مثال
T2پس از T1طرد شده است).
13
)Lock-X(D1
Wait
)Read(D1
)Write(D1
)Unlock(D1
.
.
.
.
Rollback
T1
)Lock-X(D1
)Read(D1
)Lock-S(D2
)Read(D2
D1:=D1+D2
)Write (D1
)Unlock(D1
.
.
.
.
Rollback
Slide 14
مشکالت قفل گذاری دو فازی مبنايی
در طرح S2تراکنش T1برای قفل گذاری از
نوع نوشتن بر روی D2بايد منتظر آزاد شدن
قفل بر روی آن توسط T2بماند و T2نيز
برای قفل گذاری خواندن بر روی D1بايد
منتظر آزاد شدن قفل توسط T1بماند که اين
امر موجب بروز بن بست می شود.
(پديده ی بن بست در درس بعد به تفضيل
مورد بررس ی قرار خواهد گرفت).
T2
T1
)Lock-X(D1
)Read(D1
D1:=D1+100
)Write (D1
)Lock-S(D2
)Read(D2
)Lock-S(D1
Wait
)Lock-X(D2
Wait
.
.
اگر تراکنش T2يک قفل اشتراکی بر روی داده ی Dداشته باشد و تراکنش T1درخواست قفل انحصاری بر روی Dکند T1
بايد منتظر برداشته شدن قفل توسط T2بماند حال اگر تراکنش T3زمانی که T1منتظر است درخواست قفل اشتراکی بر روی
Dداشته باشد اين قفل به T3اعطا می شود و اين تسلسل می تواند ادامه داشته باشد بنابراين T1دچار گرسنگی می شود.
14
Slide 15
انواع ديگر تکنيک قفل گذاری دو فازی
در 2PLمحافظه کارانه ،تراکنش بايد قبل از شروع به اجرا تمام داده های مورد نيازش را قفل کند .بنابراين اگر يکی از داده
های مورد نياز را نتواند قفل کند ساير داده ها نيز قفل نمی شوند .با استفاده از راهکار FIFOتراکنش ها به ترتيب زمان
ورودشان در صف می مانند و فقط آن دسته از درخواست های فقل پذيرفته می شود که با قفل های موجود سازگار باشد .در
اين روش به اين علت که زمان انتظار تراکنش ها افزايش می يابد ممکن است مشکل قفل زنده ( )Live Lockپيش آيد ولی به
دليل عدم وجود رقابت ،پديده بن بست رخ نمی دهد.
در 2PLشديد ،که رايج ترين پروتکل قفل گذاری است تنها در صورتی قفل های انحصاری گشوده می شوند که تراکنش به
تثبيت رسيده باشد و يا طرد شده باشد .در اين پروتکل امکان بروز بن بست وجود دارد اما طرد تسلسلی هرگز پيش نمی آيد.
در 2PLجسورانه ،درخواست قفل بر روی داده درست قبل از عمليات خواندن و يا نوشتن به سيستم داده می شود .بنابراين
اگر پس از خواندن داده نياز باشد که داده نوشته شود تشديد قفل صورت می گيرد .در اين پروتکل امکان بروز بن بست وجود
دارد .اين روش زمانی کاراست که احتمال اينکه دو تراکنش همزمان درخواست قفل بر روی يک فقره داده کنند ضعيف باشد.
در 2PLدقيق ،تمامی قفل ها اعم از اشتراکی و يا انحصاری تا تثبيت شدن تراکنش حفظ می شوند .بنابراين طرد تسلسلی
پيش نمی آيد اما احتمال بروز بن بست وجود دارد.
15
Slide 16
تکنيک قفل گذاری چند سطحی
همانطور که قبال ذکر شد می توان در سيستم پايگاه داده از چند واحد قفل شدنی با اندازه های گوناگون استفاده
کرد .اين راهکار به تکنيک قفل گذاری چند سطحی ( )Multiple Granularity Lockingيا به اختصار
MGLموسوم است .اندازه ی واحد های قفل شدنی در يک سلسله مراتب از پايين به بال به صورت صفت
(فيلد) ،تاپل (رکورد) ،صفحه ،رابطه (جدول) و در نهايت کل پايگاه داده ی رابطه ای است.
در اين تکنيک ،زمانی که تراکنش ی يک واحد داده ای را قفل می کند تمامی سطوح زيرين آن نيز قفل می شوند .مثال
قفل بر روی يک رابطه تمامی صفحات ،تاپل ها و فيلد های رابطه مزبور را نيز قفل می کند و اگر تراکنش ی نياز به
دسترس ی به سطوح زيرين داشته باشد بايد به حالت انتظار رود.
تکنيک قفل گذاری چند سطحی باعث افزايش همروندی و همچنين افزايش کارايی مديريت قفل می شود .اگر
تراکنش ی بخواهد بر روی واحد داده ی کوچکی مثل تاپل قفل داشته باشد و سيستم فقط قادر به قفل گذاری بر
روی واحد بزرگی مثل رابطه باشد واحد داده ای بزرگ قفل می شود و در نتيجه همروندی تضعيف می گردد .در
حالت ديگر اگر تنها واحد قفل شدنی تاپل باشد و تراکنش ی بخواهد کل پايگاه را قفل کند اين تراکنش بايد به تعداد
تاپل ها قفل درخواست کند .در نتيجه با افزايش تعداد قفل ها سربار ناش ی از مديريت قفلها افزايش می يابد.
16
Slide 17
قفل گذاری چند نسخه ای
در اين تکنيک عالوه بر نسخه فعلی و مورد استفاده از داده ،حداقل يک نسخه ديگر نيز نگهداری می شود .نگهداری
از نسخه های ديگری از داده ها در سيستم پايگاه داده امری متداول است که در درس ترميم به آن اشاره خواهد
شد.
بنابراين اگر يک تراکنش قصد خواندن داده ای را داشته باشد که تراکنش ديگر بر روی آن يک قفل ناسازگار با اين
درخواست خواندن دارد ،ديگر نسخه موجود در اختيار تراکنش درخواست کننده قرار می گيرد.
زمانی از تکنيک قفل گذاری از نوع چند نسخه سازی استفاده می شود که اندازه ی واحد قفل شدنی بزرگ نباشد.
يک واحد قفل شدنی در سطح رکورد يا صفحه برای کاربرد اين تکنيک مناسب است.
همچنين در کاربردهايی که در آنها نياز به دسترس ی به آخرين نسخه دقيق باشد نمی توان از تکنيک قفل گذاری از نوع
چند نسخه سازی استفاده کرد.
تکنيک های مهر زمانی و تاييد در درس بعد مورد بحث قرار
خواهد گرفت.
17
Slide 18
برای مطالعه بيشتر
1- Database Systems An Application Oriented Approach
Chapter 20, Implementing Isolation.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.
.) سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها-2
. تکنيک های کنترل همروندی،فصل سوم
. سيد محمد تقی روحانی رانکوهی:تاليف
.1386 ،13 مجموعه دانش و فن کامپيوتر،انتشارات جلوه
18