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

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

مدل تراكنش ها و قفل گذاري

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

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

در اینودی‌بي تمام فعاليت هاي يك كاربر در قالب يك تراكنش انجام مي شود و در صورتي كه گزينه ي 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 به قفلي گفته مي شود كه فقط فضاي خالي بين ركورد ها را قفلگذاري ميكند.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
Feel free to contribute!

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *