راهنمای جامع Query Execution DMVs در SQL Server با مثال عملی

راهنمای جامع DMVهای اجرای Query در SQL Server

توسط admin | گروه SQL Server | 1405/04/30

نظرات 0

راهنمای جامع DMVهای اجرای Query در SQL Server

Dynamic Management Views و Dynamic Management Functions مرتبط با Execution، یکی از مهم‌ترین ابزارهای DBA و توسعه‌دهنده برای دیدن رفتار داخلی موتور SQL Server هستند. با این مجموعه می‌توان درخواست‌های فعال، Sessionها، Connectionها، آمار Query و Procedure، Plan Cache، Cursorها و برخی قابلیت‌های تخصصی اجرای توزیع‌شده را بررسی کرد.

هدف این مقاله ایجاد یک نقشه راه عملی است: بدانیم هر DMV چه سؤال مشخصی را پاسخ می‌دهد، چه زمانی باید از آن استفاده کنیم و چگونه خروجی چند DMV را کنار هم قرار دهیم. لینک هر موضوع به مقاله مستقل و مفصل همان DMV متصل است و همه لینک‌ها به‌صورت Root-relative ساخته شده‌اند.

برای Troubleshooting حرفه‌ای، یک DMV به‌تنهایی کافی نیست. مسئله را از Request و Session شروع کنید، سپس Query Text، Plan، آمار تجمعی، Waitها و Context سیستم را به هم مرتبط کنید.

دسترسی سریع

مدل ذهنی: Connection، Session، Request و Plan

در یک زنجیره ساده، Connection کانال ارتباطی کلاینت با Database Engine است، Session Context احراز هویت و تنظیمات کاربر را نگه می‌دارد و Request واحد کاری در حال اجرای فعلی است. در کنار آن، Plan Cache و آمار تجمعی به ما می‌گویند Queryها و Moduleهای کش‌شده در طول عمر Plan چه رفتاری داشته‌اند.

این تفکیک مهم است؛ چون یک Session می‌تواند در لحظه Request فعال نداشته باشد، یک Connection ممکن است چند مفهوم شبکه‌ای را آشکار کند و آمار Query Cache ممکن است پس از Recompile یا Eviction از بین برود. بنابراین Scope و Lifetime هر منبع داده را قبل از تحلیل بشناسید.

دسته‌بندی DMVهای این مجموعه

۱. فعالیت زنده: Request، Session و Connection

sys.dm_exec_requests برای Requestهای در حال اجرا، sys.dm_exec_sessions برای Context نشست‌ها و sys.dm_exec_connections برای جزئیات اتصال و شبکه به کار می‌روند. کنار هم قراردادن این سه منبع، نقطه شروع بسیار خوبی برای بررسی Blocking، Sessionهای Sleeping و مشکلات اتصال است.

۲. آمار تجمعی Query و Module

sys.dm_exec_query_stats آمار Statementهای دارای Plan کش‌شده را ارائه می‌کند. sys.dm_exec_procedure_stats، sys.dm_exec_function_stats و sys.dm_exec_trigger_stats دید Module-level می‌دهند و برای یافتن اشیای پرتکرار یا پرهزینه مفیدند.

۳. Plan Cache و Cursor

sys.dm_exec_cached_plans ساختار کلی Plan Cache، اندازه و میزان reuse را نشان می‌دهد. sys.dm_exec_cursors نیز برای مشاهده Cursorهای Sessionها و شناسایی Cursorهای باز یا طولانی کاربرد دارد.

۴. Background، External و Distributed Execution

برخی DMVهای این مجموعه برای زیرسیستم‌های تخصصی‌تر، نسخه‌ها یا معماری‌های توزیع‌شده طراحی شده‌اند. پیش از استفاده باید وجود Object، ستون‌ها و پلتفرم پشتیبانی‌شده را کنترل کرد؛ زیرا SQL Server تک‌گرهی، Azure SQL، Synapse، Fabric و سایر محصولات لزوماً Scope یکسان ندارند.

sys.dm_exec_requests — درخواست‌های فعال SQL Server

نمایش درخواست‌هایی که هم‌اکنون در حال اجرا هستند؛ مناسب برای بررسی وضعیت اجرا، انتظارها، CPU، زمان سپری‌شده و Blocking. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «درخواست‌های فعال SQL Server» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_requests با مثال‌های عملی

sys.dm_exec_sessions — نشست‌های فعال و احراز هویت‌شده

نمایش نشست‌های کاربری و داخلی و اطلاعاتی مانند Login، برنامه کلاینت، وضعیت نشست، مصرف منابع و تراکنش‌های باز. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «نشست‌های فعال و احراز هویت‌شده» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_sessions با مثال‌های عملی

sys.dm_exec_connections — اتصال‌های شبکه و پروتکل

نمایش اتصال‌های برقرارشده به Database Engine و جزئیات شبکه، زمان اتصال، روش احراز هویت و ارتباط اتصال با Session. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «اتصال‌های شبکه و پروتکل» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_connections با مثال‌های عملی

sys.dm_exec_query_stats — آمار تجمعی اجرای Queryهای کش‌شده

ارائه آمار تجمعی Statementهای دارای Plan کش‌شده؛ از مهم‌ترین منابع برای یافتن Queryهای پرهزینه از نظر CPU، زمان، Reads و Writes. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «آمار تجمعی اجرای Queryهای کش‌شده» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_query_stats با مثال‌های عملی

sys.dm_exec_procedure_stats — آمار اجرای Stored Procedureها

ارائه آمار تجمعی Procedureهای کش‌شده برای تحلیل تعداد اجرا، CPU، زمان، Reads، Writes و آخرین اجرای هر Procedure. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «آمار اجرای Stored Procedureها» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_procedure_stats با مثال‌های عملی

sys.dm_exec_function_stats — آمار اجرای Functionها

ارائه آمار تجمعی اجرای Functionهای کش‌شده در محیط‌های پشتیبانی‌شده و کمک به شناسایی توابع پرهزینه. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «آمار اجرای Functionها» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_function_stats با مثال‌های عملی

sys.dm_exec_trigger_stats — آمار اجرای Triggerها

ارائه آمار تجمعی Triggerهای کش‌شده برای بررسی تعداد اجرا، زمان، CPU و هزینه Triggerهایی که ممکن است پنهانی روی DML اثر بگذارند. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «آمار اجرای Triggerها» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_trigger_stats با مثال‌های عملی

sys.dm_exec_cached_plans — Planهای موجود در Plan Cache

نمایش یک ردیف برای هر Plan کش‌شده و اطلاعاتی مانند تعداد استفاده، اندازه، نوع شیء و Plan Handle؛ مناسب برای تحلیل Plan Cache. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «Planهای موجود در Plan Cache» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_cached_plans با مثال‌های عملی

sys.dm_exec_cursors — Cursorهای باز و فعال

تابع مدیریت پویا برای مشاهده Cursorهای یک Session یا همه Sessionها و تحلیل Cursorهای طولانی، بازمانده یا پرهزینه. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «Cursorهای باز و فعال» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_cursors با مثال‌های عملی

sys.dm_exec_background_job_queue — صف کارهای پس‌زمینه Execution

نمایش اطلاعات صف کارهای پس‌زمینه مرتبط با زیرسیستم اجرای Query در محیط‌ها و نسخه‌های پشتیبانی‌شده؛ ساختار دقیق باید با نسخه مقصد کنترل شود. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «صف کارهای پس‌زمینه Execution» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_background_job_queue با مثال‌های عملی

sys.dm_exec_background_job_queue_stats — آمار صف کارهای پس‌زمینه

ارائه آمار مرتبط با Background Job Queue در محیط‌های پشتیبانی‌شده و کمک به مشاهده رفتار تجمعی صف‌های داخلی. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «آمار صف کارهای پس‌زمینه» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_background_job_queue_stats با مثال‌های عملی

sys.dm_exec_external_operations — عملیات خارجی Query

نمایش اطلاعات عملیات خارجی در سناریوهای پشتیبانی‌شده مانند پردازش‌های توزیع‌شده یا External Data؛ در دسترس‌بودن ستون‌ها وابسته به محصول و نسخه است. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «عملیات خارجی Query» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_external_operations با مثال‌های عملی

sys.dm_exec_external_work — کارهای خارجی Execution

نمایش Workهای خارجی مرتبط با اجرای توزیع‌شده در محیط‌های پشتیبانی‌شده؛ برای عیب‌یابی باید همراه DMVهای همان پلتفرم تحلیل شود. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «کارهای خارجی Execution» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_external_work با مثال‌های عملی

sys.dm_exec_compute_nodes — گره‌های محاسباتی

نمایش اطلاعات Compute Nodeها در معماری‌های توزیع‌شده و محیط‌های پشتیبانی‌شده؛ برای SQL Server تک‌گرهی معمولاً کاربرد روزمره ندارد. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «گره‌های محاسباتی» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_compute_nodes با مثال‌های عملی

sys.dm_exec_distributed_requests — درخواست‌های توزیع‌شده

نمایش اطلاعات درخواست‌های توزیع‌شده در پلتفرم‌های پشتیبانی‌شده و کمک به ردیابی مراحل اجرای Query در معماری چندگرهی. این DMV را زمانی انتخاب کنید که سؤال عملیاتی شما مستقیماً به «درخواست‌های توزیع‌شده» مربوط باشد. برای Queryهای نمونه، محدودیت‌ها، Performance Considerations و سناریوهای عیب‌یابی، مقاله اختصاصی را مطالعه کنید.

آموزش کامل sys.dm_exec_distributed_requests با مثال‌های عملی

جدول مقایسه‌ای DMVها

تابع/DMVکاربرد اصلینوع خروجی یا نکته مهملینک آموزش کامل
sys.dm_exec_requestsدرخواست‌های فعال SQL Serverنمایش درخواست‌هایی که هم‌اکنون در حال اجرا هستند؛ مناسب برای بررسی وضعیت اجرا، انتظارها، CPU، زمان سپری‌شده و Blocking.آموزش کامل
sys.dm_exec_sessionsنشست‌های فعال و احراز هویت‌شدهنمایش نشست‌های کاربری و داخلی و اطلاعاتی مانند Login، برنامه کلاینت، وضعیت نشست، مصرف منابع و تراکنش‌های باز.آموزش کامل
sys.dm_exec_connectionsاتصال‌های شبکه و پروتکلنمایش اتصال‌های برقرارشده به Database Engine و جزئیات شبکه، زمان اتصال، روش احراز هویت و ارتباط اتصال با Session.آموزش کامل
sys.dm_exec_query_statsآمار تجمعی اجرای Queryهای کش‌شدهارائه آمار تجمعی Statementهای دارای Plan کش‌شده؛ از مهم‌ترین منابع برای یافتن Queryهای پرهزینه از نظر CPU، زمان، Reads و Writes.آموزش کامل
sys.dm_exec_procedure_statsآمار اجرای Stored Procedureهاارائه آمار تجمعی Procedureهای کش‌شده برای تحلیل تعداد اجرا، CPU، زمان، Reads، Writes و آخرین اجرای هر Procedure.آموزش کامل
sys.dm_exec_function_statsآمار اجرای Functionهاارائه آمار تجمعی اجرای Functionهای کش‌شده در محیط‌های پشتیبانی‌شده و کمک به شناسایی توابع پرهزینه.آموزش کامل
sys.dm_exec_trigger_statsآمار اجرای Triggerهاارائه آمار تجمعی Triggerهای کش‌شده برای بررسی تعداد اجرا، زمان، CPU و هزینه Triggerهایی که ممکن است پنهانی روی DML اثر بگذارند.آموزش کامل
sys.dm_exec_cached_plansPlanهای موجود در Plan Cacheنمایش یک ردیف برای هر Plan کش‌شده و اطلاعاتی مانند تعداد استفاده، اندازه، نوع شیء و Plan Handle؛ مناسب برای تحلیل Plan Cache.آموزش کامل
sys.dm_exec_cursorsCursorهای باز و فعالتابع مدیریت پویا برای مشاهده Cursorهای یک Session یا همه Sessionها و تحلیل Cursorهای طولانی، بازمانده یا پرهزینه.آموزش کامل
sys.dm_exec_background_job_queueصف کارهای پس‌زمینه Executionنمایش اطلاعات صف کارهای پس‌زمینه مرتبط با زیرسیستم اجرای Query در محیط‌ها و نسخه‌های پشتیبانی‌شده؛ ساختار دقیق باید با نسخه مقصد کنترل شود.آموزش کامل
sys.dm_exec_background_job_queue_statsآمار صف کارهای پس‌زمینهارائه آمار مرتبط با Background Job Queue در محیط‌های پشتیبانی‌شده و کمک به مشاهده رفتار تجمعی صف‌های داخلی.آموزش کامل
sys.dm_exec_external_operationsعملیات خارجی Queryنمایش اطلاعات عملیات خارجی در سناریوهای پشتیبانی‌شده مانند پردازش‌های توزیع‌شده یا External Data؛ در دسترس‌بودن ستون‌ها وابسته به محصول و نسخه است.آموزش کامل
sys.dm_exec_external_workکارهای خارجی Executionنمایش Workهای خارجی مرتبط با اجرای توزیع‌شده در محیط‌های پشتیبانی‌شده؛ برای عیب‌یابی باید همراه DMVهای همان پلتفرم تحلیل شود.آموزش کامل
sys.dm_exec_compute_nodesگره‌های محاسباتینمایش اطلاعات Compute Nodeها در معماری‌های توزیع‌شده و محیط‌های پشتیبانی‌شده؛ برای SQL Server تک‌گرهی معمولاً کاربرد روزمره ندارد.آموزش کامل
sys.dm_exec_distributed_requestsدرخواست‌های توزیع‌شدهنمایش اطلاعات درخواست‌های توزیع‌شده در پلتفرم‌های پشتیبانی‌شده و کمک به ردیابی مراحل اجرای Query در معماری چندگرهی.آموزش کامل

مثال‌های ترکیبی و کاربردی

مثال شماره 1: مشاهده Request و Session در کنار هم

این مثال چند منبع Execution را در یک سناریوی قابل استفاده کنار هم قرار می‌دهد. خروجی نمونه صرفاً نمایشی است و مقادیر واقعی به بار کاری سرور وابسته‌اند.

SELECT r.session_id, r.status AS request_status, r.command,
       r.cpu_time, r.total_elapsed_time, r.blocking_session_id,
       s.login_name, s.host_name, s.program_name
FROM sys.dm_exec_requests AS r
JOIN sys.dm_exec_sessions AS s
  ON s.session_id = r.session_id
WHERE r.session_id <> @@SPID
ORDER BY r.total_elapsed_time DESC;
شاخصنمونهتفسیر
captured_at2026-07-21 12:00:00زمان Snapshot
resultنمونه متغیربرای تحلیل روند باید با Baseline مقایسه شود.

در محیط واقعی، Query را محدود نگه دارید و فقط برای ردیف‌های مشکوک وارد مرحله Drill-down شوید.

مثال شماره 2: یافتن Queryهای پرCPU در Cache

این مثال چند منبع Execution را در یک سناریوی قابل استفاده کنار هم قرار می‌دهد. خروجی نمونه صرفاً نمایشی است و مقادیر واقعی به بار کاری سرور وابسته‌اند.

SELECT TOP (20)
       qs.execution_count, qs.total_worker_time,
       qs.total_worker_time / NULLIF(qs.execution_count,0) AS avg_cpu,
       st.text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY qs.total_worker_time DESC;
شاخصنمونهتفسیر
captured_at2026-07-21 12:00:00زمان Snapshot
resultنمونه متغیربرای تحلیل روند باید با Baseline مقایسه شود.

در محیط واقعی، Query را محدود نگه دارید و فقط برای ردیف‌های مشکوک وارد مرحله Drill-down شوید.

مثال شماره 3: تحلیل Procedureهای پرهزینه

این مثال چند منبع Execution را در یک سناریوی قابل استفاده کنار هم قرار می‌دهد. خروجی نمونه صرفاً نمایشی است و مقادیر واقعی به بار کاری سرور وابسته‌اند.

SELECT TOP (20)
       DB_NAME(database_id) AS database_name,
       OBJECT_NAME(object_id,database_id) AS procedure_name,
       execution_count, total_elapsed_time, total_logical_reads
FROM sys.dm_exec_procedure_stats
ORDER BY total_elapsed_time DESC;
شاخصنمونهتفسیر
captured_at2026-07-21 12:00:00زمان Snapshot
resultنمونه متغیربرای تحلیل روند باید با Baseline مقایسه شود.

در محیط واقعی، Query را محدود نگه دارید و فقط برای ردیف‌های مشکوک وارد مرحله Drill-down شوید.

مثال شماره 4: بررسی حجم Plan Cache

این مثال چند منبع Execution را در یک سناریوی قابل استفاده کنار هم قرار می‌دهد. خروجی نمونه صرفاً نمایشی است و مقادیر واقعی به بار کاری سرور وابسته‌اند.

SELECT objtype,
       COUNT_BIG(*) AS plan_count,
       SUM(CAST(size_in_bytes AS bigint))/1024.0/1024.0 AS size_mb
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY size_mb DESC;
شاخصنمونهتفسیر
captured_at2026-07-21 12:00:00زمان Snapshot
resultنمونه متغیربرای تحلیل روند باید با Baseline مقایسه شود.

در محیط واقعی، Query را محدود نگه دارید و فقط برای ردیف‌های مشکوک وارد مرحله Drill-down شوید.

مثال شماره 5: مشاهده اتصال، Session و درخواست فعال

این مثال چند منبع Execution را در یک سناریوی قابل استفاده کنار هم قرار می‌دهد. خروجی نمونه صرفاً نمایشی است و مقادیر واقعی به بار کاری سرور وابسته‌اند.

SELECT c.session_id, c.client_net_address, c.auth_scheme,
       s.login_name, s.program_name, s.status AS session_status,
       r.status AS request_status, r.command, r.wait_type
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s ON s.session_id=c.session_id
LEFT JOIN sys.dm_exec_requests AS r ON r.session_id=c.session_id
WHERE s.is_user_process=1;
شاخصنمونهتفسیر
captured_at2026-07-21 12:00:00زمان Snapshot
resultنمونه متغیربرای تحلیل روند باید با Baseline مقایسه شود.

در محیط واقعی، Query را محدود نگه دارید و فقط برای ردیف‌های مشکوک وارد مرحله Drill-down شوید.

مثال شماره 6: ساخت Snapshot سبک از وضعیت اجرا

این مثال چند منبع Execution را در یک سناریوی قابل استفاده کنار هم قرار می‌دهد. خروجی نمونه صرفاً نمایشی است و مقادیر واقعی به بار کاری سرور وابسته‌اند.

SELECT SYSDATETIME() AS captured_at,
       (SELECT COUNT_BIG(*) FROM sys.dm_exec_sessions WHERE is_user_process=1) AS user_sessions,
       (SELECT COUNT_BIG(*) FROM sys.dm_exec_requests WHERE session_id<>@@SPID) AS active_requests,
       (SELECT COUNT_BIG(*) FROM sys.dm_exec_connections) AS connections,
       (SELECT COUNT_BIG(*) FROM sys.dm_exec_cached_plans) AS cached_plans;
شاخصنمونهتفسیر
captured_at2026-07-21 12:00:00زمان Snapshot
resultنمونه متغیربرای تحلیل روند باید با Baseline مقایسه شود.

در محیط واقعی، Query را محدود نگه دارید و فقط برای ردیف‌های مشکوک وارد مرحله Drill-down شوید.

روش پیشنهادی برای Troubleshooting

  1. زمان دقیق رخداد و دامنه مشکل را مشخص کنید: کل سرور، یک Database، یک API یا یک Job.
  2. از requests، sessions و connections Snapshot فعالیت زنده بگیرید.
  3. برای Queryهای مشکوک، متن SQL و Execution Plan را جمع‌آوری کنید.
  4. با query_stats و آمار Module بررسی کنید مشکل لحظه‌ای است یا الگوی تجمعی دارد.
  5. Plan Cache، Waitها، Memory، I/O و Query Store را برای تأیید علت کنار هم قرار دهید.
  6. پس از اصلاح، همان شاخص‌ها را دوباره اندازه‌گیری و Before/After را مستند کنید.

خطاهای رایج در استفاده از Execution DMVها

  • اشتباه‌گرفتن Correlation با Causation و انجام تغییر فوری بر اساس یک Snapshot.
  • نادیده‌گرفتن Lifetime داده‌های وابسته به Plan Cache.
  • جمع‌آوری تمام ستون‌ها در فاصله‌های بسیار کوتاه.
  • عدم ثبت Timestamp و Context سرور/دیتابیس.
  • فرض یکسان‌بودن DMVهای تخصصی در SQL Server، Azure SQL، Synapse و Fabric.

Performance و طراحی سامانه مانیتورینگ

یک سامانه مانیتورینگ خوب باید Observability ایجاد کند بدون اینکه خود به منبع مشکل تبدیل شود. Queryهای Capture را کوتاه، فیلترشده و قابل پیش‌بینی نگه دارید. برای Planهای XML یا متن‌های بزرگ، ابتدا Top Offenderها را انتخاب کنید و سپس جزئیات را فقط برای همان ردیف‌ها بخوانید.

برای آمار تجمعی، ذخیره Snapshot خام کافی نیست؛ Delta و Rate معمولاً معنا‌دارتر هستند. برای مثال افزایش total_worker_time بین دو Snapshot در بازه یک دقیقه، اطلاعات عملی‌تری از مقدار کل از زمان ورود Plan به Cache می‌دهد. Restart و Cache Eviction را نیز به‌عنوان مرز Baseline ثبت کنید.

Best Practices

  • Runbook مشخص برای کندی، Blocking، CPU بالا و Connection Storm داشته باشید.
  • Queryهای DMV را نسخه‌بندی و در محیط مشابه Production آزمایش کنید.
  • Permission حداقلی و Account مانیتورینگ جداگانه تعریف کنید.
  • Snapshotها را Retentionدار ذخیره و داده حساس Query Text را محافظت کنید.
  • هر تغییر Performance را با Before/After و معیار قابل اندازه‌گیری ارزیابی کنید.

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

پرسش ۱: DMV چیست؟

DMV یا Dynamic Management View نمایی از وضعیت داخلی و اطلاعات مدیریتی SQL Server است. برخی اشیای این خانواده Function هستند. داده آن‌ها می‌تواند لحظه‌ای یا وابسته به Cache باشد.

پرسش ۲: از کدام DMV برای شروع کندی استفاده کنیم؟

برای فعالیت زنده معمولاً requests و sessions نقطه شروع مناسبی هستند؛ سپس بر اساس نشانه‌ها به Query Text، Plan، Waitها و آمار تجمعی می‌رویم.

پرسش ۳: آیا DMV جای ابزار Monitoring را می‌گیرد؟

خیر؛ DMV منبع داده بسیار ارزشمند است، اما ابزار Monitoring تاریخچه، هشدار، Visualization و Correlation خودکار فراهم می‌کند.

پرسش ۴: آیا داده DMV دائمی است؟

اغلب خیر. بسیاری از داده‌ها با Restart یا تغییر Cache از بین می‌روند. برای Trend باید Snapshotها را ذخیره کنید.

پرسش ۵: Query Store چه تفاوتی با query_stats دارد؟

Query Store تاریخچه پایدارتر و ساختاریافته Query/Plan را در Database ذخیره می‌کند، در حالی که query_stats به Plan Cache وابسته است.

پرسش ۶: آیا اجرای DMV در Production امن است؟

در اصل برای مشاهده طراحی شده‌اند، اما Query سنگین، Polling سریع یا استخراج انبوه Plan می‌تواند سربار ایجاد کند. Capture را محدود و هدفمند طراحی کنید.

پرسش ۷: خطای رایج DBAها چیست؟

نتیجه‌گیری از یک Snapshot و تغییر فوری Index یا Configuration بدون تأیید علت، یکی از خطاهای پرهزینه است.

پرسش ۸: برای Performance چه چیزی مهم‌تر است؟

تعریف سؤال، Baseline، Sampling مناسب، Correlation چند منبع و سنجش Before/After از خود Query DMV مهم‌ترند.

پرسش ۹: Best Practice برای ذخیره Snapshot چیست؟

ستون‌های ضروری، Timestamp، Context محیط، Retention و شاخص‌های قابل مقایسه را ذخیره کنید و از انبارکردن بی‌هدف همه ستون‌ها پرهیز کنید.

پرسش ۱۰: آیا همه DMVها در همه محصولات Microsoft SQL یکسان‌اند؟

خیر. Scope، Permission، ستون‌ها و حتی وجود بعضی DMVها با نسخه و پلتفرم فرق دارد. مستندات نسخه مقصد مرجع نهایی است.

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

  1. تفاوت Connection، Session و Request را توضیح دهید.
  2. چرا sys.dm_exec_query_stats تاریخچه دائمی Queryها نیست؟
  3. چگونه Top CPU Query را پیدا و سپس Plan آن را تحلیل می‌کنید؟
  4. Plan Cache Bloat چه نشانه‌هایی دارد و کدام DMV کمک می‌کند؟
  5. برای Correlation یک Blocking Incident چه داده‌هایی را هم‌زمان Capture می‌کنید؟

جمع‌بندی و مسیر مطالعه

Execution DMVها یک جعبه‌ابزار منسجم برای دیدن رفتار داخلی SQL Server هستند. بهترین مسیر یادگیری از سه‌گانه requests/sessions/connections شروع می‌شود، سپس query_stats و آمار Module را اضافه می‌کند و در نهایت Plan Cache و DMVهای تخصصی را بر اساس معماری سیستم به کار می‌گیرد.

 

0 نظر

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

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

حرف 500 حداکثر

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620