انتخاب سطح مناسب ایزولاسیون
سطح ایزولاسیون تراکنش تعیین میکند تراکنشهای همزمان تا چه حد از تغییرات یکدیگر تأثیر میپذیرند. انتخاب درست این سطح، تعادلی بین صحت داده و کارایی همزمانی برقرار میکند. SQL Server چهار سطح استاندارد به همراه یک سطح اضافه دارد.
سطح READ UNCOMMITTED پایینترین سطح است که اجازه میدهد یک تراکنش، دادهی هنوز commitنشدهی تراکنش دیگر را بخواند؛ این حالت با نام Dirty Read شناخته میشود و ریسک خواندن دادهی نادرست را دارد:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Orders;
سطح REPEATABLE READ تضمین میکند اگر یک تراکنش دو بار همان ردیف را بخواند، مقدار یکسانی دریافت کند، اما همچنان ممکن است ردیفهای جدید (Phantom Read) در تکرار دوم ظاهر شوند. بالاترین سطح، SERIALIZABLE است که کاملاً از تداخل جلوگیری میکند اما کارایی همزمانی را به شدت کاهش میدهد:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
سطح ویژهی SNAPSHOT، بهجای قفل کردن، از نسخهای از داده در لحظهی شروع تراکنش استفاده میکند و باعث میشود خوانندگان هرگز منتظر نویسندگان نمانند؛ این سطح در بسیاری از برنامههای پرترافیک امروزی ترجیح داده میشود. انتخاب سطح مناسب باید بر اساس نیاز واقعی برنامه به صحت داده در برابر سرعت پاسخدهی انجام شود.