در SQL Server، بهروزرسانی آمارها معمولاً باعث نامعتبر شدن طرحهای اجرای کششده میشود که به آنها وابسته هستند. این امر منجر به تجدید نظر (recompile) در طرحها میشود تا SQL Server بر اساس تغییرات دادهها، طرحهای جدیدی ایجاد کند.
با این حال، بهروزرسانی آمارها که توسط سیستم ایجاد میشوند، لزوماً باعث تجدید نظر در طرحها نمیشود. این یک مورد خاص و غیرمعمول است که ممکن است به ندرت با آن مواجه شوید، اما در طول آموزشهای Brent Ozar در هر کلاس اتفاق میافتد. این موضوع در این مقاله مستند شده است تا به سوالی که یکی از دانشجویان پرسیده پاسخ داده شود.
برای نشان دادن این موضوع، از پایگاه داده Stack Overflow (نسخه 2024) استفاده شده است. ابتدا ایندکسها حذف شده و کش طرحها پاکسازی شده است. سطح سازگاری پایگاه داده به 170 (2025) تغییر یافته تا نشان داده شود که این مشکل در سال 2025 نیز برطرف نشده است. سپس یک پرس و جو (query) علیه جدول Users اجرا میشود.
در این سناریو، SQL Server برای حدس زدن تعداد ردیفهایی که با پیششرط Location = ‘Netherlands’ مطابقت دارند، نیاز به حدس زدن دارد. بنابراین، به طور خودکار یک آمار بر روی ستون Location ایجاد میشود. با استفاده از sp_BlitzIndex میتوان این آمار را بررسی کرد و اطلاعات مربوط به هیستوگرام آمار را مشاهده کرد. نکته مهم این است که این آمار توسط سیستم ایجاد شده و با نامی شروع میشود که شامل _WA_Sys است.
این موضوع نشان میدهد که حتی در نسخههای جدیدتر SQL Server، بهروزرسانی آمارها همیشه منجر به تجدید نظر در طرحهای کششده نمیشود و توسعهدهندگان باید این نکته را در نظر داشته باشند.
مشاهده مطلب اصلی