تراکنش تو در تو

Download Report

Transcript تراکنش تو در تو

‫درس پایگاه داده پیشرفته‬
‫تراکنش‬
‫استاد‪ :‬دکتر باقری فرد‬
‫اعضای گروه‪:‬‬
‫رضا بسطام ‪ ،‬محمدامین احمدی‪ ،‬سحرعزیزی‪ ،‬شهال موسوی‬
‫کارشناسی ارشد نرم افزار ‪ -‬نیمسال اول ‪93‬‬
‫فصل اول‪ :‬تراکنش‬
‫‪-1‬تعریف تراکنش‪) T ( :‬‬
‫• واحد منطقی پردارزش داده ها که شامل چند عمل دستیابی به داده به منظور درج –حذف‪-‬تغییر‬
‫–بازیابی است‪.‬‬
‫•واحد اجرای برنامه ای که به داده ها دسترس ی دارد و میتواند موجب تغییر داده ها در پایگاه شود‪.‬‬
‫•میتواند یک پرس و جو باشد یا عمل خواندن و نوشتن باشد و شامل یک یا چند دستور باشد‬
‫•یا در بیان غیر رسمی دستیابی یک برنامه به داده های مشترک در پایگاه داده‬
‫•واحد سازگار و قابل اطمینان پردازش مشخص در پایگاه داده به گونه ای که نسخه جدیدی از‬
‫پایگاه داده بوجود اید‬
‫•نتیجه ‪ :‬با توجه به تعاریف باال میتوان گفت تراکنش یک پروسه است که توسط یک برنامه اجرا‬
‫شده باعث ایجاد تغییر یا انجام پرس و جو در پایگاه داده میشود با انجام درست واحد منطقی کار‪،‬‬
‫پایگاه از وضعیت سازگار قبلی به وضعیت سازگار بعدی می رسد و نسخه جدیدی از پایگاه داده‬
‫ساخته میشود‪.‬‬
‫‪3‬‬
‫‪-2‬دارای خواص‪ ACID‬است‪:‬‬
‫•تجزیه ناپذیری ‪ :atomicity‬یا کل تراکنش اجرا می شود یا اصال اجرا نمی شود‪ .‬اصال اجرا نمی‬
‫شود به معنای عدم اقدام سیستم در اجرای تراکنش نیست بلکه در صورت بروز مشکل باعث‬
‫توقف یا ‪ abort‬سیستم می شود و اگر بخش ی از تراکنش اجرا شده بود مثل این است که اجرا‬
‫نشده است‪.‬‬
‫•سازگاری ‪ : consistency:‬یعنی رعایت تمام قواعد و محدودیت های جامعیتی که شامل‪:‬‬
‫آغاز تراکنش = حرکت از وضعیت سازگار فعلی‬
‫پایان تراکنش= رسیدن به وضعیت سازگار بعدی یا ‪commit‬‬
‫اجرای دستور ‪ = commit‬تضمین سازگار بودن نتیجه اجرای تراکنش‬
‫اجرای دستور ‪ =abort‬اجرای یک تراکنش ‪ compensator‬یا جبرانگر برای خنثی شدن عمل‬
‫تراکنش ‪ abort‬شده‬
‫در کل سازگاری در حین اجرای تراکنش بی معنی و بعد از اجرا تضمینی است‪.‬‬
‫•انزوا ‪ :Isolation‬یعنی اجرای هر تراکنش در اسلوب تک کاربری‬
‫اجرای همروند چند تراکنش در محیط ایزوله انجام می شود و تا رسیدن نتیجه یک تراکنش به مرحله ‪commit‬‬
‫نتیجه اجرای آن مخفی باقی می ماند‪.‬‬
‫خاصیت ایزوله سازی برابر است با خاصیت سازگاری‬
‫عدم وجود خاصیت ایزوله سازی = خواندن داده های ناصحیح و ناسازگاری نتایج‬
‫•پایایی ‪Durability:‬‬
‫پایایی یعنی ماندگاری اثر اجرای یک تراکنش ‪ commit‬شده حتی اگر پس از اجرا سیستم دچار نقص شود‪ .‬برای‬
‫ایجاد خاصیت پایایی از ترمیم یا ‪ recovery‬استفاده می شود‪.‬‬
‫نتیجه‪ :‬تضمین جامعیت در گرو رعایت خواص ‪ ACID‬است‪.‬‬
‫‪ -4‬تشخیص یک تراکنش‪:‬‬
‫برای تشخیص یک تراکنش از دستورات ‪ DML‬خاص ی استفاده می شود‪(.‬کران تراکنش)‬
‫‪Begin transaction‬‬
‫‪-----------‬‬‫‪Commit‬‬
‫‪Or rollback‬‬
‫• حاالت یک تراکنش‪:‬‬
‫‪Commit‬‬
‫تثبیت شده‬
‫ثبت ناقص‬
‫پایان‬
‫دچار نقص‬
‫طرد شده‬
‫فعال‬
‫شروع‬
‫انواع حاالت یک تراکنش‬
‫‪ -1‬فعال یا ‪ :Action‬حالتی که در آن تراکنش در حال اجراست‪.‬‬
‫‪ abort -2‬یا طرد شده‪ :‬حالتی که در آن تراکنش دیگر نمی تواند فعال باشد و از محیط اجرا خارج می شود‪.‬‬
‫‪ -3‬حالت ‪ finished‬یا تمام شده‪ :‬حالتی که تراکنش تمام عملیاتش را انجام داده و سابقه اجرایش در فایل ثبت‬
‫درج شده ولی هنوز بهنگام سازی هایش در پایگاه وارد نشده است‪.‬‬
‫‪ -4‬حالت ‪ Commited‬یا تثبیت شده‪ :‬حالتی که تمام تغییرات مورد نظر تراکنش انجام شده و در پایگاه داده هم‬
‫وارد شده است‪.‬‬
‫نکته ‪ :‬اگر تراکنش ی ‪ Commit‬شود اثر آن تراکنش مانا باقی می ماند‪.‬‬
‫بیان رسمی یا ‪ Formal‬تراکنش‬
‫برای اثبات صحت الگوریتمهای مدیریت تراکنش ها تراکنش را با نمادهای زیر بیان میکنند‬
‫‪ :D‬داده و ‪: R‬خواندن و ‪:W‬نوشتن و ‪ abort: A‬و ‪commit : C‬‬
‫می توان یک تراکنش را به کمک عمل های آن نشان داد‪ .‬مثال به جای‬
‫‪Begin Transaction‬‬
‫)‪R(D1‬‬
‫)‪R(D2‬‬
‫‪D1=D1+D2‬‬
‫)‪W(D1‬‬
‫‪Commit‬‬
‫می توان بصورت زیر نشان داد‬
‫}‪T={R(D1) , R(D2) , W(D1) , C‬‬
‫تنها عمل های نوشتن‪ ،‬خواندن‪ Abort ، Commit ،‬در نظر گرفته می شوند‪.‬‬
‫مدل های تراکنش‬
‫بر اساس چندین ضابطه می توان یک تراکنش را رده بندی نمود‪:‬‬
‫ضابطه اول‪ :‬مدت زمان اجرای یک تراکنش‪ .‬با این ضابطه دو دسته تراکنش داریم‪:‬‬
‫•‬
‫تراکنش کوتاه یا ‪Online‬‬
‫•‬
‫تراکنش طوالنی یا ‪Batch‬‬
‫تراکنش عمومی‪ :‬تراکنش ی که در آن دستورات خواندن ‪ /‬نوشتن از ترتیب خاص ی پیروی نمی کند‬
‫مدل عمومی‪:‬‬
‫} ‪1- T={ R(D1) , R(D2), W(D2) , R(D3) , W(D1) , W(D2) , W(D4) , C‬‬
‫تراکنش دو مرحله ای‪ :‬کلیه عملیات خواندن قبل از نوشتن اجرا می شود‪.‬‬
‫پمدل دو مرحله ای‪:‬‬
‫}‪2- T={ R(D1) , R(D2) , R(D3) , W(D1) , W(D3) , W(D2) , W(D4) , C‬‬
‫تراکنش محدود شده‪ :‬هر داده قبل از بهنگام سازی ابتدا خوانده می شود‪ .‬به این نوع نوشتن‪ ،‬نوشتن مقید یا ‪Constrained‬‬
‫گفته می شود ‪.‬‬
‫مدل محدود شده‪:‬‬
‫}‪3- T={ R(D1) , R(D2) , W(D2) , R(D3) , W(D1) , W(D3) , R(D4) , W(D4) , C‬‬
‫مدل دو مرحله ای محدود شده‪:‬‬
‫}‪4- T={ R(D1) , R(D2) , R(D3) , R(D4) , W(D1) , W(D3) , W(D2) , W(D4) , C‬‬
‫نتیجه‪ :‬یک تراکنش می تواند هم دو مرحله ای و هم محدود شده باشد‪.‬‬
‫تراکنش عمل‪ :‬همان تراکنش محدود شده است با یک شرط اضافی‪ ،‬هر عمل خواندن و نوشتن داده باید بی‬
‫فاصله و بدنبال هم بیایند‪.‬‬
‫مدل عمل‪:‬‬
‫}‪5- T={ R(D1) , W(D1) , R(D2) , W(D2) , R(D3) , W(D3) , R(D4) , W(D4) , C‬‬
‫ضابطه سوم‪ :‬تعداد سطوح‬
‫•‬
‫تراکنش مسطح‬
‫•‬
‫تراکنش تو در تو ‪Nested Transaction‬‬
‫تراکنش مسطح‪ :‬یک نقطه شروع و یک نقطه پایان دارد و تمام عمل ها بین این دو نقطه است‪ .‬مدیریت با مدیر‬
‫تراکنش و مناسب برای تراکنش های پیچیده و بهنگام سازی انبوه است‪.‬‬
:‫شکل کلی تراکنش مسطح‬
Begin Transaction ‫نقطه شروع‬
Action 1
Action 2
.
Action n
End Transaction
‫نقطه پایان‬
‫تراکنش تو در تو‪ :‬نوعی تراکنش تشکیل شده از چندین زیرتراکنش و مناسب برای سیستم های توزیع شده‪ .‬اجرای‬
‫زیرتراکنش ها به صورت همروند‬
‫تراکنش اصلی= درخت یا سلسله مراتبی از تراکنش ها با چندین نقطه آغاز و پایان‬
‫‪BEGIN Transactin T1‬‬
‫‪.‬‬
‫‪BEGIN Transaction T2‬‬
‫‪.‬‬
‫‪BEGIN transaction T3‬‬
‫‪.‬‬
‫‪t1‬‬
‫‪t3‬‬
‫‪t2‬‬
‫‪END Transaction T3‬‬
‫‪BEGIN Transaction T4‬‬
‫‪.‬‬
‫‪t4‬‬
‫‪END Transaction T4‬‬
‫‪.‬‬
‫‪END Transaction T2‬‬
‫‪.‬‬
‫;‪END Transaction T1‬‬
‫دو نوع تراکنش تو در تو‪:‬‬
‫تراکنش بسته‪:‬‬
‫•‬
‫•‬
‫اجرای زیر تراکنش بعد از تراکنش بیرونی‬
‫‪ Commit‬شدن زیر تراکنش وابسته به ‪ Commit‬شدن تراکنش بیرونی‬
‫•‬
‫رعایت خاصیت تجزیه ناپذیری در بیرونی ترین تراکنش (قانون همه یا هیچ)‬
‫•‬
‫خاصیت جدایی برای زیر تراکنش‬
‫تراکنش باز‪:‬‬
‫•‬
‫در صورت ‪ Commit‬نشدن تراکنش بیرونی‪ ،‬نتیجه زیر تراکنش در اختیار سایر تراکنش ها و‬
‫حتی تراکنش پدر قرار می گیرد‪.‬‬
‫•‬
‫عدم وجود تجزیه ناپذیری تراکنش بیرونی تر‬
‫دو مشکل تراکنش باز‪:‬‬
‫طرد تسلسلی ‪ :‬در صورت ‪ Abort‬شدن یک زیر تراکنش‪ ،‬ممکن است زیر تراکنش های پایان یافته هم‬
‫•‬
‫‪ Abort‬شوند‪.‬‬
‫•‬
‫عدم توالی پذیری طرح اجرا ( بعدا توضیح داده می شود)‬
‫قواعد اجرای تراکنش تو در تو‬
‫‪ -1‬از پایین به باال اجرا می شوند و ‪ Commit‬می گردند‪ .‬در مثال قبل ‪ T3‬و ‪ T4‬قبل از پدرشان ‪ T2‬و ‪ T2‬قبل‬
‫از پدرش ‪ T1‬تثبیت می شوند‪.‬‬
‫تراکنش سطح باالتر بی تاثیر‬
‫‪1‬‬
‫نحوه ترمیم تراکنش پدر‪:‬‬
‫اگر تراکنش ‪Abort‬‬
‫‪2‬‬
‫کلیه تراکنش های زیر درخت ‪Abort‬‬
‫‪3‬‬
‫• زیر تراکنش ‪ Abort‬شده را دوباره فعال کند‬
‫• نقص پیش آمده در زیر تراکنش را نادیده بگیرد‪.‬‬
‫• اجرای یک زیر تراکنش احتیاطی ‪ .Contigency‬یعنی اگر ثبت نام در یک درس ممکن نبود درس دیگری ثبت‬
‫نماید‪.‬‬
‫• خود تراکنش پدر ‪ Abort‬شود‪.‬‬
‫‪ -2‬نتیجه ‪ Commit‬شده یک زیر تراکنش تنها توسط پدر بالفصلش قابل دید است‪ .‬در مثال قبل اگر ‪، T3‬‬
‫‪ Commit‬شودتنها ‪ T2‬از نتیجه مطلع می شود‪.‬‬
‫‪ Commit -3‬شدن یک تراکنش مشروط به ‪ Commit‬شدن پدرانش می باشد‪.‬‬
‫تراکنش چند سطحی‪:‬‬
‫• تراکنش تو در توی تعمیم یافته است‪.‬‬
‫• تراکنش تو در توی بازی که زیر تراکنش های آن به صورت درخت متعادل باشند‪.‬‬
‫تراکنش توزیع شده‪:‬‬
‫نوعی از تراکنش مسطح که در محیط توزیع شده اجرا شود‪ .‬بسته به اینکه داده مورد استفاده در چه سایتی قرار‬
‫داشته باشد در همان سایت اجرا می شود‪.‬‬
‫تفاوت تراکنش توزیع شده و تراکنش تو در تو‪:‬‬
‫در تراکنش تو در تو وظایف بین زیر تراکنش ها توزیع شده است و در تراکنش توزیع شده به نحوه توزیع داده بستگی‬
‫دارد‪.‬‬
‫تراکنش بسیار بلند‪:‬‬
‫•‬
‫نوعی خاص از تراکنش تو در تو و باز است‬
‫•‬
‫دارای دو سطح تو در تویی است‬
‫• مجموعه ای از اقدامات که با یکدیگر یک تراکنش طوالنی مدت را می سازند‬
‫• مبتنی بر مفهوم تراکنش جبرانگر ‪Compensator‬‬
‫• یک واحد کنترلی است و به کمک تراکنش جبرانگر‪ ،‬به صورت یک کل تجزیه نشدنی در آمده‬
‫نقش تراکنش جبرانگر‪:‬‬
‫هر زیر تراکنش یک تراکنش جبرانگر دارد که‪:‬‬
‫•‬
‫اثر تراکنش ‪ Abort‬شده را خنثی می کند‬
‫•‬
‫تغییری در وضعیت پایگاه نسبت به لحظه قبل از شروع ایجاد نمی کند‪.‬‬
‫• تضمینی برای اجرای کامل هر تراکنش است چراکه اگر تراکنش ی ناقص اجرا شود بالفاصله تراکنش جبرانگر‬
‫اجرا می شود‪.‬‬
‫تراکنش بسیار بلند شکل کاملتری از تراکنش زنجیره ای است‪.‬‬
‫کارروند (‪(Workflow‬‬
‫از ترکیب مفهوم تراکنش تودرتو و خاصیت باز بودن آن‪ ،‬مدل پیچیده تری از تراکنش به دست می آید که به آن‬
‫کاروند می گویند‪.‬‬
‫مجموعه ای از وظایف (‪ )Task‬که برای انجام یک فعالیت در محیط های کاری باید اجرا شود تا به درخواست‬
‫کاربر (که خود می تواند شامل چندین درخواست باشد) پاسخ داده شود‪.‬‬
‫کاروند فعالیتی است که شامل چندین وظیفه با اجرای هماهنگ شده که توسط چند موجودیت (ش ی) پردازشگر‬
‫انجام می شود‪.‬‬
‫انواع کارروند ‪:‬‬
‫‪-1‬کارروند انسانی ‪ :‬انسان نقش اصلی را در انجام وظایف دارد و البته از امکانات سیستمی هم استفاده میشود ولی‬
‫مسئولیت سازگاری و هماهنگی عملیات انسان است‪.‬‬
‫‪ -2‬کارروند سیستمی‪ :‬معموال حجم باالیی از محاسبات و نیز وظایف ویژه دارد که توسط کامپیوتر انجام میشود و‬
‫نقش سیستم در کنترل همروندی ‪،‬ترمیم و اجرای وظایف اساس ی است‪.‬‬
‫‪-3‬کارروند تراکنش ی ‪ :‬نوعی کاروند است که بین دو کارروند دیگر است و خصوصیاتی از هر دو نوع را دارد و شامل‬
‫اجرای هماهنگ شده چندین وظیفه است که ‪:‬‬
‫‪-1‬با دخالت انسان صورت میگیرد‬
‫‪-2‬دستیابی به سیستم های معموال همگون ‪،‬خود مختار و توزیع شده را الزم دارد‬
‫‪ -3‬خواص تراکنش را برای هر یک از وظایف یا تمامی کارروند تامین میکند‬
‫شکل کلی یک ترانش بسیار بلند‪:‬‬
‫})‪{(T1,C1),(T2,C2),…,(Tn,Cn‬‬
‫که به دو صورت زیر اجرا می شوند‪:‬‬
‫‪ {T1,T2,…,Tn} -1‬اگر همه تراکنش ها اجرا شوند‪.‬‬
‫‪ {T1, T2 , …., Ti,Ci-1,…,C1)} -2‬اگر ‪ Ti-1,…,T1‬اجرا و ‪Ti‬طرد شود‪.‬‬
‫تکنیک نقطه نگهداشت ‪Save Point‬‬
‫‪ Atomicity‬کارایی سیستم را کاهش می دهد و زمان اجرای یک تراکنش را طوالنی می کند برای رفع مشکل‪:‬‬
‫‪ -1‬استفاده از تراکنش تو در تو‬
‫‪ -2‬ایجاد نقطه نگهداشت‬
‫برای ایجاد نقطه نگهداشت‪:‬‬
‫اجرای تابع ‪Save Work Function‬‬
‫ثبت وضعیت جاری‬
‫ارسال یک عدد به برنامه‬
‫در صورت درخواست ‪ Rollback Work‬و دادن‬
‫عدد دریافتی‬
‫برگشت به نقطه نگهداشت مورد نظر ( آخرین و یا هر‬
‫نقطه نگهداشت پیشین)‬
‫عمل تجزیه نشدنی‪:‬‬
‫آنچه بین دو نقطه نگهداشت اجرا می شود‪.‬‬
‫تفاوت بین ‪ Rollback Transaction‬و ‪: Rollback Work‬‬
‫در حالت ‪ Rollback Transaction‬تراکنش اساسا از محیط اجرا خارج می شود ولی برای ‪Rollback‬‬
‫‪ Work‬تراکنش در حالت فعال است و تنها به یک نقطه نگهداشت پیشین خود برمی گردد‪.‬‬
‫تثبیت‬
‫نقطه نگهداشت (‪)2‬‬
‫نقطه نگهداشت (‪)3‬‬
‫نقطه نگداشت (‪)1‬‬
‫شروع تراکنش‬
‫واگرد (‪)2‬‬
‫عملیات واگرد می تواند جزیی یا سراسری باشد‪.‬‬
‫طرد‬
‫ایجاد نقطه نگهداشت امکانی برای شبیه سازی تراکنش تو در تو است‪ .‬یعنی هر زیر تراکنش از هر سطحی آغاز شود‬
‫نقطه نگهداشت هم ایجاد می شود‪.‬‬
‫در بحث ترمیم ‪ ،‬نقطه نگهدا شت از تراکنش تو در تو منعطف تر است‪.‬‬
‫تراکنش زنجیره ای‬
‫•مجموعه ای از تراکنش های ‪ T1,T2, …,Tn‬که پشت سر هم اجرا شوند‪.‬‬
‫•‪ Commit‬شدن ‪ Ti‬و شروع ‪ Ti+1‬یک عمل تجزیه نشدنی است‪.‬‬
‫•هیچ تراکنش دیگر نمی تواند داده ای که ‪ Ti‬به ‪ Ti+1‬منتقل می کند را ببیند‪.‬‬
‫•اگر ‪ Ti‬تثبیت شد و نقص ی در سیستم پیش آمد ‪ Ti‬دیگر ‪ Rollback‬نمی شود و در صورت لزوم یا از سرگیری از‬
‫آخری نقطه تثبیت انجام میشود‪.‬‬
‫تثبیت‬
‫‪T4‬‬
‫‪T3‬‬
‫تثبیت‬
‫واگرد‬
‫طرد‬
‫•کل تراکنش به یک تراکنش واحد تلقی می شود‪.‬‬
‫تثبیت‬
‫‪T2‬‬
‫تثبیت‬
‫‪T1‬‬
‫شروع‬
‫تراکنش‬
‫شباهت تراکنش زنجیره ای با نقطه نگهداشت‪:‬‬
‫عمل ‪ Rollback‬به آخرین نقطه ‪ Commit‬بر می گردد ( نقطه نگهداشت)‬
‫تفاوت تراکنش زنجیره ای با نقطه نگهداشت‪:‬‬
‫نقطه نگهداشت قفل از تراکنش بر نمی دارد ولی در تراکنش زنجیره ای به محض رسیدن به نقطه ‪ Commit‬قفل‬
‫های آن تراکنش برداشته می شود‪.‬‬
‫زیر سیستم مدیریت تراکنش‪:‬‬
‫یکی از واحدهای مهم در ‪ DBMS‬است که دارای زیر واحدهای زیر است‪:‬‬
‫• مدیر تراکنش‪ :‬هماهنگ کننده تراکنش های برنامه کاربردی است‪.‬‬
‫•زمانبند‪ :‬ایجاد بیشترین همروندی در تراکنش‪ .‬اگر همروندی با ایجاد قفل انجام شود به آن مدیر قفل گویند‪.‬‬
‫•مدیر ترمیم‪ :‬مسئول ترمیم پایگاه داده است‪.‬‬
‫•مدیر بافر‪ :‬مسئول انتقال داده به دیسک و حافظه‬
‫خسته نباشید‬
‫منابع‬
‫‪ ‬سیستم مدیریت پایگاه داده نوشته محمد تقی رانکوهی فصل اول تراکنش‬