آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server | آموزش تخصصی SQL Server

آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server

توسط admin | گروه SQL Server | 1405/05/09

نظرات 0

آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server

مقدمه و مسئله‌ای که این موضوع حل می‌کند

آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server برای فعال‌کردن Query Store برای ثبت Query Text، Plan و Runtime Statistics در سطح Database استفاده می‌شود. این مقاله از تعریف پایه شروع می‌کند و سپس Scope، Queryهای تشخیصی، مثال‌های قابل اجرا و تصمیم‌های عملیاتی را به‌صورت مرحله‌ای توضیح می‌دهد.

مخاطب اصلی Database Developer، DBA و مهندس Performance است. پیش‌نیاز، دسترسی خواندن Metadata و شناخت مقدماتی Execution Plan، DMVs و Transaction است. در پایان می‌توانید تشخیص دهید چه زمانی ALTER DATABASE ... SET QUERY_STORE = ON انتخاب مناسبی است و چه زمانی باید روش دیگری به‌کار رود.

این موضوع بخشی از خانواده راهنمای جامع Query Store Configuration در SQL Server است. مسیر کامل مجموعه در مقاله مادر این خانواده قرار دارد.

دسترسی سریع

  1. تعریف و Scope موضوع
  2. Syntax یا روش Configuration
  3. منطق اجرا و کنترل State
  4. ده مثال عملی
  5. اشتباهات رایج و Performance
  6. Best Practices، FAQ و چک‌لیست

تعریف و جایگاه موضوع

ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server به‌طور مشخص برای فعال‌کردن Query Store برای ثبت Query Text، Plan و Runtime Statistics در سطح Database به‌کار می‌رود. جایگاه آن در چرخه Troubleshooting میان جمع‌آوری Evidence، تحلیل Root Cause، اجرای Change و کنترل نتیجه قرار می‌گیرد.

مفاهیم کلیدی این مقاله شامل QUERY_STORE ON، query_text، plan، runtime_stats، capture policy است. این مفاهیم باید در کنار هم دیده شوند؛ برای نمونه افزایش QUERY_STORE ON بدون بررسی query_text الزاماً نشانه مشکل یا موفقیت نیست.

نقشه مفهومی و جایگاه: آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Serverنمای فنی اختصاصی آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server با برچسب‌های QUERY_STORE ON, query_text, plan, runtime_stats, capture policyنقشه مفهومی و جایگاهآموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL ServerQUERY_STORE ONquery_textplanruntime_statscapture policyM1M2M3M4

این تصویر جایگاه آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server را میان اجزای مرتبط نشان می‌دهد و مشخص می‌کند QUERY_STORE ON چگونه به query_text و plan متصل می‌شود.

پیش‌نیاز، Configuration و Rollback

این Feature یا Configuration در Scope مشخص Database عمل می‌کند. Compatibility Level، Edition، State فعلی و Storage باید پیش از تغییر بررسی شوند.

Syntax یا Query پایه

ALTER DATABASE CURRENT SET QUERY_STORE = ON;

رفتارهای ویژه و محدودیت سازگاری

رفتار ALTER DATABASE ... SET QUERY_STORE = ON ممکن است با Version، Edition، Compatibility Level و Permission تغییر کند. مقدار NULL، نبود داده، Restart سرویس، Eviction از Cache یا READ_ONLY شدن Query Store باید به‌عنوان حالت معتبر در طراحی Query در نظر گرفته شود.

اجزای اصلی و منطق اجرا

Scope و داده مرجع

برای آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server نخست باید Scope اندازه‌گیری مشخص باشد. فعال‌کردن Query Store برای ثبت Query Text، Plan و Runtime Statistics در سطح Database بدون تعیین Database، Instance، Session یا Query هدف می‌تواند به نتیجه‌گیری نادرست منجر شود.

  • ثبت QUERY_STORE ON در Baseline
  • تعیین ارتباط با query_text
  • مشخص‌کردن Reset Condition برای plan

معیار موفقیت و کنترل تغییر

معیار موفقیت باید قبل از اجرا نوشته شود؛ برای مثال کاهش Latency یا Logical Reads بدون افزایش Compile، Blocking یا I/O. runtime_stats و capture policy باید در گزارش Before/After حضور داشته باشند.

Audit و قابلیت بازبینی

زمان Capture، Login اجراکننده، نسخه SQL Server، Compatibility Level و Change Ticket را کنار نتیجه نگه دارید. این کار تحلیل Incident و انتقال دانش به تیم بعدی را قابل‌اعتماد می‌کند.

هشدار عملیاتی

قبل از فعال‌سازی باید Storage Limit، Capture Mode و Cleanup Policy تعریف شود تا Query Store به READ_ONLY نرود.

جریان اجرا و داده: آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Serverنمای فنی اختصاصی آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server با برچسب‌های QUERY_STORE ON, query_text, plan, runtime_stats, capture policyجریان اجرا و دادهآموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL ServerQUERY_STORE ONquery_textplanruntime_statsruntime_statscapture policystorage

این جریان، مسیر واقعی از ورودی و State اولیه تا نتیجه قابل‌مشاهده در آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server را نمایش می‌دهد؛ نقاط کنترل QUERY_STORE ON، query_text و runtime_stats در آن برجسته شده‌اند.

مثال‌های عملی از ساده تا پیشرفته

مثال 1: بررسی State قبل از اقدام

قبل از استفاده از ALTER DATABASE ... SET QUERY_STORE = ON باید State فعلی ثبت شود.

SELECT *
FROM sys.database_query_store_options;
خروجیتفسیر
checked_atزمان Baseline
stateوضعیت قبل

نکته عملی: Baseline امکان مقایسه Before/After و Rollback تصمیم را فراهم می‌کند.

مثال 2: Syntax پایه و کنترل‌شده

نمونه اصلی ALTER DATABASE ... SET QUERY_STORE = ON با Scope روشن نمایش داده می‌شود.

ALTER DATABASE CURRENT SET QUERY_STORE = ON;
خروجیتفسیر
commandپذیرفته شد یا خطای دقیق
scopeDatabase یا Instance

نکته عملی: Commandهای تغییردهنده را ابتدا در Test اجرا کنید و در Production بدون Change Approval استفاده نکنید.

مثال 3: کنترل نسخه SQL Server

نسخه Engine و Compatibility Level می‌تواند Availability یا رفتار گزینه را تغییر دهد.

SELECT
    SERVERPROPERTY(N'ProductVersion') AS product_version,
    SERVERPROPERTY(N'ProductLevel') AS product_level,
    SERVERPROPERTY(N'Edition') AS edition,
    compatibility_level
FROM sys.databases
WHERE database_id = DB_ID();
خروجیتفسیر
product_versionنسخه Engine
compatibility_levelسطح سازگاری

نکته عملی: مستندات داخلی سازمان باید نسخه و Edition هدف را صریح ثبت کند.

مثال 4: کنترل Permission اجرا

برای جلوگیری از خطای Runtime، Permission مرتبط پیش از Change Window بررسی می‌شود.

SELECT
    IS_SRVROLEMEMBER(N'sysadmin') AS IsSysadmin,
    IS_MEMBER(N'db_owner') AS IsDbOwner,
    ORIGINAL_LOGIN() AS OriginalLogin;
خروجیتفسیر
IsSysadmin0 یا 1
IsDbOwner0 یا 1

نکته عملی: به‌جای افزایش دائمی Permission، مجوز حداقلی و فرایند کنترل‌شده تعریف کنید.

مثال 5: ثبت Baseline Plan Cache

برای موضوع‌های Cache یا Recompile، وضعیت Plan Cache قبل و بعد مقایسه می‌شود.

SELECT
    COUNT_BIG(*) AS cached_plan_count,
    SUM(CONVERT(bigint, size_in_bytes)) / 1024 AS cached_size_kb,
    SUM(CONVERT(bigint, usecounts)) AS total_usecounts
FROM sys.dm_exec_cached_plans;
خروجیتفسیر
cached_plan_countتعداد Plan
cached_size_kbحجم KB

نکته عملی: تغییر Count بدون مشاهده CPU و Latency برای نتیجه‌گیری کافی نیست.

مثال 6: ثبت Baseline Query Store

در Databaseهای دارای Query Store، Runtime Statistics برای مقایسه نگه‌داری می‌شود.

SELECT TOP (10)
    q.query_id, p.plan_id,
    SUM(rs.count_executions) AS executions,
    AVG(rs.avg_duration) AS avg_duration_microseconds
FROM sys.query_store_query AS q
JOIN sys.query_store_plan AS p ON p.query_id = q.query_id
JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id = p.plan_id
GROUP BY q.query_id, p.plan_id
ORDER BY avg_duration_microseconds DESC;
خروجیتفسیر
query_idشناسه Query
avg_durationمیانگین Duration

نکته عملی: اگر Query Store خاموش است، این مثال باید با Baseline دیگری جایگزین شود.

مثال 7: اجرای Transactional Guard

برای Commandهای Metadata یا Configuration، ابتدا Database Context و شرط ایمنی کنترل می‌شود.

IF DB_NAME() IN (N'master', N'model', N'msdb')
    THROW 51000, N'برای این مثال یک Database کاربری انتخاب کنید.', 1;

-- پس از تأیید Change Window اجرا شود:
ALTER DATABASE CURRENT SET QUERY_STORE = ON;
خروجیتفسیر
validationDatabase کاربری
executionپس از Guard

نکته عملی: Guard ساده جایگزین Backup و Change Management نیست، اما خطای Context را کم می‌کند.

مثال 8: سناریوی Rollback یا بازگشت State

هر تغییر باید یک مسیر بازگشت روشن داشته باشد.

SELECT N'ثبت State قبل از تغییر' AS step_name, SYSDATETIME() AS step_time;
-- دستور Rollback متناسب با Change Plan در این بخش ثبت می‌شود.
SELECT N'کنترل State بعد از Rollback' AS step_name, SYSDATETIME() AS step_time;
خروجیتفسیر
step_nameقبل و بعد
step_timeزمان Audit

نکته عملی: برای عملیات حذف داده یا Cache، Rollback واقعی ممکن نیست؛ در آن حالت Recovery Plan و Monitoring جایگزین است.

مثال 9: روش اشتباه و نسخه اصلاح‌شده

اجرای Command بدون Scope، Baseline و هشدار Production یک Anti-pattern است.

-- روش اشتباه:
-- اجرای فوری بدون ثبت Baseline

-- نسخه اصلاح‌شده:
SELECT *
FROM sys.database_query_store_options;
-- سپس اجرای Change در Window تأییدشده
خروجیتفسیر
روش اشتباهبدون Baseline
نسخه اصلاح‌شدهBaseline و Approval

نکته عملی: هر Command باید Owner، زمان، هدف، معیار موفقیت و تصمیم توقف داشته باشد.

مثال 10: مقایسه Performance قبل و بعد

Metricهای CPU، Reads و Execution Count قبل و بعد از اقدام مقایسه می‌شوند.

SELECT TOP (20)
    qs.plan_handle,
    qs.execution_count,
    qs.total_worker_time,
    qs.total_logical_reads,
    qs.total_elapsed_time
FROM sys.dm_exec_query_stats AS qs
ORDER BY qs.total_worker_time DESC;
خروجیتفسیر
total_worker_timeCPU تجمعی
total_logical_readsReads تجمعی

نکته عملی: بهبود یک Metric نباید با بدترشدن Blocking، Compile یا I/O پنهان شود.

کاربردهای واقعی در پروژه

در پروژه واقعی، ALTER DATABASE ... SET QUERY_STORE = ON زمانی ارزشمند است که به یک Runbook متصل شود. Trigger استفاده، Owner تصمیم، Query جمع‌آوری Evidence، مقدار Baseline، محدوده Change و معیار توقف باید پیش از Incident نوشته شده باشد.

برای Workload سازمانی می‌توان خروجی QUERY_STORE ON را با query_text، Query Store، Extended Events و Metricهای سیستم‌عامل هم‌بسته کرد. این هم‌بستگی کمک می‌کند مشکل Application، Storage، Compile یا Concurrency با یک علامت منفرد اشتباه نشود.

اشتباهات رایج و روش اصلاح

  1. اقدام بر اساس یک Snapshot: راه اصلاح، Capture چندبازه‌ای و مقایسه QUERY_STORE ON با Baseline است.
  2. نادیده‌گرفتن Scope: Database، Instance، Session یا Plan هدف را قبل از اجرای ALTER DATABASE ... SET QUERY_STORE = ON مشخص کنید.
  3. اجرای Change بدون معیار موفقیت: CPU، Reads، Latency، Compile و Blocking را قبل و بعد ثبت کنید.
  4. فرض دائمی‌بودن Counterها: Restart، Eviction، Cleanup یا Reset می‌تواند تاریخچه query_text را تغییر دهد.
  5. استفاده از Permission بیش از نیاز: دسترسی حداقلی و حساب سرویس مجزا برای مانیتورینگ تعریف کنید.

Performance Considerations

هزینه اصلی در این موضوع به نرخ Polling، حجم خروجی، Compile، I/O و Scope Change وابسته است. Query مانیتورینگ باید فقط ستون‌های لازم را بخواند و از SELECT ستاره در Loop پرتکرار دوری کند. برای Changeهای Cache یا Query Store، اثر روی CPU و Latency بعد از تغییر باید در Window کوتاه کنترل شود.

SARGability و Index زمانی مهم می‌شوند که داده ALTER DATABASE ... SET QUERY_STORE = ON در Repository دائمی ذخیره و گزارش‌گیری شود. روی جدول Snapshot، Columnهای زمان Capture، Database ID، Query ID یا Plan ID را متناسب با الگوی گزارش Index کنید؛ خود DMVها را نمی‌توان Index کرد.

Best Practices

  1. Scope را کوچک و قابل‌اندازه‌گیری انتخاب کنید.
  2. قبل از تغییر، Baseline مربوط به QUERY_STORE ON و query_text را ذخیره کنید.
  3. Version، Edition و Compatibility Level را در Runbook بنویسید.
  4. Change را در Test یا Canary اجرا و سپس مرحله‌ای گسترش دهید.
  5. پس از اجرا، plan، runtime_stats و Metricهای کاربر نهایی را دوباره اندازه بگیرید.
  6. برای عملیات برگشت‌ناپذیر، Backup Evidence و تأیید دومرحله‌ای داشته باشید.
تصمیم Performance و Best Practices: آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Serverنمای فنی اختصاصی آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server با برچسب‌های QUERY_STORE ON, query_text, plan, runtime_stats, capture policyتصمیم Performance و Best Practicesآموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Serverآموزش جامع ALTER DATABASE ..QUERY_STORE ONquery_textplanruntime_statscapture policy

این پنل تصمیم نشان می‌دهد در سناریوی آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server چه زمانی مسیر پیشنهادی انتخاب شود، کجا Overhead یا ریسک افزایش می‌یابد و چگونه QUERY_STORE ON با capture policy سنجیده شود.

مزایا، محدودیت‌ها و زمان نامناسب استفاده

بُعدتوضیح تصمیم‌محور
مزیتایجاد Evidence دقیق برای فعال‌کردن Query Store برای ثبت Query Text، Plan و Runtime Statistics در سطح Database
محدودیتوابستگی به Scope، Permission و State مربوط به QUERY_STORE ON
زمان نامناسبوقتی Baseline، Change Window یا امکان کنترل query_text وجود ندارد
جایگزین مکملQuery Store، Extended Events، Repository Snapshot و Monitoring سیستم‌عامل

سؤالات متداول

آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server دقیقاً چه مسئله‌ای را حل می‌کند؟

مسئله اصلی، فعال‌کردن Query Store برای ثبت Query Text، Plan و Runtime Statistics در سطح Database است. ارزش واقعی زمانی ایجاد می‌شود که خروجی با Baseline و Context درست تفسیر شود.

برای شروع کار با آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server چه پیش‌نیازی لازم است؟

دسترسی مناسب، شناخت Scope، ثبت State اولیه و آشنایی با QUERY_STORE ON و query_text ضروری است.

آیا استفاده از آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server هزینه زیرساخت را کاهش می‌دهد؟

در صورت استفاده هدفمند، می‌تواند هزینه ناشی از CPU، I/O، Incident و زمان عیب‌یابی را کاهش دهد؛ نتیجه باید با Metric مالی و فنی سنجیده شود.

این موضوع برای پروژه‌های سازمانی چه ارزشی دارد؟

در پروژه سازمانی، استانداردسازی QUERY_STORE ON و plan باعث Audit بهتر، تصمیم سریع‌تر و کاهش ریسک Change می‌شود.

آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server با روش‌های جایگزین چه تفاوتی دارد؟

تفاوت اصلی در Scope، میزان جزئیات، اثر عملیاتی و قابلیت بازگشت است؛ انتخاب باید بر اساس سناریو باشد نه محبوبیت ابزار.

برای پیاده‌سازی حرفه‌ای آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server می‌توان از خدمات تخصصی استفاده کرد؟

بله، آموزش، مشاوره، طراحی Runbook و اجرای پروژه SQL Server می‌تواند متناسب با Workload و محدودیت سازمان انجام شود.

رایج‌ترین خطا در استفاده از آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server چیست؟

رایج‌ترین خطا، اقدام بدون Baseline و تفسیر جداگانه QUERY_STORE ON بدون توجه به runtime_stats است.

آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server چه اثری بر Performance دارد؟

اثر به نرخ اجرا، Scope و Workload وابسته است. CPU، Logical Reads، Compile، Blocking و Latency باید هم‌زمان بررسی شوند.

Best Practice اصلی برای آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server چیست؟

با Scope کوچک شروع کنید، State را ثبت کنید، معیار موفقیت تعریف کنید و پس از تغییر، query_text و capture policy را دوباره اندازه بگیرید.

آیا آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server در همه نسخه‌های SQL Server یکسان است؟

خیر. Availability گزینه‌ها، Permissionها، ستون‌ها و رفتار ممکن است با Version، Edition و Compatibility Level تفاوت داشته باشد؛ محیط هدف را مستقیماً بررسی کنید.

سؤالات مصاحبه

  1. چگونه Scope و Reset Condition مربوط به آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server را توضیح می‌دهید؟
  2. برای اندازه‌گیری اثر آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server چه Baseline و Metricهایی انتخاب می‌کنید؟
  3. تفاوت Diagnostic Action و Change Action در این موضوع چیست؟
  4. اگر QUERY_STORE ON بهتر ولی query_text بدتر شود، تصمیم شما چیست؟
  5. چه Rollback Plan و Audit Trail برای استفاده از آموزش جامع ALTER DATABASE ... SET QUERY_STORE = ON در SQL Server تعریف می‌کنید؟

چک‌لیست نهایی

  1. Database و Instance هدف را تأیید کنید.
  2. Permission لازم را بدون افزایش دائمی Role بررسی کنید.
  3. Baseline و زمان شروع اندازه‌گیری را ذخیره کنید.
  4. Query یا Command را ابتدا با Scope محدود اجرا کنید.
  5. Output، Messages و Errorها را در Change Log ثبت کنید.
  6. Metricهای Before/After را با SLA مقایسه کنید.
  7. در صورت Regression، Rollback یا توقف مرحله بعد را اجرا کنید.
  8. نتیجه و درس‌آموخته را در Runbook خانواده ثبت کنید.

جمع‌بندی

ALTER DATABASE ... SET QUERY_STORE = ON زمانی انتخاب مناسبی است که هدف شما فعال‌کردن Query Store برای ثبت Query Text، Plan و Runtime Statistics در سطح Database باشد و بتوانید Scope، Baseline و اثر تغییر را کنترل کنید. استفاده بدون Evidence یا تکرار مکانیکی Command می‌تواند نتیجه معکوس ایجاد کند.

قدم بعدی، مقایسه این موضوع با سایر اعضای راهنمای جامع Query Store Configuration در SQL Server و ساخت Runbook متناسب با Workload واقعی است.

خدمات برنامه‌نویسی و پایگاه داده

برنامه‌نویسی در اصفهان؛ قبول سفارش‌های برنامه‌نویسی و پایگاه داده با شماره 09131253620.

انجام پروژه، آموزش برنامه‌نویسی و آموزش SQL Server توسط مجموعه‌ای معتبر با سابقه فعالیت حرفه‌ای از سال ۱۳۷۵ شمسی تاکنون.

برای سفارش پروژه‌های برنامه‌نویسی، پایگاه داده، سیستم‌های تحت وب و راهکارهای نرم‌افزاری با 09131253620 تماس بگیرید؛ ایتا، واتساپ و تماس مستقیم در دسترس است.

تماس با ما

 

0 نظر

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

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر