PDA

View Full Version : حرفه ای: دور زدن isolation level



S_O_S1982
یک شنبه 09 اسفند 1388, 19:17 عصر
سلام دوستان

فرض کنید یک برنامه با دات نت نوشتیم که به بانک ما وصل میشه و برای اجرای دستوراتش روی دیتابیس یک سری sp هایی رو فراخوانی می کنه
حالا سوال من اینجاست که آیا این sp ها ، مشکلات همزمانی را خودشون حل می کنند؟؟

جایی خونده بودم اگه تو sp یک transaction انجام بدیم lock صورت می گیره
آیا این lock مربوط به همون isolation level میشه که به طور پیش فرض روی Read commited تنظیم شده هست؟؟ یعنی اگه isolation level روی Read uncommited تنظیم شده باشه آیا دیگه lock صورت نمی گیره ؟


و سوال آخرم اینکه ،وقتی ما از طریق نرم افزاری داریم این sp ها رو فراخوانی می کنیم ، آیا می تونیم خودمون بدون توجه به isolation level همزمانی رو به طریقی متوجه بشیم و جلوی اون رو بگیریم؟؟ یعنی فرضا بیام isolation level رو ، روی Read uncommited تنظیم کرده باشیم ، و خودمون مکانیزمی استفاده کنیم که اون سه شکل همزمانی رو متوجه بشیم و جلوش رو بگیریم ؟؟


ممنون از توجه تون

AminSobati
پنج شنبه 13 اسفند 1388, 13:04 عصر
سلام دوست عزیزم،
وقتی کانکت میشین، به صورت پیش فرض در حالت Read Committed قرار دارید. مهم نیست از چه طریقی کانکت میشین. وقتی ویرایش انجام میدین، خود SQL Server هر Lockی که نیاز باشه میگیره ولی اگر قبلش Begin Tran انجام داده باشین، اون Lock تا زمانی که Transaction بسته نشده، نگه داشته میشه، پس ممکنه مانع عملیات سایر کاربرها بشه. ست کردن یک Isolation Level این رو تعیین میکنه که شما چه نوع مشکلاتی که هنگام Select ممکنه براتون رخ بده، قصد دارین جلوگیری کنین.

S_O_S1982
سه شنبه 18 اسفند 1388, 23:40 عصر
سلام دوست عزیزم،
وقتی کانکت میشین، به صورت پیش فرض در حالت Read Committed قرار دارید. مهم نیست از چه طریقی کانکت میشین. وقتی ویرایش انجام میدین، خود SQL Server هر Lockی که نیاز باشه میگیره ولی اگر قبلش Begin Tran انجام داده باشین، اون Lock تا زمانی که Transaction بسته نشده، نگه داشته میشه، پس ممکنه مانع عملیات سایر کاربرها بشه. ست کردن یک Isolation Level این رو تعیین میکنه که شما چه نوع مشکلاتی که هنگام Select ممکنه براتون رخ بده، قصد دارین جلوگیری کنین.

خوب آیا وقتی ما Isolation level رو ، روی گزینه ی UnReadCommitted تنظیم کرده باشیم ، بازم اون lock صورت می گیره ؟؟

sia_2007
چهارشنبه 19 اسفند 1388, 22:39 عصر
Un Read Commited نه
Read Un Commited
خب؛ ببین اون Lock همیشه رخ میده و ما میتونیم شدتش رو کم و زیاد کنیم.
این Read Un Commited برای موقعی است که میخواهیم این Lock رو دور بزنیم.

AminSobati
چهارشنبه 19 اسفند 1388, 22:54 عصر
وقتی از Read Uncommitted استفاه میکنید، در حقیقت ریسک Dirty Read رو با انتخاب خودتون میپذیرین و معطل Lock نمیشین. ولی اگر یکی از ویرایشهای در حال انجام Rollback انجام بده، چیزی که شما بدست آوردین دیگه موثق نیست

S_O_S1982
پنج شنبه 20 اسفند 1388, 01:01 صبح
Un Read Commited نه
Read Un Commited
خب؛ ببین اون Lock همیشه رخ میده و ما میتونیم شدتش رو کم و زیاد کنیم.
این Read Un Commited برای موقعی است که میخواهیم این Lock رو دور بزنیم.

درست می گین ، عذر می خوام

S_O_S1982
پنج شنبه 20 اسفند 1388, 02:18 صبح
وقتی از Read Uncommitted استفاه میکنید، در حقیقت ریسک Dirty Read رو با انتخاب خودتون میپذیرین و معطل Lock نمیشین. ولی اگر یکی از ویرایشهای در حال انجام Rollback انجام بده، چیزی که شما بدست آوردین دیگه موثق نیست


ببخشید این جمله من درست هست یا نه


" در اجرای یک SP برروی رکوردها بدون توجه به ISolation level حتما LOCK صورت می گیرد"

sia_2007
جمعه 21 اسفند 1388, 00:18 صبح
بله، البته همیشه Lock وجود دارد.
اما این که Lock بر روی کل جدول باشد ، یا روی رکوردهایی که عملیات روی آنها انجام میشود قابل تعیین است.
Table Properties - Lock Essential

AminSobati
شنبه 22 اسفند 1388, 01:56 صبح
صحبت کلی در مورد Lockها چندان جالب نیست چون بهتره قبلش انواع Lockها رو بشناسین. فرضا Shared Lock توسط چند کاربر بصورت همزمان میتونه روی اطلاعات قرار بگیره و این Lock مانع Exclusive Lock (عمل ویرایش) خواهد شد. دستور Select از Shared Lock استفاده میکنه ولی اینکه Lock فقط در طول اجرای دستور نگه داشته بشه یا در کل زمان Transaction، خودش مسئله دیگه ای هست. ویرایش اطلاعات به Exclusive Lock نیاز داره برای همین کسی که میخواد Shared Lock بگیره (دستور Select استفاده کنه) باید منتظر بمونه. ولی در حالت Read Uncommitted شما اظهار میکنید که اگر عمل ویرایش که توسط کاربر دیگری در حال اجراست Rollback شد، از نظر شما اشکالی نداره و Dirty Read رو بلامانع میدونید.
هر Isolation Level هدف خاصی داره که با توجه به هدف، شما از Level مربوطه باید استفاه کنید.

S_O_S1982
یک شنبه 23 اسفند 1388, 12:51 عصر
پس من می تونم این نتیجه گیری و از این بحث داشته باشم که اگه هنگام اجرای دستورات sql از داخل برنامه ( با دات نت یا هرچیز دیگه ای ) اگه این دستورات رو به صورت SP اجرا کنم ، مشکل همزمانی و این جور مسائل رو ندارم ، اما اگه به جای SP ، دستورات رو به صورت Sql text اجرا کنم خودم قبلش باید مشکل همزمانی رو کنترل کنم ؟ممنون

AminSobati
یک شنبه 23 اسفند 1388, 23:36 عصر
چه SP چه غیر SP همیشه قوائد Locking توسط SQL Server رعایت میشه. حتی ADO هم تنظیماتی برای تغییر Isolation Level داره