تراکنش ها (Transactions) Dr. Fatemeh Ahmadi-Abkenari February 2013 Advanced Database تراکنش ( )Transaction 2 تعاريف تراکنش عبارت است از واحد اجرای برنامه ای که به داده های ذخيره شده.

Download Report

Transcript تراکنش ها (Transactions) Dr. Fatemeh Ahmadi-Abkenari February 2013 Advanced Database تراکنش ( )Transaction 2 تعاريف تراکنش عبارت است از واحد اجرای برنامه ای که به داده های ذخيره شده.

‫تراکنش ها‬
(Transactions)
Dr. Fatemeh Ahmadi-Abkenari
February 2013
Advanced Database
‫تراکنش (‪)Transaction‬‬
‫‪2‬‬
‫تعاريف‬
‫تراکنش عبارت است از واحد اجرای برنامه ای که به داده های ذخيره شده دستيابی دارد و ممکن است آنها را تغيير‬
‫دهد‪.‬‬
‫تراکنش عبارت است از عمل های مرتبط به يکديگر که اجرای آنها تغييری در پايگاه داده ها ايجاد می کند و دارای‬
‫خواص ‪ ACID‬باشد‪( .‬خواص ‪ ACID‬در ادامه مورد بحث قرار خواهد گرفت‪).‬‬
‫تراکنش عبارت است از واحد منطقی کار در پايگاه داده ها‪ .‬اين واحد لزوما يک عمل ساده (‪)single action‬‬
‫نيست بلکه می تواند دنباله ای از عمل های ساده باشد‪ .‬اما انجام درست اين واحد منطقی کار سبب می شود تا‬
‫پايگاه داده ها از يک حالت سازگار به حالت سازگار ديگر درآيد‪.‬‬
‫تراکنش عبارت است از يک اجرای برنامه که از دنباله ای از عمل های خواندن و نوشتن تشکيل شده است‪.‬‬
‫پايگاه داده پيشرفته‬
‫بيان رسمی تراکنش‬
‫‪3‬‬
‫در تراکنش مفروض ‪ ، Ti‬عمل )‪ Oij(D‬نشان دهنده ی عمل ‪ Oj‬از تراکنش ‪ Ti‬روی داده ذخيره شده ی ‪ D‬در‬
‫پايگاه داده است‪ .‬با فرض در نظر گرفتن عمل های تراکنش ‪ Ti‬به خواندن و نوشتن و صرف نظر از عمليات پردازش ی‬
‫خواهيم داشت‪:‬‬
‫}‪Oij ε {R, W‬‬
‫حال اگر ‪ OSi‬مجموعه ی همه ی عمل های تراکنش ‪ Ti‬باشد خواهيم داشت‪:‬‬
‫اگر ‪ Ni‬نشان دهنده ی وضع پايان تراکنش ‪ Ti‬باشد خواهيم داشت‪:‬‬
‫}‪OSi = {Oij : j>=0‬‬
‫}‪Ni ε {A, C‬‬
‫)‪(A: Abort, C: Commit‬‬
‫برای سادگی نمايش رسمی تراکنش‪ ،‬گاه تراکنش را فقط با مجموعه ی عمل هايش نمايش می دهند‪:‬‬
‫}‪Ti = {R(D1), R(D2), W(D1), C‬‬
)Sequence( ‫) و توالی‬Schedule( ‫ برنامه زمانی‬،‫تراکنش ها‬
4
op1,1 op1,2
T1
Local
Variables
T2
op2,1 op2,2
Local
Variables
Transaction Schedule
op1,1 op2,1 op2,2 op1,2
DBMS
Sequence: an arbitrary merge
of two sequences or the order
of operations arriving at the
database
‫پايگاه داده پيشرفته‬
‫خواص ‪ ACID‬تراکنش‬
‫‪5‬‬
‫خواص ‪ ACID‬تراکنش عبارت اند از‪:‬‬
‫‪Atomicity‬‬
‫(تجزيه ناپذيری)‬
‫‪Consistency‬‬
‫(سازگاری)‬
‫‪Isolation‬‬
‫(جدايي)‬
‫‪Durability‬‬
‫(ماندگاری)‬
‫پايگاه داده پيشرفته‬
‫تجزيه ناپذيری (‪)Atomicity‬‬
‫‪6‬‬
‫سيستم بايد اطمينان حاصل کند که تراکنش يا با موفقيت به انتها رسيده و کامل شده است و يا در‬
‫صورت کامل نشدن‪ ،‬هيچ تغيير و تاثيری در سيستم نداشته به صورتی که انگار هرگز آغاز نشده بود‪.‬‬
‫اجرای يک تراکنش با خصوصيت تجزيه ناپذيری به اين اصل داللت دارد که يک تراکنش يا تثبيت‬
‫(‪ )Commit‬می شود و کامل می گردد و يا طرد و دچار خاتمه غير عادی (‪ )Abort‬می گردد‪.‬‬
‫خصوصيت تجزيه ناپذيری به اصل يا همه يا هيچ داللت دارد به اين معنا که اگر در حين اجرای تراکنش‪،‬‬
‫بروز مشکلی سبب توقف اجرای آن شود بخش اجرا شده ی تراکنش‪ ،‬اجرانشده تلقی می_ شود‪.‬‬
‫پايگاه داده پيشرفته‬
‫تجزيه ناپذيری (‪)Atomicity‬‬
‫‪7‬‬
‫زمانی که يک تراکنش با خاتمه ی غير عادی (‪ )Abort‬مواجه می شود سيستم پايگاه داده بايد اطمينان‬
‫حاصل کند که هر تغييری که تراکنش مزبور در پايگاه ايجاد کرده بود (عملياتی مانند نوشتن و بهنگام‬
‫سازی) خنثی شده (‪ )Undo‬و يا واگردانده (‪ )Rolled back‬می شود که سيستم پردازش تراکنش با‬
‫عمليات با مکانيزم های پيچيده ای برای اين منظور سروکار دارد‪.‬‬
‫خصوصيت تجزيه ناپذيری به اصل داللت دارد که وضعيت ميانه در سيستم بی معنی است به اين‬
‫مفهوم که در يک سيستم ثبت نام دانشجويان‪ ،‬يک دانشجو برای يک درس يا ثبت نام کرده است و يا‬
‫ثبت نام نکرده است‪ .‬در اين حالت‪ ،‬ثبت نام نيمه کامل (‪ )Partial Registration‬بی معنی است و‬
‫پايگاه را در وضعيت ناسازگار (‪ )Inconsistent State‬قرار می دهد‪.‬‬
‫پايگاه داده پيشرفته‬
‫سازگاری (‪)Consistency‬‬
‫‪8‬‬
‫پايگاه داده زمانی در حالت سازگار (‪ )Consistent‬به سر می برد که تمام قواعد و محدوديت‬
‫های جامعيتی (‪ )Integrity Constrains‬در آن رعايت شده باشد‪ .‬از اين رو اجرای کامل يک‬
‫تراکنش و تثبيت آن بايد منجر به نتيجه ای درست و سازگار شود و پايگاه را از يک وضعيت سازگار‬
‫به يک وضعيت سازگار ديگر ببرد‪.‬‬
‫بنابراين پايگاه داده درست پس از اجراشدن يک تراکنش (قطعی شدن و تثبيت تراکنش و اجرای‬
‫دستور ‪ )Commit‬بايد در حالت سازگار قرار داشته باشد‪ .‬از اين رو اجرای دستور ‪Commit‬‬
‫توسط تراکنش به معنای سازگار بودن نتيجه حاصل از اجرای آن است‪.‬‬
‫پايگاه داده پيشرفته‬
‫جدايی (‪)Isolation‬‬
‫‪9‬‬
‫اين خصوصيت داللت بر استقالل کامل تراکنش ها از يکديگر دارد حتی اگر چند تراکنش بطور همروند‬
‫(‪ )Concurrent‬اجرا شوند‪ .‬بنابراين تا زمانی که يک تراکنش به مرحله ی تثبيت (‪ )Commit‬نرسيده‬
‫باشد وضعيت داخلی و ميانی آن (‪ )Intermediate State‬برای تراکنش های ديگر مخفی باقی خواهد‬
‫ماند‪.‬‬
‫بنا براين اصل حتی اگر تراکنش ها به صورت همروند اجرا شوند تاثير آنها بر روی سيستم مانند اين‬
‫خواهد بود که تراکنش ها به صورت سريال اجرا شده باشند‪.‬‬
‫معموال اين خصوصيت با وادار کردن تراکنش ها به اخذ قفل (‪ )Lock Obtaining‬بر روی آيتم های‬
‫پايگاه محقق می شود‪ .‬بنابراين تا زمان رها کردن قفل توسط تراکنش دارنده قفل‪ ،‬تراکنش های ديگر نمی‬
‫توانند به آيتم قفل شده دسترس ی داشته باشند‪ .‬بديهی است کارايی سيستم در صورتی که يک آيتم به‬
‫مدت طوالنی توسط يک تراکنش قفل شود کاهش می يابد‪.‬‬
‫پايگاه داده پيشرفته‬
‫ماندگاری (‪)Durability‬‬
‫‪10‬‬
‫سيستم بايد اطمينان حاصل کند که زمانی که يک تراکنش با موفقيت به انتها رسيده و تثبيت شده است‬
‫تاثير عمل های آن در سيستم پايگاه داده باقی می ماند حتی اگر دستگاهی که داده ها بر روی آن ذخيره‬
‫شده دچار مشکل (‪ )Fail‬شود‪.‬‬
‫ماندگاری تراکنش ها می تواند از طريق ذخيره ی همراه با افزونگی داده ها (‪ )Data Redundancy‬بر‬
‫روی دستگاه های پشتيبان بدست آيد‪.‬‬
‫به عنوان مثال اگر يک دانشجو برای يک درس ثبت نام کرد و تراکنش تثبيت شد انتظار می رود که‬
‫سيستم پايگاه داده اين اصل را حتی علی رغم مشکالت و شکست های سخت افزاری و يا نرم افزاری به‬
‫خاطر داشته باشد‪.‬‬
‫پايگاه داده پيشرفته‬
‫مدل های تراکنش‬
‫‪11‬‬
‫فاکتورهای گوناگونی برای رده بندی تراکنش ها وجود دارد از جمله‪:‬‬
‫مدت زمان اجرا‬
‫ترتيب خواندن و نوشتن‬
‫تعداد سطوح‬
‫از نظر مدت زمان اجرا‪ ،‬تراکنش ها به دو دسته ی تراکنش های کوتاه (‪)Short Life Transaction‬‬
‫و تراکنش های طوالنی (‪ )Long Life Transaction‬تقسيم بندی می شوند‪ .‬تراکنش کوتاه دارای‬
‫زمان اجرا و زمان پاسخ دهی کوتاهی است که در حدود چند ثانيه يا چند دقيقه است مانند عمليات‬
‫بانکی از دستگاه های خودپرداز‪ .‬در حالی که تراکنش های طوالنی دارای زمان اجرای حداقل چند دقيقه‬
‫تا چند ساعت هستند مانند برنامه های پردازش صوت و تصوير‪.‬‬
‫پايگاه داده پيشرفته‬
‫مدل های تراکنش – بر اساس ترتيب خواندن و نوشتن‬
‫‪12‬‬
‫به منظور رده بندی تراکنش ها بر اساس ترتيب خواندن و نوشتن‪ ،‬تراکنش ها به انواع زير طبقه بندی‬
‫می شوند‪:‬‬
‫تراکنش عمومی‬
‫تراکنش دو مرحله ای‬
‫)‪(Two steps‬‬
‫تراکنش محدود شده‬
‫)‪(Restricted‬‬
‫تراکنش دو مرحله ای محدود‬
‫شده‬
‫)‪(Restricted two steps‬‬
‫پايگاه داده پيشرفته‬
‫مدل های تراکنش – بر اساس ترتيب خواندن و نوشتن‬
‫‪13‬‬
‫تراکنش عمومی تراکنش ی است که در آن دستورهای خواندن و نوشتن از ترتيب خاص ی پيروی نمی کند‪.‬‬
‫مانند‬
‫}‪T1 = {R(D1), R(D2), W(D2), R(D3), W(D1), W(D3), W(D4), C‬‬
‫تراکنش دو مرحله ای تراکنش ی است که در آن تمام دستورهای خواندن پيش از عمل های نوشتن اجرا‬
‫می شوند‪ .‬مانند‬
‫}‪T2 = {R(D1), R(D2), R(D3), W(D1), W(D3), W(D2), W(D4), C‬‬
‫تراکنش محدودشده (يا نوشتن مقيد(‪ ))Constrained Write‬تراکنش ی است که در آن هر فقره‬
‫داده ی ‪ D‬بايد پيش از بهنگام شدن خوانده شود‪ .‬مانند‬
‫}‪T3 = {R(D1), R(D2), W(D2), R(D3), W(D1), W(D3), R(D4), W(D4), C‬‬
‫پايگاه داده پيشرفته‬
‫مدل های تراکنش – بر اساس ترتيب خواندن و نوشتن‬
‫‪14‬‬
‫تراکنش می تواند دو مرحله ای و محدودشده نيز باشد‪ .‬مانند‬
‫}‪T4 = {R(D1), R(D2), R(D3), R(D4), W(D1), W(D3), W(D2), W(D4), C‬‬
‫تراکنش ممکن است براساس مدل عمل (‪ )Action Model‬کار کند در آن هر جفت عمل خواندن و‬
‫نوشتن يک فقره داده بايد بی فاصله و در پی هم انجام شود‪ .‬مانند‬
‫}‪T5 = {[R(D1), W(D1)], [R(D2), W(D2)], [R(D3), W(D3)], [R(D4), W(D4)], C‬‬
‫اگر تراکنش ی بی آنکه داده ای را بخواند آنرا بنويسد می گوييم نوشتن کور (‪ )Blind Write‬انجام‬
‫شده است‪ .‬مانند نوشتن فقره داده ی ‪.D4‬‬
‫}‪T6 = {R(D1), R(D2), W(D2), R(D3), W(D1), W(D3), W(D4), C‬‬
‫پايگاه داده پيشرفته‬
‫مدل های تراکنش – بر اساس تعداد سطوح‬
‫‪15‬‬
‫به منظور رده بندی تراکنش ها بر اساس تعداد سطوح‪ ،‬تراکنش ها به انواع زير طبقه بندی می‬
‫شوند‪:‬‬
‫تراکنش مسطح‬
‫)‪(Flat Transaction‬‬
‫تراکنش تودرتو‬
‫)‪(Nested Transaction‬‬
‫تراکنش توزيع شده‬
‫)‪(Distributed Transaction‬‬
‫تراکنش بسيار بلند‬
‫)‪(Saga Transaction‬‬
‫تراکنش مسطح‪ ،‬که خود شامل هر تعداد عمل (‪ )Action‬می تواند باشد يک نقطه آغاز و يک نقطه‬
‫پايان دارد‪ .‬اين نوع تراکنش برای عمليات پيچيده مناسب نيست‪.‬‬
‫‪BEGIN TRANSACTION‬‬
‫مانند‪:‬‬
‫پايگاه داده پيشرفته‬
‫‪action 1‬‬
‫‪action 2‬‬
‫‪…..‬‬
‫‪action i‬‬
‫‪END TRANSACTION‬‬
‫مدل های تراکنش – بر اساس تعداد سطوح‬
‫‪16‬‬
‫در تراکنش تودرتو هر تراکنش از تعدادی زيرتراکنش مرتبط به هم تشکيل شده است بنابراين‬
‫تراکنش اصلی در واقع درخت يا سلسله مراتبی از تراکنش ها را تشکيل می دهد‪ .‬از اين رو چند نقطه‬
‫آغاز و پايان به چشم می خورد‪ .‬زير تراکنش ها به صورت همروند (‪ )Concurrent‬انجام می‬
‫شوند‪ .‬تراکنش های تودرتو به عنوان مبنايی برای مدل های پيچيده تر تراکنش بکار می رود‪.‬‬
‫پايگاه داده پيشرفته‬
‫‪BEGIN TRANSACTION T1‬‬
‫‪…..‬‬
‫‪BEGIN TRANSACTION T2‬‬
‫‪…..‬‬
‫‪BEGIN TRANSACTION T3‬‬
‫‪…..‬‬
‫) ‪END TRANSACTION T3 (COMMIT T3‬‬
‫‪…..‬‬
‫‪BEGIN TRANSACTION T4‬‬
‫‪…..‬‬
‫) ‪END TRANSACTION T4 (COMMIT T4‬‬
‫‪…..‬‬
‫) ‪END TRANSACTION T2 (COMMIT T2‬‬
‫‪…..‬‬
‫) ‪END TRANSACTION T1 (COMMIT T1‬‬
‫مدل های تراکنش – بر اساس تعداد سطوح‬
‫‪17‬‬
‫تراکنش توزيع شده يک تراکنش از نوع مسطح است که در محيطی توزيع شده اجرا می گردد‪ .‬در يک تراکنش‬
‫تودرتو‪ ،‬وظايف مابين زيرتراکنش ها (‪ )Sub Transactions‬تقسيم می شود حال آنکه در تراکنش توزيع‬
‫شده‪ ،‬داده ها در سايت های گوناگون توزيع می شوند‪.‬‬
‫تراکنش بسيار بلند يک تراکنش از نوع تودرتو است که بر مفهوم تراکنش جبرانگر ( ‪Compensating‬‬
‫‪ )Transaction‬مبتنی است‪ .‬به اين صورت که در اثر عدم اجرای کامل تراکنش ها‪ ،‬تراکنش های جبرانگر‬
‫که به ازای هر زيرتراکنش وجود دارند اجرا می شوند‪ .‬تراکنش های جبرانگر قادرند اثر اجرای تراکنش های‬
‫ناکامل و طرد شده (‪ )Aborted‬را خنثی کنند‪ .‬در اين نوع از تراکنش‪ ،‬خاصيت جدايی برقرار نيست و تراکنش‬
‫می تواند نتيجه بينابينی خود را در اختيار ساير تراکنش های همروند قرار دهد‪.‬‬
‫يک نوع ديگر از تراکنش ها به تراکنش های زنجيره ای (‪ )Chained‬موسوم هستند‪ .‬اين ها مجموعه ای از‬
‫تراکنش ها هستند که در پی هم اجرا شده به گونه ای که کامل شدن يک تراکنش و شروع تراکنش بعدی يک‬
‫عمل تجزيه نشدنی تلقی می گردد و بنابراين از سربار دستور شروع تراکنش اجتناب می شود‪.‬‬
‫پايگاه داده پيشرفته‬
‫تکنيک نقطه نگهداشت (‪)Save Point‬‬
‫‪18‬‬
‫اين اصل که بايد يا همه ی تراکنش تا پايان انجام شود و يا در صورت ناکامل بودن تراکنش‪ ،‬سيستم به‬
‫شرايطی برگردد که انگار تراکنش اصال شروع نشده است در بعض ی از کاربردها به ويژه زمانی که تراکنش های‬
‫يک دامنه‪ ،‬طوالنی هستند مفيد نيست‪ .‬برای حل اين مشکل‪ ،‬راهکار ‪ save point‬يا نقطه نگهداشت معرفی‬
‫شده است‪.‬‬
‫برای ايجاد نقطه نگهداشت‪ ،‬تابعی مانند ‪ Save Work Function‬توسط سيستم اجرا شده و وضعيت‬
‫جاری داده های سيستم را ذخيره می سازد که دارای يک شناسه است‪ .‬برنامه می تواند با درخواست‬
‫‪ Rollback Work‬و دادن شناسه به ‪ Save Point‬مورد نظر برگردد که اين واگرد ممکن است جزيی‬
‫(‪ )Partial‬و يا سراسری (‪ )Global‬باشد‪ .‬می توان نقاط ‪ Save Point‬را در حافظه ماندگار نگهداشت که‬
‫در اين صورت به آن نقطه نگهداشت پايا (‪ )Persistent Save Point‬می گويند‪.‬‬
‫پايگاه داده پيشرفته‬
19
‫برای مطالعه بيشتر‬
1- Database Systems An Application Oriented Approach
Chapter 18, ACID Properties of Transactions.
Chapter 19, Models of Transactions.
Michael Kifer, Arthur Bernstein, Philip M. Lewis
Pearson Addison Wesley Publication, 2006.
.)‫ سيستم مديريت پايگاه داده ها (مفاهيم و تکنيک ها‬-2
.‫ تراکنش‬،‫فصل اول‬
.‫ سيد محمد تقی روحانی رانکوهی‬:‫تاليف‬
.1386 ،13 ‫ مجموعه دانش و فن کامپيوتر‬،‫انتشارات جلوه‬
‫پايگاه داده پيشرفته‬