PDA

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



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

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


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


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


Update


و حذف رکوردها





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




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


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


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


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


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


با احترام

aminaltavista
شنبه 02 مرداد 1395, 17:45 عصر
سلام و درود خدمت مهندس گرامی وقت بخیر

پیشنهاد من به شما جهت جلوگیری از dedlock استفاده از تکنولوژی Memory-Optimized و in memory OLTP هستش
چون اونجا از رم استفاده وِیژه ای میشه و درواقع رم محور هست اطلاعات با سرعت بسیار بالایی با حذف ویژگی هایی چون:
- زمان جستجو
-قفل گذاری بر روی پیج ها
-کاهش هزینه های سخت افزاری
-رضایت کاربران
رو در بر داره (چون سرعت رم حداقل 1000 برابره دیسک سخته)، البته حداقل بستری که نیاز دارید sql server 2014 به بالاست(2016) که توصیه من به شما 2016 هستش(به دلایلی)
شما میتونید جداول رو به این زیر ساخت تغییر دهید (درواقع اگر بخواهید باید این کارو کنید)
موفق باشید

leila.net
یک شنبه 03 مرداد 1395, 09:57 صبح
ممنون . بله حتما این مورد رو بررسی و اعمال می کنم چون تا حالا استفاده نکردم .
Memory-Optimized بصورت اتوماتیک اعمال میشه ؟ یا تنظیمات خاصی نیاز داره؟

البته با راهنمایی دوستمون و افزایش fill factor بخش زیادی از مشکلات حل شد هر چند تعداد lock هام هنوز به صفر نرسیده .

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

aminaltavista
یک شنبه 03 مرداد 1395, 13:18 عصر
Memory-Optimized بصورت اتوماتیک اعمال میشه ؟ یا تنظیمات خاصی نیاز داره؟



شما برای راه اندازی این تکنولوژی ابتدا باید در سطح دیتابیس fileGroup ایجاد کنید (با alter کردن دیتابیس)، بعدش نیاز به تولید container هایی هست که معمولا توصیه میشه چهارتا باشه(حاوی دیتاهای حذف شده و اضافه شده هستند(بیشتر از این وارد ساختار معماری نمیشم)) ، حالا پایگاه داده آمادس و باید جداول رو با ساختار جدید تعریف کنید


نوع جدید stored procedure مختص جداول memory optimized ایجاد شده که توسط کامپایلر ویژوال سی هندل میشه (جداول و دیتاها به زبان سی کامپایل شدن و به صورت عادی چیزی جز کد در مسیر container ها وجود نداره)و قادره با سرعت وحشدناکی به request های کاربران پاسخ بده (آخرین بنچ مارکی که خودم زدم حدود دو میلیون رکورد رو در حدود چند ثانیه درج کردم(این در حالیه که با معماری کلاسیک و دیسک بیس چندین دقیقه میشه))

همه مزایای این تکنولوژی ، صرفا محدود به این نمیشه و نوع جدید ایندکس که معروف به column stored index و Hash Index(مخصوص memory optimized) هستند که در نوع خود بسیار پر سرعتند.


اگه خواستید سوییچ کنید به سمت این تکنولوژی حتما sql server 2016 که اخیرا هم release شده رو نصب کنید. (2014 دچار محدودیت هایی هست که تو 2016 بهبود و تا حدود زیادی رفع شدن)
موفق باشید

leila.net
دوشنبه 04 مرداد 1395, 12:38 عصر
دوست عزیز @
aminaltavista (http://barnamenevis.org/member.php?156494-aminaltavista) بسیار عالی بود ممنون بخاطر زمانی که گذاشتید. در حال حاضر sql server 2016 رو سرور نصب هست خوشبختانه و با توضیحات شما حتما در اولین فرصت تغییرات مورد نیاز رو اعمال می کنم . چیزی که مشخص هست من حدود دو هفته ای هست که کار با Sql server 2016 را شروع کردم و در این مدت تغییرات قابل توجهی را در اجرای کوئریها مشاهده کردم و به دوستان هم توصیه می کنم در سریعترین زمان ممکن و با دریافت اطلاعات اولیه سوئیچ نمایند تا بتوانیم با راهنمایی هم موارد موجود را بهتر . راحت تر حل کنیم .

aminaltavista
دوشنبه 04 مرداد 1395, 14:03 عصر
خواهش میکنم ، چیزی که بدیعیه هر چه جلوتر میریم شاهد بهبود عملکرد موتور پایگاه داده هستیم ، حتی تکنولوژی in memory oltp هم 2016 ارتقا یافته!

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