معماری داخلی Query Store در SQL Server چگونه کار میکند؟
معماری داخلی Query Store در SQL Server شامل بخشهایی برای ثبت متن کوئری، پلن اجرایی و آمار اجرای آنها است.
معماری داخلی Query Store در SQL Server چگونه کار میکند؟
بهینهسازی عملکرد پایگاه داده یکی از مهمترین وظایف مدیران پایگاه داده (DBA) و توسعهدهندگان SQL Server است.
با افزایش حجم دادهها و پیچیدهتر شدن کوئریها، یافتن علت کاهش عملکرد سیستم به یکی از چالشهای اصلی تبدیل میشود.
در نسخههای قدیمی SQL Server، اطلاعات مربوط به اجرای کوئریها معمولاً پس از راهاندازی مجدد سرویس یا پاک شدن Cache از بین میرفت و تحلیل مشکلات عملکردی دشوار بود. مایکروسافت برای حل این مشکل قابلیتی به نام Query Store را از SQL Server 2016 معرفی کرد.
Query Store مکانیزمی داخلی برای جمعآوری، ذخیرهسازی و تحلیل اطلاعات مربوط به اجرای کوئریها است.
این قابلیت تاریخچه اجرای کوئریها، پلنهای اجرایی (Execution Plans)، آمار مصرف منابع و تغییرات عملکرد را در داخل خود پایگاه داده ذخیره میکند.
به همین دلیل حتی پس از Restart شدن SQL Server نیز اطلاعات حفظ میشود و مدیر پایگاه داده میتواند تغییرات عملکرد را در بازههای زمانی مختلف بررسی کند.
Query Store چیست؟
Query Store یک قابلیت داخلی SQL Server است که اطلاعات مربوط به اجرای Queryها را بهصورت دائمی در خود پایگاه داده نگهداری میکند.
این اطلاعات شامل متن کوئری، پلن اجرایی، آمار زمان اجرا، میزان مصرف CPU، حافظه، عملیات خواندن و نوشتن روی دیسک و سایر شاخصهای عملکردی است.
هدف اصلی Query Store ایجاد یک تاریخچه از رفتار کوئریها است تا مدیر سیستم بتواند مشکلات عملکردی را در طول زمان تحلیل کند.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
⇐همین حالا شروع کنید و به دنیای دادهها بپیوندید!
اجزای معماری داخلی Query Store در SQL Server
معماری Query Store از چند بخش اصلی تشکیل شده است که با همکاری یکدیگر اطلاعات را جمعآوری و ذخیره میکنند.
اجزای اصلی عبارتاند از:
-
Query Text Repository
-
Query Metadata
-
Execution Plans
-
Runtime Statistics
-
Background Flush Process

Storage داخل Database در SQL Server
هر یک از این بخشها وظیفه مشخصی بر عهده دارند.
1. Query Text Repository
اولین بخش Query Store، مخزن متن کوئری است.
زمانی که یک Query برای اولین بار اجرا میشود، متن کامل آن ذخیره میشود.
به عنوان مثال:
SELECT *
FROM Employees
WHERE DepartmentID = 5;
این متن تنها یک بار ذخیره میشود و اجرای مجدد همان Query فقط آمار جدیدی به آن اضافه میکند.
این کار باعث کاهش حجم ذخیرهسازی میشود.
2. Query Metadata
بعد از ذخیره متن Query، SQL Server اطلاعات شناسایی آن را نیز ثبت میکند.
این اطلاعات شامل موارد زیر است:
-
شناسه Query
-
شناسه پایگاه داده
-
نام کاربر اجراکننده
-
تنظیمات Session
-
Compatibility Level
-
Context اجرای Query
این اطلاعات باعث میشوند Queryهای مشابه از یکدیگر تفکیک شوند.
3. Execution Plans
یکی از مهمترین قسمتهای Query Store ذخیره Execution Plan است.
هر بار که SQL Server تصمیم میگیرد پلن جدیدی برای اجرای Query ایجاد کند، آن پلن در Query Store ثبت میشود.
ممکن است یک Query چندین Execution Plan داشته باشد.
مثلاً:
-
Index Seek
-
Index Scan
-
Table Scan
-
Parallel Plan
تمام این پلنها نگهداری میشوند.
در نتیجه مدیر پایگاه داده میتواند تغییر پلنها را در طول زمان مشاهده کند.
4. Runtime Statistics
مهمترین دادههای Query Store مربوط به Runtime Statistics هستند.
برای هر Execution Plan اطلاعات زیر ذخیره میشود:
-
مدت زمان اجرا
-
CPU Time
-
Logical Reads
-
Physical Reads
-
Memory Consumption
-
تعداد دفعات اجرا
-
Max Duration
-
Min Duration
-
Average Duration
این اطلاعات به صورت دورهای تجمیع میشوند.
نحوه جمعآوری اطلاعات
هنگامی که Query اجرا میشود، SQL Server ابتدا آن را کامپایل میکند.
سپس Execution Plan تولید میشود.
بعد از پایان اجرا، اطلاعات عملکرد وارد حافظه داخلی Query Store میشود.
در بازههای زمانی مشخص، این اطلاعات از حافظه به فایلهای دیتابیس منتقل میشوند.
به همین دلیل عملیات نوشتن روی دیسک دائماً انجام نمیشود.
Background Flush Process
یکی از بخشهای مهم معماری Query Store، فرآیند Background Flush است.
این فرآیند مسئول انتقال اطلاعات از حافظه به دیسک است.
مراحل آن به شکل زیر است:
- اجرای Query
- ذخیره موقت اطلاعات در حافظه
- تجمیع دادهها
- نوشتن اطلاعات در Query Store
این روش باعث کاهش فشار روی سیستم ذخیرهسازی میشود.
محل ذخیره اطلاعات
برخلاف بسیاری از DMVها که اطلاعات را فقط در حافظه نگهداری میکنند، Query Store اطلاعات خود را داخل فایلهای پایگاه داده ذخیره میکند.
به همین دلیل:
- بعد از Restart اطلاعات حذف نمیشوند.
- بعد از Failover اطلاعات باقی میمانند.
- تاریخچه عملکرد همیشه در دسترس است.
ارتباط Query Store با Plan Cache
Plan Cache و Query Store دو بخش متفاوت هستند.
Plan Cache:
- داخل حافظه RAM قرار دارد.
- پس از Restart حذف میشود.
- فقط آخرین Plan را نگهداری میکند.
Query Store:
- داخل Database ذخیره میشود.
- دائمی است.
- تاریخچه همه Planها را نگهداری میکند.
به همین دلیل Query Store ابزار بسیار مناسبی برای تحلیل مشکلات عملکردی است.
Plan Forcing
یکی از مهمترین قابلیتهای Query Store امکان Plan Forcing است.
فرض کنید Query در گذشته با Plan شماره 12 عملکرد بسیار خوبی داشته است.
اما بعد از Update شدن آمار یا تغییر دادهها SQL Server پلن شماره 18 را انتخاب کرده و عملکرد افت کرده است.
مدیر پایگاه داده میتواند پلن قبلی را Force کند.
در این حالت SQL Server دوباره از همان پلن قدیمی استفاده خواهد کرد.
این ویژگی یکی از کاربردیترین امکانات Query Store محسوب میشود.
Runtime Interval
Query Store اطلاعات را به صورت بازههای زمانی ذخیره میکند.
برای مثال:
- هر 15 دقیقه
- هر 30 دقیقه
- هر 1 ساعت
در هر بازه، اطلاعات آماری تجمیع میشوند.
این روش باعث کاهش حجم دادهها میشود.
Cleanup Process
اگر Query Store بدون محدودیت رشد کند، حجم دیتابیس افزایش پیدا میکند.
به همین دلیل مکانیزم Cleanup وجود دارد.
این فرآیند اطلاعات قدیمی را حذف میکند.
همچنین مدیر پایگاه داده میتواند تعیین کند اطلاعات چند روز نگهداری شوند.
برای مثال:
- 30 روز
- 60 روز
- 90 روز
حالتهای کاری Query Store در SQL Server
Query Store دارای چند Mode است.
-
Read Write
در این حالت اطلاعات جدید ثبت میشوند.
-
Read Only
فقط اطلاعات قبلی قابل مشاهده هستند.
اطلاعات جدید ثبت نمیشوند.
-
Off
Query Store غیرفعال است.
مصرف حافظه
ابتدا اطلاعات در حافظه جمعآوری میشوند.
سپس در زمان مناسب به دیسک منتقل میشوند.
این طراحی باعث میشود:
- سرعت اجرای Query کاهش پیدا نکند.
- عملیات نوشتن روی دیسک بهینه باشد.
- فشار روی Storage کمتر شود.
ساختار داخلی جداول
اطلاعات Query Store در جداول داخلی سیستم ذخیره میشوند.
SQL Server برای نمایش این اطلاعات Viewهای سیستمی مختلفی فراهم کرده است؛ از جمله:
- sys.query_store_query
- sys.query_store_plan
- sys.query_store_runtime_stats
- sys.query_store_query_text
- sys.query_store_runtime_stats_interval
این Viewها امکان تهیه گزارشهای تحلیلی و بررسی روند تغییرات عملکرد را فراهم میکنند.
مزایای معماری Query Store در SQL Server
معماری Query Store مزایای متعددی دارد:
-
ذخیره دائمی اطلاعات
-
نگهداری تاریخچه عملکرد
-
مقایسه Execution Planها
-
شناسایی Queryهای کند
-
تحلیل Regression
-
امکان Plan Forcing
-
کاهش زمان عیبیابی
مناسب برای سیستمهای تولید (Production)

محدودیتها معماری داخلی Query Store در SQL Server
با وجود مزایای فراوان، Query Store محدودیتهایی نیز دارد:
- افزایش حجم پایگاه داده در صورت نگهداری طولانیمدت اطلاعات
- مصرف مقداری از منابع CPU و فضای ذخیرهسازی برای ثبت آمار
- نیاز به تنظیم صحیح سیاستهای پاکسازی (Cleanup)
- در سیستمهای با حجم بسیار بالای تراکنش، انتخاب تنظیمات پیشفرض ممکن است مناسب نباشد و نیاز به بهینهسازی داشته باشد.
بهترین روشهای استفاده معماری داخلی Query Store در SQL Server
برای بهرهبرداری بهتر از Query Store توصیه میشود:
- Query Store را برای پایگاههای داده عملیاتی فعال کنید.
- دوره نگهداری اطلاعات را متناسب با نیاز کسبوکار تنظیم کنید.
- حجم فضای اختصاصیافته را کنترل کنید.
- بهصورت دورهای Queryهای پرهزینه را بررسی کنید.
- از قابلیت Plan Forcing تنها زمانی استفاده کنید که از مناسب بودن پلن اطمینان دارید.
- گزارشهای Query Store را در کنار Dynamic Management Views برای تحلیل دقیقتر استفاده کنید.
نتیجهگیری
Query Store یکی از مهمترین قابلیتهای SQL Server برای نظارت و تحلیل عملکرد کوئریها است.
معماری آن به گونهای طراحی شده که اطلاعات مربوط به متن کوئری، پلنهای اجرایی و آمار زمان اجرا را بهصورت دائمی در داخل پایگاه داده ذخیره میکند.
این اطلاعات ابتدا در حافظه جمعآوری شده و سپس توسط فرآیندهای پسزمینه به دیسک منتقل میشوند تا تأثیر کمی بر عملکرد سیستم داشته باشند.
امکان مشاهده تاریخچه اجرای کوئریها، مقایسه پلنهای مختلف، شناسایی افت عملکرد (Performance Regression) و استفاده از قابلیت Plan Forcing، Query Store را به ابزاری ارزشمند برای مدیران پایگاه داده و توسعهدهندگان تبدیل کرده است.
استفاده صحیح از این قابلیت میتواند زمان عیبیابی را کاهش داده، پایداری سیستم را افزایش دهد و فرآیند بهینهسازی کوئریها را بسیار سادهتر و دقیقتر کند.


کاربران ما
شما هم نظرتون با ما دریاره “معماری داخلی Query Store در SQL Server چگونه کار میکند؟” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید