مدل تراکنش ها و قفل گذاری در اینودی‌بی

سلام.از اینکه سایت  سوفرا  را، برای پاسخ به سوالات خود انتخاب کردید خوشحال هستیم . با محمودی همراه باشید.

مدل تراکنش ها و قفل گذاری

به جهت پیاده سازی یک برنامه پایگاه داده ای در سطح بزرگ و با ترافیک بالا و قابلیت اطمینان زیاد و برای ورود یک کد جایگزین از یک سیستم پایگاه داده ای دیگر و همچنین برای افزایش کارایی مای اسکیوال باید با جزئیات تراکنش ها و قفل گذاری که مربوط به اینودی‌بی می شوند آشنا شوید.

هدف مدل تراکنش اینودی‌بی این است تا ویژگی جدید چند نسخه ای را با ویژگی سنتی قفلگذاری دو مرحله ای ترکیب کند. اینودی‌بی سطر ها را قفل گذاری میکند و سپس پرس و جو ها را به صورت عملیات خواندن سازگار به شیوه اوراکل و به طور پیشفرض انجام میدهد. اطلاعات مربوط به قفل ها به صورت بهینه ذخیره شده اند و نیاز به اینکپسوله کردن آنها نمی باشد. معمولا چند کاربر به طور همزمان می توانند یک سطر یا مجموعه ای از سطر ها را در اینودی‌بی قفلگذاری کنند بدون اینکه دچار مشکل حافظه شود.

در اینودی‌بی تمام فعالیت های یک کاربر در قالب یک تراکنش انجام می شود و در صورتی که گزینه ی autocommit فعال باشد هر دستور در قالب یک تراکنش جداگانه انجام می شود. به طور پیشفرض مای اسکیوال هر نشست را با گزینه autocommit فعال ایجاد میکند و بدین ترتیب بعد از اجرای هر دستور اگر با خطا مواجه نشود تغییرات اعمال می شوند و در صورتی که با خطا مواجه شود نحوه اعمال و یا بازگشت به عقب به نوع خطا بستگی داد. یک نشست که autocommit برای آن فعال باشد می تواند یک تراکنش چند دستوری را به وسیله شروع کردن آن با start_transaction یا begin و خاتمه ی آن با commit یا rollback انجام دهد.

در صورتی که برای یک نشست autocommit فعال نباشد آن نشست همیشه دارای یک تراکنش باز بوده و با اجرای دستور commit یا rollback آن تراکنش بسته شده و یک تراکنش جدید ایجاد می شود.

دستور commitبه این معنی است که تغییرات اعمال شده توسط یک تراکنش به صورت دائمی اعمال می شوند و برای سایر نشست ها قابل مشاهده خواهند بود.

از جهت دیگر دستور rollback بدین معنی است که تغییرات اعمال نخواهند شد و همه تغییرات تراکنش جاری لغو می شوند.

با اجرای هریک از دستوراتcommit و rollback تمام قفل های اعمال شده توسط تراکنش آزاد می شوند.

بنا به تعریف سطوح ایزوله سازی در مایاسکیوال ۱۹۹۲ سطح پیشفرض در اینودی‌بی برابر REPEATEABLE_READمیباشد. همچنین اینودی‌بی تمام چهار سطح پیشنهاد شده( READ_UNCOMMITED ، READCOMMITED ،‌ REPEATEABLE_READ و SERIALIZABLE. ) توسط استاندارد مای اسکیوال را ارائه می دهد.

کاربر می تواند سطح ایزوله سازی یک تراکنش یا تراکنش های آتی را با استفاده از دستور SETTRANSACTION تعیین نماید. برای تغییر دادن سطح ایزوله سازی سرور باید از دستور –transaction-isolation در خط فرمان یا فایل پیکربندی استفاده نمود.

در سطح قفلگذاری سطر ها اینودی‌بی معمولا از روش قفل گذاری next-key استفاده می کند. این بدین معنی است که اینودی‌بی علاوه بر رکورد های شاخص می تواند فضای خالی قبل از آنها را نیز قفل گذاری نماید تا از عملیات درج که ممکن است توسط نشست های دیگر درآن فضا انجام شود جلوگیری نماید.

یک قفل next-key بدین معنی است که یک رکورد شاخص و فضای خالی قبل از آن قفل گذاری می شود.

یک قفل gap به قفلی گفته می شود که فقط فضای خالی بین رکورد ها را قفلگذاری میکند.


دیدگاهتان را بنویسید

We are glad you have chosen to leave a comment. Please keep in mind that comments are moderated according to our comment policy.