ورود

View Full Version : درخواست راهنمایی در مورد جلوگیری از dead lock برای جدولی با تعداد تراکنش های بالا



leila.net
دوشنبه 28 تیر 1395, 14:46 عصر
با عرض سلام و وقت بخیر



و اما سوال بنده :


جدولی دارم که تعداد تراکنش های روی این جدول زیاد هست.
همزمان


insert بصورت انبوه با استفاده از table type ی که تعریف کرده ام انجام می شود حدود 1000 تا 10000 رکورد همزمان و البته همزمان با insert بررسی عدم تکراری بودن مقادیر insert شده بر روی یک فیلد از نوع nvarchar(2000) که با استفاده از not exists بر روی فیلد مورد نظر صورت می گیرد ،


Update


و حذف رکوردها





خب همین تراکنش ها هم سمت application بصورت parallel هم اجرا می شود




و نهایتا نتیحه شده تعداد lock های زیادی که بوجود می آید و dead lock on process


در کمتر از یک ساعت fragmentation به بیشتر از 10 و بعضا 20 می رسد
در واقع این جدول برای من یک جدول موقت هست که بعد از انجام تراکنش های مورد نظر ، رکوردهای آن حذف می شود و در صورت بروز خطا ، وضعیت رکوردها به خوانده شده به همراه علت خطا تغییر می کند.



در مورد این سناریو ، راه حل پیشنهادی چیست ؟


ممنون می شوم دوستان هم اگر تجربه ای در این زمینه دارند عنوان بفرمایند .


با احترام

tooraj_azizi_1035
دوشنبه 28 تیر 1395, 16:39 عصر
سلام
1. بررسی عدم تکراری بودن رو با Unique constraint انجام بدید.
2. ایندکس های اضافی رو حذف کنید.
3. BULK Insert در صورت امکان.
4. Fill Factor ایندکس های جدول رو روی عددی مثل 50 بگذارید.

leila.net
دوشنبه 28 تیر 1395, 18:31 عصر
سلام
1. بررسی عدم تکراری بودن رو با Unique constraint انجام بدید.
2. ایندکس های اضافی رو حذف کنید.
3. BULK Insert در صورت امکان.
4. Fill Factor ایندکس های جدول رو روی عددی مثل 50 بگذارید.


ممنون بابت پاسخ تون
با توجه به اینکه عدم تکراری بودن باید توی دو تا جدول بررسی بشه به تنهایی نمیشه از unique constraint استفاده کنم.
بله با بررسی index usage statistics ، ایندکس های اضافی رو قبلا حذف کردم
برای insert همانطور که عرض کردم از table type استفاده می کنم . مطمون نیستم این هم همان مفهومی که شما از bulk insert در نظر دارید ، دارد یا خیر ؟
fill factor رو الان رو 70 ست کردم تا نتیجه رو بررسی کنم . بعد در صورت نیاز افزایش یا کاهش بدم .

باز هم ممنون از پاسخگویی تون