برنامه 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)، را بر روی جداول اعمال می نماید. و در نتیجه با اجرا دو دستور
بعدی حافظه پنهان اطلاعات به طور کلی آزاد می شود.
سپس می توان مطمئن شد که با اجرای دستورات بعدی، اطلاعات از جداول خوانده شده و
کوئری ها از ابتدا کامپایل و اجرا می شوند.