اهمیت پارامتر Auto Growth در SQL Server

naeemaei Sql Server ,

رویداد Auto Growth چیست؟

زمانیکه که SQL Server برای انجام یک عملیات (مانند Insert کردن رکورد در دیتابیس) فضای کافی ندارد و نیاز به فضای جدیدی در دیسک دارد این رویداد اتفاق می افتد و فضای جدیدی در دیسک برای فایل دیتابیس رزرو می شود.

رویداد Auto Growth چگونه انجام می شود؟

ابتدا چک می شود در دیسک فضای آزاد وجود دارد یا خیر

اگر فضای آزاد وجود داشته باشد، فضایی به اندازه میزان  Auto Growth تعیین شده در SQL Server  در دیسک رزرو می شود و ممکن است فضای رزرو شده روی دیسک پیوسته نباشد که خود این موضوع موجب Fragmentation  می شود.

پس از انجام مراحل فوق عملیات auto growth به اتمام می رسد ولی نکته ای که مهم است همه اعمالی که باید روی دیتابیس انجام شوند منتظر پایان عملیات Auto Growth می مانند.

بنابراین اگر تعداد دفعات  Auto Growth بیش از حد باشد و یا مدت زمان انجام این عملیات طولانی باشد باعث کاهش زمان پاسخ دهی SQL Server  به درخواست های وارده خواهد شد. برای نمونه به نتیجه این کوئری که تعداد دفعات رخداد Auto Growth را نشان می دهد را ببینید:

مقدار Auto Growth برای دیتابیس روی یک مگابایت تنظیم شده است و در نتیجه در زمان افزودن دیتا به دیتابیس، SQL Server در هر لحظه در حال انجام عملیات Auto Growth  می باشد.

برای تعیین مقدار Auto Growth دو پارامتر از اهمیت بالایی برخوردار است:

  1. میزان رشد حجم دیتابیس
  2. میزان بار ترافیکی دیتابیس

برای محاسبه این دو پارامتر باید میزان رشد حجم دیتابیس و کوئری های وارده به دیتابیس برای مدتی مانیتور شود.

بررسی با یک سناریوی فرضی:

  1. فرض کنید دیتابیسی داریم که روزانه 800 مگابایت به حجم آن اضافه می شود.
  2. پارامتر Auto Growth روی 10 مگابایت تنظیم شده است.
    sql server auto growth

در واقع در طول یک روز روی این دیتابیس 80 بار عمل Auto Growth اتفاق خواهد افتاد که تاثیر بسیار بدی روی Performance خواهد داشت و به این نکته هم باید توجه داشته باشیم که هر Auto Growth یک Fragmentation روی دیسک نیز به همراه خواهد داشت.

بررسی جزئیات یک رخداد Auto Growth:

فرض: دیتابیسی با مشخصات زیر وجود دارد

حجم فایل MDF 2GB
فضای آزاد 80MB
Auto Growth 100MB

مسئله: میخواهیم 800000 رکورد در یکی از جداول دیتابیس Insert نماییم و این عملیات نیاز به 500 مگابایت فضای دیسک خواهد داشت. در حالیکه دیتابیس فقط 80 مگابایت فضای آزاد دارد. بنابراین باید عملیات Auto Growth انجام شود که مراحل آن بدین شکل است:

    1. Zeroing Process : موتور SQL Server نیاز دارد که فضایی که نیاز دارد را در دیسک آزاد کند، بنابراین بخشی از فضای خالی روی دیسک را رزرو می کند که به این عمل Zeroing می گویند به معنای نوشتن صفر در فضایی که می خواهد رزرو کند. البته این نکته حائز اهمیت است که در صورتی که فضای پیوسته به میزان مورد نیاز در دیسک موجود نباشد فضای رزرو شده بصورت ناپیوسته خواهد بود که موجب Fragmentation است.
    2. تا زمان پایان عملیات Zeroing و رزرو شده فضا در دیسک همه عملیات ها منتظر می مانند تا این عملیات به پایان برسد
    3. پایان این عملیات به معنای پایان Auto Growth است.
    4. عملیات Insert انجام می شود.

 

نتیجه گیری:

  1. در دیتابیسها و سیستمهایی که Performance بسیار مهم است تنظیم صحیح Auto Growth بسیار مهم است.
  2. مانیتورینگ وضعیت Auto Growth دیتابیس در بازه های روزانه و ماهانه برای رسیدن به مقدار درست پارامتر Auto Growth بسیار مهم است.
  3. گاها ممکن است در طی تغییرات سیستم (افزودن امکانات به سیستم نرم افزاری) نمودار رشد حجم دیتابیس نیز تغییر کند که باید پارامتر Auto Growth نیز با این تغییرات تطابق داشته باشد و تغییر داده شود.
  4. رخداد Auto Growth یک رخداد پرهزینه است که تاثیر مستقیمی روی کارایی سیستم خواهد داشت، بنابراین درست تنظیم نشدن آن ممکن است آثار سوء زیادی روی کارایی سیستم داشته باشد.

شاید دوست داشته باشید:

گراف دیتابیس (Graph Database) در SQL Server – بخش دوم Edge Table

برای ارتباط بین دو node در یک گراف از Edge استفاده می کنیم. هر Edge که ارتباط بین دو جدول node را برقرار می کند می تواند دارای خصوصیت (Property) باشد و یا نباشد. این نوع طراحی برای پیاده سازی روابط چند به چند پیچیده بسیار خوب خواهد بود.

جدول های گراف(Graph Tables) در SQL Server – بخش اول

یکی از ویژگی های جدیدی که از نسخه ی SQL Server 2017 پشتیبانی می شود، Graph Table های می باشند. جدول های گراف برای پیاده سازی روابط پیچیده بین جداول کاربرد دارند. این نوع جداول برای پیاده سازی روابط پیچیده چند به چند، روابط سلسله مراتبی و… استفاده خواهند شد و یکی از کاربردهای عمومی که اکثراً با آن آشنایی دارند شبکه های اجتماعی می باشد و البته ساختار این نوع جداول با جداول معمولی در SQL Server تفاوت چندانی ندارد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *