آموزش سیستم مدیریت پایگاه داده - تراکنش
تراکنش میتواند به عنوان یک گروه از وظایف تعریف شود. یک وظیفه تکی واحد حداقلی است که نمیتوان آن را به بخشهای کوچکتر تقسیم کرد.
بیایید مثالی از یک تراکنش ساده را بررسی کنیم. فرض کنید یک کارمند بانک مبلغ 500 روپیه را از حساب آقای A به حساب آقای B انتقال میدهد. این تراکنش بسیار ساده و کوچک شامل چندین وظیفه سطح پایین است.
حساب آقای A
Open_Account(A)
Old_Balance = A.balance
New_Balance = Old_Balance - 500
A.balance = New_Balance
Close_Account(A)
حساب آقای B
Open_Account(B)
Old_Balance = B.balance
New_Balance = Old_Balance + 500
B.balance = New_Balance
Close_Account(B)
ویژگیهای ACID
تراکنش یک واحد بسیار کوچک از یک برنامه است و ممکن است شامل چندین وظیفه سطح پایین باشد. یک تراکنش در یک سیستم پایگاه داده باید ویژگیهای Atomicity (اتمیتی)، Consistency (یکپارچگی)، Isolation (تعزیز) و Durability (ماندگاری) را حفظ کند - که به طور معمول به عنوان ویژگیهای ACID شناخته میشوند - تا دقت، کامل بودن و سالم بودن داده را تضمین کند.
-
اتمیتی (Atomicity) - این ویژگی بیان میکند که یک تراکنش باید به عنوان یک واحد اتمیک (اتمی) تلقی شود، به این معنی که یا همه عملیات آن اجرا میشود یا هیچکدام. در پایگاه داده نباید وضعیتی وجود داشته باشد که در آن یک تراکنش به طور جزئی تکمیل شده باشد. وضعیتها باید قبل از اجرای تراکنش یا پس از اجرا/لغو/خطا در تراکنش تعریف شوند.
-
یکپارچگی (Consistency) - پایگاه داده باید پس از هر تراکنش در وضعیت یکپارچه قرار بگیرد. هیچ تراکنشی نباید تأثیر مخربی بر دادههای موجود در پایگاه داده داشته باشد. اگر پایگاه داده قبل از اجرای یک تراکنش در وضعیت یکپارچه بود، باید پس از اجرای تراکنش همچنان یکپارچه بماند.
-
ماندگاری (Durability) - پایگاه داده باید به اندازه کافی ماندگار باشد تا تمام بهروزرسانیهای اخیر خود را در صورتی که سیستم خراب شود یا راهاندازی مجدد شود، حفظ کند. اگر یک تراکنش یک بخشی از داده را در پایگاه داده بهروزرسانی کند و تأیید کند، آنگاه پایگاه داده دادههای تغییر یافته را نگه میدارد. اگر یک تراکنش تأیید میشود اما سیستم قبل از اینکه داده بر روی دیسک ذخیره شود، خراب شود، در آن صورت داده بعد از بازگشت سیستم به عملیات بهروزرسانی خواهد شد.
-
تعزیز (Isolation) - در یک سیستم پایگاه داده که در آن چندین تراکنش به صورت همزمان و همروند اجرا میشوند، ویژگی تعزیز بیان میکند که همه تراکنشها به طوری اجرا و انجام میشوند که بهطور مانند تنها یک تراکنش در سیستم است. هیچ تراکنشی تأثیری بر وجود هر تراکنش دیگری نخواهد داشت.
قابل سریالسازی (Serializability)
وقتی چندین تراکنش در یک محیط چندبرنامهای توسط سیستم عامل اجرا میشوند، احتمال وقوع تداخل بین دستورات یک تراکنش با یک تراکنش دیگر وجود دارد.
-
برنامه زمانبندی (Schedule) - یک توالی اجرای زمانی یک تراکنش به عنوان یک برنامه زمانبندی شناخته میشود. یک برنامه زمانبندی میتواند شامل بسیاری از تراکنشها باشد، هر کدام شامل تعدادی دستورالعمل/وظیفه باشند.
-
برنامه زمانبندی سریال (Serial Schedule) - این برنامه زمانبندی است که تراکنشها به گونهای مرتب شده اند که یک تراکنش ابتدا اجرا میشود. هنگامی که تراکنش اول چرخه خود را کامل میکند، سپس تراکنش بعدی اجرا میشود. تراکنشها پس از یکدیگر ترتیب داده شدهاند. این نوع برنامه زمانبندی به عنوان برنامه زمانبندی سریال شناخته میشود، زیرا تراکنشها به صورت سریال اجرا میشوند.
در یک محیط چندتراکنشی، برنامههای زمانبندی سریال به عنوان یک معیار مورد توجه قرار میگیرند. توالی اجرای یک دستور در یک تراکنش نمیتواند تغییر کند، اما دو تراکنش ممکن است دستورات خود را به صورت تصادفی اجرا کنند. این اجرا اگر دو تراکنش مستقل از هم و بر روی بخشهای مختلفی از داده کار میکنند، هیچ آسیبی نمیرساند؛ اما در صورتی که این دو تراکنش بر روی همان داده کار کنند، نتایج ممکن است متفاوت باشد. این نتیجه متغیر همیشگی ممکن است باعث ورود پایگاه داده به وضعیت ناپایدار شود.
برای حل این مشکل، اجازه میدهیم برنامههای زمانبندی تراکنش را به صورت همروند اجرا کنند، اگر تراکنشهای آن سریپذیر یا دارای یک رابطه معادلی باشند.
برنامههای زمانبندی معادل
یک برنامه زمانبندی معادل میتواند از انواع زیر باشد −
معادل نتیجه
اگر دو برنامه زمانبندی پس از اجرا نتایج یکسانی را تولید کنند، گفته میشوند که معادل نتیجه دارند. آنها ممکن است برای برخی مقادیر نتایج یکسان و برای مجموعهای دیگر از مقادیر نتایج متفاوت داشته باشند. به همین دلیل، این معادلت به طور کلی معتبر مورد توجه قرار نمیگیرد.
معادل نمای (نمایشی)
دو برنامه زمانبندی معادل نمایی هستند اگر تراکنشها در هر دو برنامه زمانبندی اقدامات مشابهی را به یک شکل مشابه انجام دهند.
برای مثال −
-
اگر T داده اولیه را در S1 بخواند، آنگاه نیز داده اولیه را در S2 میخواند.
-
اگر T مقداری که J نوشته است را در S1 بخواند، آنگاه نیز مقداری که J نوشته است را در S2 میخواند.
-
اگر T نوشتن نهایی را بر روی مقدار داده در S1 انجام دهد، آنگاه نیز نوشتن نهایی را بر روی مقدار داده در S2 انجام میدهد.
معادل تضاد
دو برنامه زمانبندی تضاد دارند اگر دارای ویژگیهای زیر باشند −
- هر دو متعلق به تراکنشهای جداگانه هستند.
- هر دو به آیتم داده یکسان دسترسی مییابند.
- حداقل یکی از آنها عملیات "نوشتن" است.
دو برنامه زمانبندی دارای چندین تراکنش با عملیاتهای تضادی معادل تضاد هستند، اگر و فقط اگر −
- هر دو برنامه زمانبندی شامل همان مجموعه تراکنش باشند.
- ترتیب جفتهای تضادی عملیات در هر دو برنامه زمانبندی حفظ شود.
توجه − برنامههای زمانبندی معادل نمایی از نوع معادل نمایشی هستند و برنامههای زمانبندی معادل تضادی از نوع معادل تضادی هستند. تمام برنامههای زمانبندی معادل تضادی همچنین معادل نمایشی هستند.
وضعیتهای تراکنش
یک تراکنش در پایگاه داده میتواند در یکی از وضعیتهای زیر قرار بگیرد −
-
فعال − در این وضعیت، تراکنش در حال اجرا است. این وضعیت اولیه هر تراکنش است.
-
جزئیاً تایید شده − زمانی که یک تراکنش عملیات نهایی خود را اجرا میکند، در وضعیت جزئیاً تایید شده قرار دارد.
-
ناموفق − اگر هر یک از بررسیهایی که توسط سیستم بازیابی پایگاه داده انجام میشود ناموفق باشد، تراکنش در وضعیت ناموفق قرار دارد. تراکنش ناموفق دیگر نمیتواند ادامه یابد.
-
لغو شده − اگر هر یک از بررسیها ناموفق باشد و تراکنش به وضعیت ناموفق دست یابد، مدیر بازیابی تمام عملیات نوشتن را بر روی پایگاه داده باز میگرداند تا پایگاه داده به حالت اولیهاش قبل از اجرای تراکنش برگردد. تراکنشهای در این وضعیت لغو شده نامیده میشوند. ماژول بازیابی پایگاه داده میتواند یکی از دو عملیات زیر را پس از لغو یک تراکنش انتخاب کند −
- شروع مجدد تراکنش
- لغو تراکنش
-
تایید شده − اگر یک تراکنش همه عملیات خود را با موفقیت اجرا کند، تراکنش تایید شده است. همه تأثیرات آن حالا به صورت دائمی در سیستم پایگاه داده اعمال شدهاند.