۱۴۰۴/۰۶/۲۹
isolation level در SQL server
🔹 Isolation Level در SQL Server چیه؟
Isolation Level تعیین میکنه وقتی چند Transaction همزمان روی دیتابیس اجرا میشن، چقدر از همدیگه جدا (ایزوله) باشن.
هر چی ایزولیشن بالاتر باشه:
- صحت داده بیشتر ✅
- ولی همزمانی (Concurrency) کمتر ❌
🔹 مشکلاتی که Isolation Level کنترل میکنه
سه مشکل کلاسیک که ممکنه در تراکنشهای همزمان پیش بیاد:
- Dirty Read
خواندن دادهای که هنوز Commit نشده.
اگر بعداً ROLLBACK بشه، دادهای که خوندهای وجود خارجی نداره. - Non-Repeatable Read
یک تراکنش یک ردیف را دوبار میخونه، ولی بین این دو بار، تراکنش دیگهای اون ردیف رو تغییر داده → مقدار عوض میشه. - Phantom Read
یک تراکنش شرطی روی چند ردیف اجرا میکنه، ولی دفعه بعدی که همون شرط رو اجرا میکنه، به خاطر Insert/ Delete/ Update تراکنش دیگه، تعداد ردیفها تغییر کرده.
🔹 انواع Isolation Level در SQL Server
- READ UNCOMMITTED
- ضعیفترین سطح.
- اجازهی Dirty Read میده.
- سریعترین ولی ناامنترین.
- READ COMMITTED (پیشفرض) ✅
- جلوی Dirty Read رو میگیره.
- ولی Non-Repeatable Read و Phantom Read ممکنه رخ بدن.
- پیشفرض در SQL Server همین هست.
- REPEATABLE READ
- جلوی Dirty Read و Non-Repeatable Read رو میگیره.
- اما Phantom Read هنوز ممکنه.
- SERIALIZABLE
- قویترین سطح.
- جلوی همه مشکلات بالا (Dirty, Non-Repeatable, Phantom) رو میگیره.
- ولی شدیداً باعث کاهش کارایی میشه چون قفل زیادی میزنه.
- SNAPSHOT
- با استفاده از Versioning دادهها، تصویری ثابت از دادهها در زمان شروع تراکنش میسازه.
- جلوی همه مشکلات بالا رو میگیره، ولی نیاز به فعال بودن READ COMMITTED SNAPSHOT در دیتابیس داره.
- باعث افزایش مصرف TempDB میشه.
🔹 دستورات تنظیم Isolation Level
میتونی داخل Session یا تراکنش تنظیم کنی:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
بعدش:
BEGIN TRAN
-- دستورات SQL
COMMIT TRAN
Accept Cookies
[your-shortcode]