PDA

View Full Version : Error:deadlock



zman123456
یک شنبه 24 تیر 1386, 07:38 صبح
سلام
وقتی یکی از بخشهای یک برنامه که با sql 2000 کار میکنه رو باز می کنیم.(برنامه تحت شبکه است) پیغام زیر نمایش داده می شود:
transaction (processID X) was deadlocked on lock ...
چکار کنم درست بشه.

AminSobati
دوشنبه 25 تیر 1386, 15:22 عصر
دوست عزیزم،
Deadlock زمانی بوجود میاد که دو کاربر منتظر همدیگه میشن تا طرف مقابل کارش رو تموم کنه (از حالت Block در بیان) اما منابع رو به شکلی Lock کردن که عملا این Lock هیچ وقت پایانی نداره.
این یک سناریو:
کاربر اول روی جدول 1 برای ویرایش Transaction شروع میکنه و یک Update انجام میده.
کاربر دوم روی جدول 2 برای ویرایش Transaction شروع میکنه و یک Update انجام میده.
کاربر اول نیاز داره روی جدول 2 ویرایش انجام بده اما چون Transaction کاربر اول بازه، ناچارا Block میشه.
کاربر دوم نه تنها Transaction خودش رو تموم نمیکنه، بلکه روی جدول 1 قصد ویرایش میکنه. کاربر اول منتظر کاربر دومه و کاربر دوم منتظر کاربر اول! در اینجا SQL Server از روی قوانینی، یکی رو Rollback میکنه.
زمانی که در SPهای شما یک Transaction به مدت طولانی باز میمونه، شانس بروز Deadlock افزایش پیدا میکنه، مخصوصا اگر نحوه دسترسی کاربرها به جداول، بعضها عکس همدیگه باشه.
مثلا در یک Transaction، کاربر به جدول 1 و بعدش به 2 دسترسی پیدا میکنه، حالا در Transaction دیگه، کاربر دیگه ای میخواد اول به جدول 2 و بعد به جدول 1 دسترسی داشته باشه، این موارد احتمال بروز Deadlock رو زیاد میکنه. در فرمی که deadlock پیش میاد، باید SPهای فراخوانده شده در اون رو مرور و بررسی کنین

zman123456
چهارشنبه 27 تیر 1386, 08:53 صبح
مرسی آقای ثباتی
چک می کنم ببینم میشه کاری کرد.حالا باید چطور و چی رو چک کنم؟

AminSobati
چهارشنبه 27 تیر 1386, 09:59 صبح
شما حتما میدونین که مثلا در کدوم فرم عمدتا این مسئله پیش میاد. پس SPهایی که در اونجا Call میشن بررسی کنین. این میتونه یک نقطه شروع باشه..