Multi-Version Concurrency Control (MVCC) تکنیکی است که توسط PostgreSQL استفاده میشود تا به چندین تراکنش اجازه میدهد تا به دادههای مشابه بدون درگیری یا تاخیر دسترسی داشته باشند. این تضمین می کند که هر تراکنش دارای یک عکس فوری از پایگاه داده است و می تواند بر روی نسخه خود از داده ها کار کند.
جداسازی تراکنش: هر تراکنش نمای ایزوله شده خود را از پایگاه داده دارد که از دیدن داده های Uncommitted یکدیگر (به نام snapshot) جلوگیری می کند.
همزمانی: MVCC اجازه می دهد تا چندین تراکنش به طور همزمان بدون تأثیر بر عملیات یکدیگر اجرا شوند، بنابراین عملکرد سیستم را بهبود می بخشد.
سازگاری: MVCC تضمین میکند که وقتی یک تراکنش به دادهها دسترسی پیدا میکند، همیشه یک دیدگاه ثابت دارد، حتی اگر تراکنشهای دیگر همزمان دادهها را تغییر دهند.
هنگامی که یک تراکنش شروع می شود، یک شناسه تراکنش منحصر به فرد (TXID) دریافت می کند. این شناسه بعداً برای پیگیری تغییرات ایجاد شده توسط تراکنش استفاده می شود.
وقتی یک تراکنش داده ها را می خواند، فقط داده هایی را می بیند که قبل از شروع تراکنش commit شده اند و همچنین تغییراتی را که خودش ایجاد کرده است. این تضمین می کند که هر تراکنش یک دید ثابت از پایگاه داده دارد.
هر زمان که یک تراکنش داده ها را تغییر می دهد (INSERT، UPDATE، یا DELETE)، PostgreSQL یک نسخه جدید از ردیف های تغییر کرده، ایجاد می کند و نسخه جدید را همان TXID تراکنش اختصاص می دهد. این نسخه های جدید “Tuples” نامیده می شوند.
سایر تراکنشهایی که همزمان اجرا میشوند، فقط نسخههای قدیمی ردیفهای اصلاحشده را میبینند، زیرا snapshot آنها هنوز بر اساس وضعیت قبلی دادهها هستند.
هنگامی که یک تراکنش Commitمی شود، PostgreSQL تداخل را بررسی می کند (مانند دو تراکنش که سعی می کنند یک ردیف را تغییر دهند). اگر تداخلی وجود نداشته باشد، تغییرات به طور دائم در پایگاه داده اعمال می شود و سایر تراکنش ها اکنون می توانند داده های به روز شده را ببینند.
مزایای MVCC:
عملکرد بالا: با MVCC، خواندن و نوشتن می تواند به طور همزمان بدون قفل انجام شود، که منجر به بهبود عملکرد، به ویژه در سیستم های بسیار همزمان می شود.
دادههای ثابت: تراکنشها همیشه بر روی یک snapshotثابت از دادهها کار میکنند و تضمین میکنند که دادهها هرگز با تغییرات همزمان خراب نمیشوند.
افزایش :isolationسطح قوی ای از isolation را بین تراکنش ها فراهم می کند که به جلوگیری از خطاهای ناشی از به روز رسانی های همزمان کمک می کند.
معایب MVCC:
افزایش پیچیدگی: پیاده سازی MVCC در یک سیستم پایگاه داده به ساختارهای داده و الگوریتم های پیچیده تری در مقایسه با مکانیسم های قفل سنتی نیاز دارد.
سربار ذخیره سازی: چندین نسخه از هر آیتم داده باید ذخیره شود، که می تواند منجر به افزایش مصرف ذخیره سازی و هزینه تعمیر و نگهداری شود.
به طور کلی، MVCC جزء ضروری مدیریت تراکنش PostgreSQL است که یک سیستم بسیار کارآمد و سازگار برای مدیریت تغییرات همزمان پایگاه داده ارائه میکند.