۱۴۰۴/۰۶/۲۹ Nebular

isolation level در SQL server

🔹 Isolation Level در SQL Server چیه؟

Isolation Level تعیین می‌کنه وقتی چند Transaction هم‌زمان روی دیتابیس اجرا میشن، چقدر از همدیگه جدا (ایزوله) باشن.
هر چی ایزولیشن بالاتر باشه:

  • صحت داده بیشتر ✅
  • ولی همزمانی (Concurrency) کمتر ❌

🔹 مشکلاتی که Isolation Level کنترل می‌کنه

سه مشکل کلاسیک که ممکنه در تراکنش‌های همزمان پیش بیاد:

  1. Dirty Read
    خواندن داده‌ای که هنوز Commit نشده.
    اگر بعداً ROLLBACK بشه، داده‌ای که خونده‌ای وجود خارجی نداره.
  2. Non-Repeatable Read
    یک تراکنش یک ردیف را دوبار می‌خونه، ولی بین این دو بار، تراکنش دیگه‌ای اون ردیف رو تغییر داده → مقدار عوض میشه.
  3. Phantom Read
    یک تراکنش شرطی روی چند ردیف اجرا می‌کنه، ولی دفعه بعدی که همون شرط رو اجرا می‌کنه، به خاطر Insert/ Delete/ Update تراکنش دیگه، تعداد ردیف‌ها تغییر کرده.

🔹 انواع Isolation Level در SQL Server

  1. READ UNCOMMITTED
    • ضعیف‌ترین سطح.
    • اجازه‌ی Dirty Read می‌ده.
    • سریع‌ترین ولی ناامن‌ترین.
  2. READ COMMITTED (پیش‌فرض)
    • جلوی Dirty Read رو می‌گیره.
    • ولی Non-Repeatable Read و Phantom Read ممکنه رخ بدن.
    • پیش‌فرض در SQL Server همین هست.
  3. REPEATABLE READ
    • جلوی Dirty Read و Non-Repeatable Read رو می‌گیره.
    • اما Phantom Read هنوز ممکنه.
  4. SERIALIZABLE
    • قوی‌ترین سطح.
    • جلوی همه مشکلات بالا (Dirty, Non-Repeatable, Phantom) رو می‌گیره.
    • ولی شدیداً باعث کاهش کارایی میشه چون قفل زیادی می‌زنه.
  5. 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
Accept Cookies
[your-shortcode]