خبرنامه

مزایای عضویت

تبلیغات

نیاز به اسپانسر تنیس|تیم تنیس روی میز تبلیغات در سایت|سایت پرشین کیا

آمار سایت


6 : تعداد افراد آنلاین
سال تاسیس : 16/12/85
آی پی شما : 54.161.45.156
تعداد بازدیدها : 2366337
آخرین به روز رسانی : 95/01/28
تعداد اخبار : ۱۸۷
عضو خبرنامه : 2998

تبلیغات در سایت

اخبار سایت


کد خبر : 143
تاريخ انتشار : ۱۳۹۱/۰۹/۰۳ - ۱۱:۲۸:۵۵  
تعداد بازديد : ۲۲۱۵  
سرویس : شبکه  
مشاهده نسخه چاپی این مطلب  
ارسال به دوستان  

  • انواع قفل در SQL Server
  • SQL Server به منظور اطمینان از اینکه اطلاعات خوانده شدن، تغییر نخواهند کرد از مکانیزمی به نام Lock استفاده میکند. قفل ها این اطمینان را به ما میدهد که اطلاعاتی که در حال تغییر آنها هستیم، تحت تاثیر سایر تغییرات قرار نخواهد گرفت و اطلاعای که میخواهیم بخوانیم در حال تغییر به وسیله پردازش دیگری نیست. زمانی که در یک Connection جدولی قفل گذاری میشود، تا زمان آزاد شدن آن، سایر Connectionها اجازه قفل کردن و اعمال تغییرات روی آن جدول را به صورت همزمان ندارند.
    SQL Server شش نوع قفل دارد که عبارتند از:
    Shared
    Update
    Exclusive
    Intent
    Schema
    Bulk Update

    4 نوع قفل اول این قابلیت را دارند که روی سطرهای جدول هم قرار داده شوند و ۲ نوع آخر روی جدول قرار میگیرند.
    Shared Locks:
    این نوع قفل اجازه میدهد چندین Connection و تراکنش مختلف اطلاعاتی که روی آنها قفل گذاشه شده است بخوانند، اما اجازه تغییر این اطلاعات تا زمانی که این قفل روی آنها هست وجود ندارد. زمانی که اطلاعات خوانده شد، این قفل از روی اطلاعات برداشته میشود، اما این شرایط ممکن است بنا به دلایلی تغییر کند. ممکن است در طول یک تراکنش این قفل روی اطلاعات نگه داشته شود، تا مطمئن شویم اطلاعاتی که بر پایه آنها داریم کار میکنیم در طول انجام عملیات ما تغییر نخواهد کرد. مثلا فرض کنید قرار است از یک حساب بانکی ۱۰۰ تومان برداشت شود، در آغاز کار چک میشود که موجودی حساب کافی باشد، اما باید شرایطی را ایجاد کنیم که تا زمان کامل شدن این عملیات، امکان تغییر مقدار پول موجود در حساب به وسیله سایر تراکنش ها وجود نداشته باشد.
    Update Locks:
    از اتفاقات بدی که در برنامه نویسی می افتد و عموما ناشی از یک پیاده سازی بد میباشد، بن بست است، اگر ۲ پردازش همزمان روی یک رکورد، قفل بگذارند و در انتها هر دو پردازش بخواهند آن رکورد را تغییر دهند، هر دو منتظر میمانند تا قفل از روی رکورد برداشته شود، اما این انتظار هرگز پایان نخواهد یافت و بن بست اتفاق می افتد، در این شرایط SQL Server بطور اتوماتیک پردازش کم ارزش تر را انتخاب میکند و آن را از بین میبر و خطای ۱۲۰۵ ارسال میکند و پردازش با ارزش تر میتواند کار خود را به پایان برساند.
    برای جلوگیری از بن بست، SQL Server قفل جدیدی به نام Update Locks معرفی کرد که در بعضی شرایط میتواند جایگزین Shared Lock شود. تنها یک پردازش میتواند این نوع قفل را روی ردیف قرار دهد و اجازه نمیدهد سایر پردازش ها روی این ردیف قفل دیگری قرار دهند.
    Exclusive Locks:
    این قفل برای نویسنده های اطلاعات تعبیه شده است، هنگامی که قرار است اطلاعاتی در یک ردیف نوشته شود، این قفل روی آن ردیف قرار داده میشود و تا پایان نوشتن اطلاعات این قفل روی آن ردیف باقی می ماند.
    Intent Locks:
    این قفل برای پیشگری از قرار گرفتن بیش از یک قفل exclusive روی منبعی است که در حال حاضر یک قفل exclusive دارد. اگر شما یک رکورد را در یک جدول بخواهید Update کنید، روی ردیفی که در حال ویرایش آن هستید قفلی از جنس exclusive قرار میگیرد و قفلی از جنس intent روی جدولی که حاوی آن رکورد میباشد قرار میگیرد. برای روشن شدن این مطلب به مثال دقت کنید. فرض کنید شما به هتلی میروید و اطاق ۴۰۴ از این هتل در اختیار شما قرار داده میشود. تا زمانی که این اتاق در اختیار شماست هیچ کس نمیتواند به جز شما از آن اتاق استفاده کند. این یک قفل Exclusive است. شما یکی از اتاق های هتل را در اختیار داردید، پس صاحب هتل نمیتواند تمامی اتاق های هتل را هم به شخص دیگری اجاره دهد، چون یک اتاق مال شماست، این هم یک قفل Intent است.
    Schema Locks:
    دو نوع از این قفل در SQL Server وجود دارد. Sch – M که از دسترسی به اطلاعات جدول هنگامی که در حال تغییر جدول هستیم جلوگیری میکند. مثلا هنگامی که اعمالی مانند تغییر نام ستون ها یا کم و زیاد کردن ستون ها را انجام میدهیم. نوع دوم Sch- S است که از اعمال تغییرات روی جدولی که در حال دسترسی به داده های آن هستیم پیشگیری میکند.
    Bulk Update Locks:
    هنگامی که عملیات بارگذاری مقدار زیادی اطلاعات قرار است انجام شود از این نوع قفل استفاده میگردد و تا پایان عملیات، دسترسی به اطلاعات جدولی که این قفل روی آن قرار داده شده است، ممکن نیست.