در مجموعه قابلیت های adaptive-query-processing که سعی کردیم به اون بپردازیم ، Adaptive Memory یکی از موثرترین های این مجموعه است. درادامه مفهوم این قابلیت رو به همراه تاثیر اون در بهبود اجرا کوئری در پایگاه داده SQL Server رو مورد بررسی قرار می دیم.
اجرا ء کوئری در صورتی که شامل عملیات های sort و hash join باشه نیاز به مموری جهت نگهداری رکوردها داره که SQL Server میزان مموری لازم برای انجام این عملیات رو حدس میزنه و به همان میزان مموری allocate میکنه ( Granted Memory ).
گاهی پیش میاد که میزان مموری allocate شده اشتباه باشه، در صورت کم بودن مموری، کوئری برای اجرا سراغ tempdb میره و از دیسک کمک می گیره که کارایی پایینی داره.
در بخش MemoryGrantInfo مربوط به جزئیات Query plan علاوه بر Granted Memory پارامتر جدیدی با عنوان IsMemoryGrantFeedbackAjusted اضافه شده که میتونه مقادیر : No : First time , Yes: adjusting , Yes: Stable رو داشته باشه .
قابلیت اضافه شده این امکان رو میده تا درصورتی که در دفعات بعد اجرا کوئری، شرایط اجرا عوض شد و میزان مموری مورد نیاز کوئری تغییر شدیدی کرد (کاهش یا افزایش )، SQL Server به صورت خودکار این رو تشخیص بده و برای دفعات بعد مموری allocate شده رو اصلاح کنه. به این معنی خواهد بود که بار اول اجرا کوئری با شرایط جدید، همچنان کندی خواهیم داشت اما با تشخیص No : First time اقدام به اصلاح مموری کرده و دفعات بعد مشکل کندی حل میشه .
منبع :