نمایش نتایج 1 تا 6 از 6

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

  1. #1

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

    با عرض سلام و وقت بخیر

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


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


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


    Update


    و حذف رکوردها





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




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


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


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


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


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


    با احترام




  2. #2
    کاربر دائمی آواتار aminaltavista
    تاریخ عضویت
    تیر 1389
    محل زندگی
    شیراز
    سن
    31
    پست
    432

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

    سلام و درود خدمت مهندس گرامی وقت بخیر

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

  3. #3

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

    ممنون . بله حتما این مورد رو بررسی و اعمال می کنم چون تا حالا استفاده نکردم .
    Memory-Optimized بصورت اتوماتیک اعمال میشه ؟ یا تنظیمات خاصی نیاز داره؟

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

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

  4. #4
    کاربر دائمی آواتار aminaltavista
    تاریخ عضویت
    تیر 1389
    محل زندگی
    شیراز
    سن
    31
    پست
    432

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

    نقل قول نوشته شده توسط leila.net مشاهده تاپیک
    Memory-Optimized بصورت اتوماتیک اعمال میشه ؟ یا تنظیمات خاصی نیاز داره؟
    شما برای راه اندازی این تکنولوژی ابتدا باید در سطح دیتابیس fileGroup ایجاد کنید (با alter کردن دیتابیس)، بعدش نیاز به تولید container هایی هست که معمولا توصیه میشه چهارتا باشه(حاوی دیتاهای حذف شده و اضافه شده هستند(بیشتر از این وارد ساختار معماری نمیشم)) ، حالا پایگاه داده آمادس و باید جداول رو با ساختار جدید تعریف کنید


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

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


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

  5. #5

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

    دوست عزیز @بسیار عالی بود ممنون بخاطر زمانی که گذاشتید. در حال حاضر sql server 2016 رو سرور نصب هست خوشبختانه و با توضیحات شما حتما در اولین فرصت تغییرات مورد نیاز رو اعمال می کنم . چیزی که مشخص هست من حدود دو هفته ای هست که کار با Sql server 2016 را شروع کردم و در این مدت تغییرات قابل توجهی را در اجرای کوئریها مشاهده کردم و به دوستان هم توصیه می کنم در سریعترین زمان ممکن و با دریافت اطلاعات اولیه سوئیچ نمایند تا بتوانیم با راهنمایی هم موارد موجود را بهتر . راحت تر حل کنیم .

  6. #6
    کاربر دائمی آواتار aminaltavista
    تاریخ عضویت
    تیر 1389
    محل زندگی
    شیراز
    سن
    31
    پست
    432

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

    خواهش میکنم ، چیزی که بدیعیه هر چه جلوتر میریم شاهد بهبود عملکرد موتور پایگاه داده هستیم ، حتی تکنولوژی in memory oltp هم 2016 ارتقا یافته!

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

تاپیک های مشابه

  1. پاسخ: 4
    آخرین پست: یک شنبه 22 دی 1392, 08:41 صبح
  2. درخواست راهنمایی در مورد استفاده از Unit Test در NET.
    نوشته شده توسط sahare در بخش C#‎‎
    پاسخ: 4
    آخرین پست: دوشنبه 29 مهر 1392, 20:06 عصر
  3. سوال: درخواست راهنمایی در مورد استفاده از نقشه شهرهای ایران
    نوشته شده توسط Hadiir.net در بخش VB.NET
    پاسخ: 0
    آخرین پست: شنبه 05 مرداد 1392, 05:06 صبح
  4. سوال: درخواست راهنمايي در مورد استفاده از treeview
    نوشته شده توسط dab_hrd در بخش C#‎‎
    پاسخ: 10
    آخرین پست: پنج شنبه 26 بهمن 1391, 23:34 عصر
  5. پاسخ: 6
    آخرین پست: شنبه 04 آذر 1391, 23:35 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •