antisocial
شنبه 27 تیر 1388, 20:11 عصر
قبلا بعضی از دوستان راجع به این موضوع چند سوال مطرح کرده بودند من هم
تصمیم گرفتم که هرچه اطلاعات راجع بهسطوح ایزولاسیون دارم در اختیار همه بذارم :
---------------------------------------------------------------------------------------
به طور کلی همزمانی تراکنش ها باعث 4 نوع خطا میشوندکه تنها به ذکرنام آنها میپردازیم :
1.خواندن نامساعد dirtyread
2.تغییرات از دست رفته lastupdates
3.خواندن های غیر تکراری unrepeatableread
4.فانتوم ها
set transaction isolation level read uncommited
در فرمان بالا هیچ گونه قفلی گذاشته نمیشود
set transaction isolation level read commited
فرمان بالا جلوی dirty read را میگیرد
set transaction isolation level repeatable read
فرمان بالا هم جلوی خواندن های تکراری را میگیرد و هم dirty read
set transaction isolation level serializable
فرمان بالا به غیر از lastupdate از همه ی خطاها جلوگیری میکند
مثال:
set transaction isolation level repeatable read
begin transaction
select * from orders
commit transaction
قفلها :
قفلها اشیائی هستند که از بروز اشکالات ناشی از اجرای هم زمان تراکنشها جلوگیری به عمل میاورند.
قفلها میتوانند روی سطوح مختلفی مانند سطرها،صفحه ها،جداول،پایگاه های داده و غیره قرار گیرند و از انجام عملیات همزمان جلوگیری به عمل آورند،قفلها را میتوان به گروه های زیر تقسیم نمود:
قفل اشتراکی (shared lock) یا shared(s
این نوع قفلها برروی سطرها یا داده هایی ایجاد میشوند که عمل خواندن روی آنها ایجاد گردد.تا از تغییر یا حذف داده ی مربوطه در زمان خواندن آن جلوگیری به عمل آید.
استفاده از چندین قفل اشتراکی بوسیله ی چند تراکنش،به طور همزمان امکان پذیر است.
قفل انحصاری exclusive lock
این نوع قفلها بر روی داده هایی قرار میگیرند که در حال درج یا به روز رسانی یا حذف میباشند.در هر لحظه فقط یک تراکنش میتواند برروی یک منبع داده از این نوع قفل استفاده کند
قفل update lock
زمانی استفاده میشود،که یک تراکنش در حال تغییر داده ی مربوطه میباشد.در یک لحظه فقط یک تراکنش میتواند از این قفل برروی منبع داده استفاده کند
قفل intent
این قفل از انواع قفلهای داخلی در sql محسوب میشود با استفاده ازین قفل میتوان سایر تراکنش ها را از وجود قفل برروی منبع داده مطلع نمود تا از تداخل قفل ها جلوگیری به عمل آید
قفل intent میتواند به صورت IX,IS,IU مورد استفاده قرار گیرد
قفل schema
از این قفل زمانی استفاده میشود که از حذف یا تغییر جداولی که تراکنش های دیگر روی آنها عملیات انجام میدهند جلوگیری به عمل آورد
با استفاده از رویه ی سیستمی sp_lock میتوان از قفلهای فعال در پایگاه داده اطلاع حاصل کرد
exec sp_lock
برای اطلاعات بیشتر میتوان به آدرس زیر مراجعه کرد:
MSDN=>index=>تایپ کنید sp_lock
مفهوم deadlock یا بن بست:
زمانی رخ میدهد که دو تراکنش میخواهند به طور هم زمان بر روی یک منبع داده،قفل گذاری نمایند در این صورت یکی از تراکنش ها بایستی لغو گردد یا rollback شود
منبع : شعبه ی حافظ مجتمع فنی تهران (دپارتمان برنامه نویسی)
امیدوارم به درد همه بخوره:خجالت:
تصمیم گرفتم که هرچه اطلاعات راجع بهسطوح ایزولاسیون دارم در اختیار همه بذارم :
---------------------------------------------------------------------------------------
به طور کلی همزمانی تراکنش ها باعث 4 نوع خطا میشوندکه تنها به ذکرنام آنها میپردازیم :
1.خواندن نامساعد dirtyread
2.تغییرات از دست رفته lastupdates
3.خواندن های غیر تکراری unrepeatableread
4.فانتوم ها
set transaction isolation level read uncommited
در فرمان بالا هیچ گونه قفلی گذاشته نمیشود
set transaction isolation level read commited
فرمان بالا جلوی dirty read را میگیرد
set transaction isolation level repeatable read
فرمان بالا هم جلوی خواندن های تکراری را میگیرد و هم dirty read
set transaction isolation level serializable
فرمان بالا به غیر از lastupdate از همه ی خطاها جلوگیری میکند
مثال:
set transaction isolation level repeatable read
begin transaction
select * from orders
commit transaction
قفلها :
قفلها اشیائی هستند که از بروز اشکالات ناشی از اجرای هم زمان تراکنشها جلوگیری به عمل میاورند.
قفلها میتوانند روی سطوح مختلفی مانند سطرها،صفحه ها،جداول،پایگاه های داده و غیره قرار گیرند و از انجام عملیات همزمان جلوگیری به عمل آورند،قفلها را میتوان به گروه های زیر تقسیم نمود:
قفل اشتراکی (shared lock) یا shared(s
این نوع قفلها برروی سطرها یا داده هایی ایجاد میشوند که عمل خواندن روی آنها ایجاد گردد.تا از تغییر یا حذف داده ی مربوطه در زمان خواندن آن جلوگیری به عمل آید.
استفاده از چندین قفل اشتراکی بوسیله ی چند تراکنش،به طور همزمان امکان پذیر است.
قفل انحصاری exclusive lock
این نوع قفلها بر روی داده هایی قرار میگیرند که در حال درج یا به روز رسانی یا حذف میباشند.در هر لحظه فقط یک تراکنش میتواند برروی یک منبع داده از این نوع قفل استفاده کند
قفل update lock
زمانی استفاده میشود،که یک تراکنش در حال تغییر داده ی مربوطه میباشد.در یک لحظه فقط یک تراکنش میتواند از این قفل برروی منبع داده استفاده کند
قفل intent
این قفل از انواع قفلهای داخلی در sql محسوب میشود با استفاده ازین قفل میتوان سایر تراکنش ها را از وجود قفل برروی منبع داده مطلع نمود تا از تداخل قفل ها جلوگیری به عمل آید
قفل intent میتواند به صورت IX,IS,IU مورد استفاده قرار گیرد
قفل schema
از این قفل زمانی استفاده میشود که از حذف یا تغییر جداولی که تراکنش های دیگر روی آنها عملیات انجام میدهند جلوگیری به عمل آورد
با استفاده از رویه ی سیستمی sp_lock میتوان از قفلهای فعال در پایگاه داده اطلاع حاصل کرد
exec sp_lock
برای اطلاعات بیشتر میتوان به آدرس زیر مراجعه کرد:
MSDN=>index=>تایپ کنید sp_lock
مفهوم deadlock یا بن بست:
زمانی رخ میدهد که دو تراکنش میخواهند به طور هم زمان بر روی یک منبع داده،قفل گذاری نمایند در این صورت یکی از تراکنش ها بایستی لغو گردد یا rollback شود
منبع : شعبه ی حافظ مجتمع فنی تهران (دپارتمان برنامه نویسی)
امیدوارم به درد همه بخوره:خجالت: