خالی نمودن حافظه پنهان استفاده شده توسط برنامه Microsoft SQL Server
  در این ترفند به معرفی روشی جهت خالی نمودن حافظه ی پنهان (Cached) استفاده شده توسط برنامه Microsoft SQL Server می پردازم.
   SQL Server
   ۱۴۰۸۳
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۹/۱۰/۵
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

برنامه Microsoft SQL Server به منظور بالا بردن راندمان و کارایی، ساختار آخرین کوئری های اجرا شده بر روی پایگاه داده و آخرین اطلاعات (Data)واکشی شده از جداول را در حافظه ی نهان (Cache) ذخیره می نماید تا در مراجعات بعدی به جای اینکه مجددا این کوئری ها را کامپایل نماید یا اینکه اطلاعات را مجددا از جداول واکشی کند، از اطلاعات ذخیره شده در حافظه اصلی استفاده نماید. به همین دلیل است که معمولا اولین اجرای کوئری ها و یا خواندن اطلاعات از جداول خیلی بیشتر از دفعات بعدی زمان می برد.

البته میزان اطلاعات ذخیره شده و زمان معتبر بودن آن ها و سایر موارد به میزان حافظه اصلی (RAM) و تنظیمات دیگر بستگی دارد.

اما در هنگام توسعه یک نرم افزار مواقعی پیش می آید که احتیاج داریم اطلاعات را حتما از جداول بخوانیم و یا اینکه از ساختار ذخیره شده ی کوئری ها استفاده نکنیم.

به طور مثال ممکن است نیاز داشته باشیم زمان واکشی اطلاعات را بر اساس کوئری ها و تکنیک های متفاوت مقایسه کنیم تا بتوانیم بهترین و کم هزینه ترین تکنیک را شناسایی نماییم. بدیهی است که برای این منظور باید حتما کوئری ها در شرایط یکسان اجرا شوند و باید نقش اطلاعات ذخیره شده در حافظه اصلی را حذف کنیم.

برای خالی نمودن حافظه ی نهان استفاده شده در برنامه SQL Server از دو دستور DBCC DROPCLEANBUFFERS و DBCC FREEPROCCACHE استفاده می شود.

  • DBCC FREEPROCCACHE: با اجرای این دستور ساختارهای کوئری های ذخیره شده (ازجمله پروسیجر ها و کوئری ها معمولی)در حافظه اصلی حذف می شوند و اگر درخواست اجرای آن ها صادر شود باید مجددا کامپایل شوند.

  •  DBCC DROPCLEANBUFFERS:  با اجرای این دستور اطلاعات دخیره شده در حافظه نهان، خالی می شوند. دقت شود که با اجرای این دستور اطلاعاتی که در حافظه اصلی تغییر نموده اند ولی تغییرات مربوطه هنوز بر روی جداول اعمال نشده اند(Dirty Pages)، حذف نمی شوند! و برای این موضوع باید چاره ای اندیشید که در ادامه مقاله در مورد آن بحث خواهیم نمود.

در قسمت زیر نحوه ی اجرای این دستورات را بر روی پایگاه داده ملاحظه می نمایید.

CHECKPOINT

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

همانطور که در قطعه کد بالا ملاحظه می کنید، ما ابتدا دستور CHECKPOINT را اجرا نموده ایم. با اجرای این دستور، برنامه SQL Server تغییرات مربوط به اطلاعاتی که در حافظه اصلی تغییر یافته اند ولی هنوز تغییرات آن ها بر روی جداول اعمال نشده اند(Dirty Pages)، را بر روی جداول اعمال می نماید. و در نتیجه با اجرا دو دستور بعدی حافظه پنهان اطلاعات به طور کلی آزاد می شود.

سپس می توان مطمئن شد که با اجرای دستورات بعدی، اطلاعات از جداول خوانده شده و کوئری ها از ابتدا کامپایل و اجرا می شوند.