انواع Lock در SQL به زبان ساده (و نکات کاربردی)
حالت های قفل در SQL شامل انواع مختلفی از قفل ها است. انتخاب حالت قفل بستگی به منبعی دارد که باید قفل شود. سه نوع قفل زیر برای قفل کردن در سطح ردیف و صفحه استفاده می شود:
- Shared (S)
- Exclusive (X)
- Update (U)
توجه: مبحث زیر به مدل هم زمانی بدبینانه مربوط می شود. مدل همزمانی خوشبینانه با استفاده از نسخه سازی ردیف انجام می شود. (منبع مطلب)
یک قفل اشتراکی یا Shared یک منبع (صفحه یا ردیف) را فقط برای خواندن قفل می کند. سایر فرآیند ها نمی توانند منبع قفل شده را تا زمانی که قفل باقی می ماند، تغییر بدهند. از سوی دیگر، چندین فرآیند می توانند یک قفل اشتراکی را به طور هم زمان برای یک منبع نگه دارند، یعنی چندین فرآیند می توانند منبع قفل شده به صورت مشترک را بخوانند.
آموزش دستور inner join در sql (به زبان ساده)
یک قفل انحصاری یا Exclusive یک صفحه یا ردیف را برای استفاده انحصاری از یک تراکنش قفل می کند. این قفل برای دستورات DML (Update، Insert و Delete) که منبع را تغییر می دهند، استفاده می شود. اگر فرآیند دیگری یک قفل اشتراکی یا انحصاری روی منبع داشته باشد، نمی توان یک قفل انحصاری تنظیم کرد، یعنی به هر منبع فقط یک قفل انحصاری اختصاص داده می شود. وقتی که یک قفل انحصاری برای صفحه (یا ردیف) تنظیم می شود، هیچ قفل دیگری را نمی توان روی همان منبع اعمال کرد.
توجه:
سیستم پایگاه داده به طور خودکار حالت قفل مناسب را با توجه به نوع عملیات (خواندن یا نوشتن ) انتخاب می کند.
قفل به روزرسانی یا Update lock فقط در صورتی قابل اعمال است که آپدیت یا قفل انحصاری دیگری وجود نداشته باشد. از طرف دیگر، می توان آن را روی اشیایی که قبلا قفل اشتراکی داشته اند، اعمال کرد. (در این حالت، قفل آپدیت یک قفل اشتراکی دیگر را روی همان شی دارد.) وقتی تراکنشی که شی را تغییر می دهد انجام شود، اگر قفل دیگری روی شی وجود نداشته باشد، قفل آپدیت به یک قفل انحصاری تبدیل می شود. فقط یک قفل آپدیت برای هر شی وجود دارد.
توجه:
قفل های آپدیت از انواع خاصی از Deadlock یا بن بست های رایج جلوگیری می کنند.
پایگاه داده SQL Server رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی بلافاصله ... دانلود:
جدول 1، ماتریس سازگاری را برای قفل های اشتراکی ، انحصاری و به روز رسانی نشان می دهد. ماتریس به صورت زیر تفسیر می شود: فرض کنید که تراکنش T1 قفلی را همان طور که در ستون اول ماتریس مشخص شده است نگه میدارد، و فرض کنید یک تراکنش دیگر مثل T2 یک قفل را همان طور که در عنوان ستون مربوطه مشخص شده است، لازم دارد. در این مورد، ” yes ” نشان می دهد که قفل T2 ممکن است، در حالی که ” No ” نشان دهنده تضاد با قفل موجود است.
در کنار این مطلب حتما دانلود کنید: دانلود رایگان آموزش کامل sql (فیلم+جزوه pdf)
توجه:
موتور پایگاه داده از سایر فرم های قفل مثل Latch و Spinlock پشتیبانی می کند.
در سطح جدول ، پنج نوع قفل مختلف وجود دارد:
- اشتراکی (S )
- اختصاصی (X )
- اشتراکی هدفی یا Intent shared (IS)
- انحصاری هدفی یا Intent exclusive (IX)
- اشتراکی به همراه انحصاری هدفی یا Shared with intent exclusive (SIX)
قفل های اشتراکی و انحصاری شبیه به قفل های سطح ردیف ( یا سطح صفحه ) با نام های مشابه هستند. به طور کلی، قصد یک قفل هدفی قفل کردن نزدیک ترین منبع پایینی در سلسله مراتب اشیاء پایگاه داده است. بنابراین، قفل های قصدی در یک سطح در سلسله مراتب شی بالاتر از سطحی قرار می گیرند که فرآیند قصد قفل کردن آن را دارد. این یک روش کارآمد برای تشخیص امکان پذیر بودن چنین قفل هایی است و از قفل شدن سایر فرآیند ها قبل از دستیابی به قفل های مورد نظر جلوگیری می کند.
حتما دانلود کنید: آموزش پایگاه داده از صفر تا صد با 23 درس
جدول 1: ماتریس سازگاری برای قفل های اشتراکی، انحصاری و به روز رسانی
اشتراکی | به روز رسانی | انحصاری | |
اشتراکی | بله | بله | نه |
به روزرسانی | بله | نه | نه |
انحصاری | نه | نه | نه |
جدول 2 ماتریس سازگاری انواع قفل های جدول را نشان می دهد. ماتریس دقیقا مثل ماتریس جدول 1 تفسیر شده است.
جدول 2 ماتریس سازگاری برای انواع قفل های جدول
اشتراکی | انحصاری | اشتراکی هدفی | انحصاری هدفی | اشتراکی به همراه انحصاری هدفی | |
اشتراکی | بله | نه | بله | نه | نه |
انحصاری | نه | نه | نه | نه | نه |
اشتراکی هدفی | بله | نه | بله | بله | بله |
انحصاری هدفی | نه | نه | بله | نه | نه |
اشتراکی به همراه انحصاری هدفی | نه | نه | بله | نه | بله |
آموزش دستور update در sql (به زبان ساده)