مدل همزمانی خوشبینانه (Optimistic Concurrency Control)
ویژگیها:
- بدون قفلگذاری:
تراکنشها به دادهها دسترسی دارند و میتوانند بدون قفل کردن آنها عملیات خواندن و نوشتن انجام دهند. - مبتنی بر نسخهها:
هر تراکنش نسخهای از دادهها را نگه میدارد و در پایان تراکنش بررسی میکند که آیا دادهها تغییر کردهاند یا خیر. اگر تغییرات متناقض باشند، تراکنش باطل (Rollback) میشود. - استفاده از نسخههای قدیمی داده:
دادههای قدیمی برای تراکنشهایی که هنوز تکمیل نشدهاند در دسترس است.
مزایا:
- عملکرد بالا در سیستمهایی با رقابت پایین روی دادهها.
- حذف بنبستها (Deadlock).
- مناسب برای محیطهایی که بیشتر تراکنشها خواندن دادهها را انجام میدهند.
معایب:
- افزایش احتمال بازگشت تراکنشها (Rollback) در صورت بروز تعارض.
- نیازمند فضای ذخیرهسازی بیشتر برای نگهداری نسخههای قدیمی داده.
مدل همزمانی بدبینانه (Pessimistic Concurrency Control)
ویژگیها:
- قفلگذاری:
تراکنشها با قفل کردن ردیفها یا جدولها از دسترسی سایر تراکنشها به دادهها جلوگیری میکنند.- قفل خواندن: فقط خواندن دادهها مجاز است.
- قفل نوشتن: هیچ تراکنش دیگری نمیتواند داده را بخواند یا تغییر دهد.
- انتظار تراکنشها:
اگر تراکنشی در حال قفلگذاری روی دادهها باشد، سایر تراکنشها باید منتظر بمانند تا قفل آزاد شود.
مزایا:
- مناسب برای سیستمهایی با رقابت بالا روی دادهها.
- تضمین یکپارچگی دادهها در تراکنشهای پیچیده و حساس.
- جلوگیری از ایجاد تغییرات متناقض توسط تراکنشهای موازی.
معایب:
- کاهش عملکرد به دلیل انتظار تراکنشها برای آزاد شدن قفلها.
- احتمال ایجاد بنبست (Deadlock) در صورت رقابت همزمان تراکنشها برای دسترسی به منابع.
مقایسه خوشبینانه و بدبینانه
ویژگی | مدل خوشبینانه | مدل بدبینانه |
---|---|---|
قفلگذاری | ندارد | دارد |
رقابت روی دادهها | مناسب برای رقابت کم | مناسب برای رقابت زیاد |
احتمال بنبست (Deadlock) | ندارد | بالا |
بازگشت تراکنش (Rollback) | زیاد | کم |
پیچیدگی مدیریت | متوسط | بالا |
کارایی | بالا در محیطهای خواندن محور | بالا در محیطهای نوشتن محور |
کاربردها
- مدل خوشبینانه:
- سیستمهایی که بیشتر تراکنشها شامل خواندن دادهها است.
- محیطهای با حجم زیاد تراکنشهای کوتاهمدت.
- پایگاه داده Postgres به دلیل استفاده از MVCC پیشفرض از این مدل بهره میبرد.
- مدل بدبینانه:
- سیستمهایی که بیشتر تراکنشها شامل نوشتن دادهها است.
- بانکها و سیستمهای مالی که یکپارچگی دادهها اولویت اصلی است.
- SQL Server بهصورت پیشفرض از این مدل استفاده میکند.
جمعبندی:
- مدل خوشبینانه برای سیستمهای با رقابت پایین و نیازمند کارایی بالا مناسب است.
- مدل بدبینانه برای محیطهای حساس به داده و دارای تراکنشهای پیچیده و سنگین بهترین انتخاب است.
زمانیکه از MS-SQL استفاده میکنید لزوم فعالسازی RCSI بسیار مهم است بخصوص در محصولاتی نظیر سرویس دسک پلاس
در سناریوی سرویس دسک پلاس پایگاه داده Postgres به طور پیش فرض دارای مدل خوش بینانه است. از سوی دیگر، SQL Server در ابتدا با استفاده از مدل بدبینانه طراحی شده بود، اما به دلیل مشکلات عملکردی در آن، بعدا گزینه ای در SQL Server برای امکان کنترل همزمانی خوش بینانه ارائه شد. به این می گویند RCSI شده.
نحوه تأیید/فعال کردن RCSI
برای بررسی اینکه آیا RCSI فعال شده است یا خیر:
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE [name] = '<db_name>'
اگر با این کار 1 برگردد، RCSI فعال است. در غیر این صورت، دستورالعمل های زیر را برای فعال کردن آن دنبال کنید.
دستورالعمل فعال کردن RCSI:
تکمیل این فرآیند ممکن است زمان قابل توجهی طول بکشد. لطفا این کار را در آخر هفته / در ساعات تعطیل انجام دهید زیرا نیاز به توقف سرویس دارد.
1. سرویس ServiceDesk Plus را استاپ کنید. اگر برنامه دیگری (شاید ابزارهای گزارشدهی) به پایگاه داده servicedesk متصل شود، باید آنها را نیز متوقف کنید.
2. وارد SQL Management Studio شوید و کوئری های زیر را اجرا کنید...
I. پایگاه داده را آفلاین کنید.
USE master
GO
ALTER DATABASE "<db_name>" SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
ii. ضربه فوری متعهد خواندن را فعال کنید
ALTER DATABASE "<db_name>" SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
GO
III. پایگاه داده را به صورت آنلاین برگردانید
USE master
GO
ALTER DATABASE "<db_name>" SET ONLINE
GO
3. درنهایت بررسی کنید که آیا RCSI با استفاده از پرس و جو ذکر شده در بالا فعال است یا خیر؟ اکنون میتوانید ServiceDesk Plus را استارت کنید.