آموزش جامع sys.dm_os_tasks در SQL Server | آموزش و مثال‌های عملی

آموزش جامع sys.dm_os_tasks در SQL Server

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

نظرات 0

آموزش جامع sys.dm_os_tasks در SQL Server

مقدمه و جایگاه این DMV

sys.dm_os_tasks یکی از DMVهای لایه SQL Server Operating System یا SQLOS است. برای هر Task فعال یا داخلی یک ردیف فراهم می‌کند و State، Scheduler، Session، Request، Execution Context و I/O منتظر را نشان می‌دهد. این نما برای تشخیص مبتنی بر شواهد طراحی شده و خروجی آن نباید به‌صورت جدا از بار کاری، زمان نمونه‌برداری و وضعیت سیستم‌عامل تفسیر شود.

در معماری اجرا، Request می‌تواند یک یا چند Task بسازد، Task به Worker متصل شود و Worker روی Scheduler و Thread اجرا گردد. جایگاه دقیق sys.dm_os_tasks در این زنجیره تعیین می‌کند هر ستون چه چیزی را اندازه می‌گیرد و کدام نتیجه‌گیری از آن معتبر است.

DMVها معمولاً Snapshot جاری یا شمارنده تجمعی از زمان شروع سرویس هستند. بنابراین بهترین روش این است که زمان UTC، زمان شروع SQL Server و چند نمونه با فاصله ثابت جمع‌آوری شود. مقایسه Delta و هم‌بستگی با Waitها و Queryهای فعال از آستانه‌گذاری کورکورانه قابل‌اعتمادتر است.

بازگشت به راهنمای جامع DMVهای CPU و Scheduler در SQL Server

تعریف، Syntax و نوع خروجی

برای هر Task فعال یا داخلی یک ردیف فراهم می‌کند و State، Scheduler، Session، Request، Execution Context و I/O منتظر را نشان می‌دهد.

Task واحد زمان‌بندی‌شونده کار است؛ یک Request موازی می‌تواند چند Task و Execution Context داشته باشد.

Syntax پایه

SELECT *
FROM sys.dm_os_tasks;

پارامترها

sys.dm_os_tasks تابع پارامتردار نیست و بدون آرگومان در بخش FROM استفاده می‌شود. محدودسازی باید با انتخاب ستون‌ها، WHERE، TOP و در صورت نیاز پیوند به DMVهای دیگر انجام شود.

نوع خروجی

خروجی یک مجموعه ردیف Read-only است. تعداد ردیف‌ها و مقادیر با وضعیت لحظه‌ای Instance تغییر می‌کند؛ آدرس‌های حافظه و Tickها فقط در عمر جاری سرویس معنا دارند و شناسه کسب‌وکاری دائمی نیستند.

ستون‌های کلیدی

ستونمعنی و کاربرد
task_addressآدرس Task در حافظه و کلید اتصال به Worker.
task_stateوضعیت PENDING، RUNNABLE، RUNNING، SUSPENDED یا DONE.
session_idشناسه Session مرتبط؛ ممکن است برای کار سیستمی NULL باشد.
request_idشناسه Request داخل Session.
exec_context_idشناسه Execution Context؛ در اجرای موازی چند مقدار دیده می‌شود.
scheduler_idScheduler تخصیص‌یافته به Task.
pending_io_countشمار I/O فیزیکی تکمیل‌نشده Task.

روش تفسیر حرفه‌ای خروجی

ابتدا سؤال عملیاتی را دقیق تعریف کنید: آیا هدف تشخیص فشار CPU، کمبود Worker، انتظار I/O، توپولوژی NUMA، حافظه یا Inventory است؟ سپس فقط ستون‌هایی را انتخاب کنید که همان فرضیه را می‌سنجند. جمع‌آوری داده بدون سؤال مشخص، حجم زیاد و نتیجه مبهم تولید می‌کند.

در تحلیل sys.dm_os_tasks باید مقدارهای حالت، شمارنده تجمعی و شناسه‌های پیوند از هم جدا شوند. State وضعیت همان لحظه است؛ Counter معمولاً برای Delta مناسب است؛ Address و ID مسیر اتصال به لایه مکمل را فراهم می‌کنند. ترکیب این سه نوع داده تصویر قابل دفاع‌تری می‌سازد.

Baseline باید ساعت اوج، ساعت عادی و دوره نگهداری را پوشش دهد. آستانه‌ای که در یک سرور هشت‌هسته‌ای هشدار است ممکن است در سرور دیگر طبیعی باشد. روند چند Snapshot و اثر روی SLA مهم‌تر از یک عدد عمومی در اینترنت است.

اصل تشخیصی: DMV علت قطعی را اعلام نمی‌کند؛ DMV شواهدی تولید می‌کند که باید با زمان، بار کاری و منابع مکمل هم‌بسته شود.

مثال‌های عملی و قابل اجرا

مثال 1: توزیع Taskها بر اساس State

Task واحد کاری SQLOS است و می‌تواند PENDING، RUNNABLE، RUNNING، SUSPENDED یا DONE باشد. شمارش وضعیت‌ها یک نمای سریع از ترکیب بار جاری فراهم می‌کند، ولی باید Taskهای سیستمی و کاربری از هم تفکیک شوند.

SELECT task_state, COUNT_BIG(*) AS task_count
FROM sys.dm_os_tasks
GROUP BY task_state
ORDER BY task_count DESC;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 1SUSPENDED=96، RUNNABLE=3، RUNNING=8SUSPENDED معمولاً به معنی انتظار برای یک منبع یا رخداد است. برای یافتن علت، Task را با Worker، Request و اطلاعات Wait پیوند دهید.

SUSPENDED معمولاً به معنی انتظار برای یک منبع یا رخداد است. برای یافتن علت، Task را با Worker، Request و اطلاعات Wait پیوند دهید.

مثال 2: نمایش Taskهای Sessionهای کاربری

فیلتر session_id بزرگ‌تر از ۵۰ یک تقریب رایج برای تمرکز روی Sessionهای کاربر در SQL Server است. این کوئری Task، Request، Execution Context و Scheduler را کنار هم می‌آورد.

SELECT session_id, request_id, exec_context_id,
       task_state, scheduler_id, worker_address
FROM sys.dm_os_tasks
WHERE session_id > 50
ORDER BY session_id, request_id, exec_context_id;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 2Session 68؛ Request 0؛ Context 2؛ RUNNABLEدر Query موازی ممکن است برای یک Request چند Execution Context و چند Task دیده شود. بنابراین شمار ردیف‌ها را معادل شمار Sessionها نگیرید.

در Query موازی ممکن است برای یک Request چند Execution Context و چند Task دیده شود. بنابراین شمار ردیف‌ها را معادل شمار Sessionها نگیرید.

مثال 3: پیوند Task با Request فعال

ترکیب session_id و request_id اجازه می‌دهد وضعیت Taskهای یک Request با Command، Status و Wait درخواست مقایسه شود. این پیوند برای رسیدن از لایه SQLOS به لایه اجرای کوئری کاربردی است.

SELECT t.session_id, t.request_id, t.exec_context_id,
       t.task_state, r.command, r.status,
       r.wait_type, r.cpu_time
FROM sys.dm_os_tasks AS t
JOIN sys.dm_exec_requests AS r
  ON r.session_id = t.session_id
 AND r.request_id = t.request_id
WHERE t.session_id > 50
ORDER BY r.cpu_time DESC, t.exec_context_id;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 3Session 73؛ SELECT؛ Task RUNNING؛ CPU=1210msیک Request موازی چند ردیف ایجاد می‌کند و cpu_time درخواست در هر ردیف تکرار می‌شود. برای جمع‌زدن CPU ابتدا Requestها را یکتا کنید تا Double Count رخ ندهد.

یک Request موازی چند ردیف ایجاد می‌کند و cpu_time درخواست در هر ردیف تکرار می‌شود. برای جمع‌زدن CPU ابتدا Requestها را یکتا کنید تا Double Count رخ ندهد.

مثال 4: یافتن Taskهای Runnable

Taskهای RUNNABLE کار لازم برای اجرا دارند اما در صف Scheduler منتظر CPU هستند. کوئری زیر آن‌ها را با Scheduler و شناسه Session مرتب می‌کند تا فشار پردازنده به بار مشخص نسبت داده شود.

SELECT scheduler_id, session_id, request_id,
       exec_context_id, context_switches_count
FROM sys.dm_os_tasks
WHERE task_state = N'RUNNABLE'
ORDER BY scheduler_id, context_switches_count DESC;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 4Scheduler 4؛ Session 91؛ Context 1یک نتیجه منفرد طبیعی است. تداوم ردیف‌ها، runnable_tasks_count Scheduler و مصرف CPU باید هم‌زمان بررسی شود.

یک نتیجه منفرد طبیعی است. تداوم ردیف‌ها، runnable_tasks_count Scheduler و مصرف CPU باید هم‌زمان بررسی شود.

مثال 5: مرور I/O معلق Taskها

pending_io_count و pending_io_byte_count میزان I/O فیزیکی منتظر در سطح Task را نمایش می‌دهند. فیلتر مقدار مثبت، Taskهایی را جدا می‌کند که در لحظه Snapshot کار I/O تکمیل‌نشده دارند.

SELECT TOP (20) session_id, request_id, task_state,
       pending_io_count, pending_io_byte_count,
       pending_io_byte_average
FROM sys.dm_os_tasks
WHERE pending_io_count > 0
ORDER BY pending_io_byte_count DESC;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 5Session 62؛ pending I/O=2؛ bytes=131072برای یافتن فایل و نوع عملیات، این خروجی باید با Request و DMVهای I/O تکمیل شود. مقدار صفر نیز نبودن مشکل ذخیره‌ساز را در کل بازه ثابت نمی‌کند.

برای یافتن فایل و نوع عملیات، این خروجی باید با Request و DMVهای I/O تکمیل شود. مقدار صفر نیز نبودن مشکل ذخیره‌ساز را در کل بازه ثابت نمی‌کند.

مثال 6: تشخیص Parallelism در سطح Request

وجود چند exec_context_id برای یک session_id و request_id معمولاً به اجرای موازی مربوط است. این گزارش Requestهایی را نشان می‌دهد که بیش از یک Task فعال دارند و تعداد Contextها را ثبت می‌کند.

SELECT session_id, request_id,
       COUNT_BIG(*) AS task_count,
       COUNT(DISTINCT exec_context_id) AS execution_contexts
FROM sys.dm_os_tasks
WHERE session_id > 50
  AND task_state <> N'DONE'
GROUP BY session_id, request_id
HAVING COUNT_BIG(*) > 1
ORDER BY task_count DESC;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 6Session 88؛ Request 0؛ 8 Contextهشت Context الزاماً مشکل نیست و می‌تواند با DOP مجاز سازگار باشد. Waitهای CXPACKET یا CXCONSUMER، مدت اجرا و پلن واقعی تعیین می‌کنند Parallelism مفید است یا پرهزینه.

هشت Context الزاماً مشکل نیست و می‌تواند با DOP مجاز سازگار باشد. Waitهای CXPACKET یا CXCONSUMER، مدت اجرا و پلن واقعی تعیین می‌کنند Parallelism مفید است یا پرهزینه.

مثال 7: توزیع Taskها روی Schedulerها

این تجمیع تعداد Taskهای فعال، Runnable و Suspended را برای هر scheduler_id محاسبه می‌کند. هدف، یافتن تمرکز نامتعارف بار و مقایسه آن با NUMA و Affinity است.

SELECT scheduler_id,
       COUNT_BIG(*) AS active_tasks,
       SUM(CASE WHEN task_state = N'RUNNABLE' THEN 1 ELSE 0 END) AS runnable,
       SUM(CASE WHEN task_state = N'SUSPENDED' THEN 1 ELSE 0 END) AS suspended
FROM sys.dm_os_tasks
WHERE task_state <> N'DONE'
GROUP BY scheduler_id
ORDER BY runnable DESC, active_tasks DESC;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 7Scheduler 3؛ active=22؛ runnable=6اگر تمرکز در چند Snapshot تکرار شود، Scheduler و Node مربوط را بررسی کنید. Snapshot واحد ممکن است صرفاً هم‌زمانی کوتاه چند Query باشد.

اگر تمرکز در چند Snapshot تکرار شود، Scheduler و Node مربوط را بررسی کنید. Snapshot واحد ممکن است صرفاً هم‌زمانی کوتاه چند Query باشد.

مثال 8: Taskهای دارای Context Switch زیاد

context_switches_count در سطح Task نشان می‌دهد چند بار Context عوض شده است. فهرست بالاترین مقادیر برای یافتن Taskهای طولانی یا پررفت‌وآمد مفید است، ولی مقدار تجمعی با سن Task ارتباط دارد.

SELECT TOP (20) session_id, request_id,
       exec_context_id, task_state,
       context_switches_count, scheduler_id
FROM sys.dm_os_tasks
WHERE session_id > 50
ORDER BY context_switches_count DESC;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 8Session 77؛ Context switches=4320برای تصمیم Performance، زمان اجرا، Wait و مقدار کار انجام‌شده را نیز بسنجید. Context Switch زیاد بدون Baseline به‌تنهایی نشانه خرابی نیست.

برای تصمیم Performance، زمان اجرا، Wait و مقدار کار انجام‌شده را نیز بسنجید. Context Switch زیاد بدون Baseline به‌تنهایی نشانه خرابی نیست.

مثال 9: جدا کردن Taskهای پس‌زمینه

Taskهای دارای session_id تهی یا Sessionهای سیستمی برای فعالیت‌های داخلی موتور استفاده می‌شوند. این گزارش آن‌ها را بر اساس State و Scheduler خلاصه می‌کند تا با بار کاربر اشتباه نشوند.

SELECT scheduler_id, task_state,
       COUNT_BIG(*) AS background_tasks
FROM sys.dm_os_tasks
WHERE session_id IS NULL OR session_id <= 50
GROUP BY scheduler_id, task_state
ORDER BY scheduler_id, task_state;
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 9Scheduler 0؛ SUSPENDED=7 Task سیستمیTaskهای پس‌زمینه مانند مانیتورها و Writerها طبیعی‌اند. حذف کورکورانه Sessionهای سیستمی یا تفسیر آن‌ها به‌عنوان Query کاربر خطای تشخیصی مهمی است.

Taskهای پس‌زمینه مانند مانیتورها و Writerها طبیعی‌اند. حذف کورکورانه Sessionهای سیستمی یا تفسیر آن‌ها به‌عنوان Query کاربر خطای تشخیصی مهمی است.

مثال 10: Snapshot کم‌حجم برای Collector

ذخیره SELECT ستاره برای هر Task در هر ثانیه سریعاً داده زیادی تولید می‌کند. این نمونه فقط کلیدهای ارتباطی و State را برای Sessionهای کاربری انتخاب می‌کند و Timestamp UTC را نیز کنار Snapshot می‌گذارد.

SELECT SYSUTCDATETIME() AS captured_at_utc,
       session_id, request_id, exec_context_id,
       scheduler_id, task_state,
       context_switches_count
FROM sys.dm_os_tasks
WHERE session_id > 50
  AND task_state <> N'DONE';
خروجی نمونهمقدار نمایشیبرداشت سریع
مثال 10Capture UTC؛ Session 64؛ Task SUSPENDEDبرای تاریخچه واقعی یک جدول مقصد با سیاست نگهداری تعریف کنید. UTC مقایسه میان سرورها و تغییرات ساعت محلی را ساده‌تر می‌کند و ستون‌های محدود هزینه Collector را پایین می‌آورند.

برای تاریخچه واقعی یک جدول مقصد با سیاست نگهداری تعریف کنید. UTC مقایسه میان سرورها و تغییرات ساعت محلی را ساده‌تر می‌کند و ستون‌های محدود هزینه Collector را پایین می‌آورند.

خطاهای رایج و راه اصلاح

نخستین خطا اجرای SELECT ستاره در Job پرتکرار است. این روش ستون‌های غیرضروری، داده داخلی و وابستگی نسخه‌ای را وارد تاریخچه می‌کند. Query هدفمند با ستون‌های محدود هم سبک‌تر است و هم گزارش بعدی را قابل نگهداری می‌کند.

خطای دوم تبدیل یک Snapshot به حکم قطعی است. صف Runnable یا پرچم فشار ممکن است گذرا باشد؛ از طرف دیگر مقدار صفر لحظه‌ای مشکل گذشته را رد نمی‌کند. نمونه‌برداری زمان‌دار و Alert رخدادمحور این شکاف را جبران می‌کند.

خطای سوم جمع‌زدن داده پس از Join یک‌به‌چند بدون توجه به تکرار است. Request موازی، چند Task یا چند Worker می‌تواند عدد CPU و Duration را چندبار تکرار کند. سطح Grain هر DMV و کلیدهای Join باید پیش از Aggregate نوشته شود.

خطای چهارم اجرای اسکریپت نسخه جدید روی نسخه قدیمی بدون کنترل ستون است. مجوزها، Platform و ستون‌های اطلاعاتی تغییر می‌کنند. اسکریپت سازمانی باید نسخه، EngineEdition و دسترسی لازم را ثبت و خطای واضح تولید کند.

ملاحظات Performance و امنیت

خواندن موردی sys.dm_os_tasks با ستون‌های محدود معمولاً سبک است، اما هزینه به نرخ اجرا، تعداد ردیف، Joinها، مرتب‌سازی و تبدیل XML بستگی دارد. Collector ثانیه‌ای تنها وقتی توجیه دارد که داده همان تفکیک زمانی واقعاً برای تشخیص استفاده شود.

برای SQL Server و SQL Managed Instance معمولاً مجوزهای مشاهده وضعیت سرور مطرح هستند. در SQL Server 2022 و نسخه‌های جدیدتر، بسیاری از این نماها VIEW SERVER PERFORMANCE STATE می‌خواهند. اصل حداقل دسترسی و حفاظت از متن Query یا نام سرور باید رعایت شود.

تاریخچه را در پایگاه مانیتورینگ جداگانه، با Timestamp UTC، شناسه Instance و Retention مشخص نگه دارید. Index تاریخچه باید براساس Query گزارش ساخته شود؛ افزودن Index به خود DMV ممکن نیست و تلاش برای Hint یا تغییر داخلی روش درستی نیست.

  • ستون‌های لازم را صریح نام ببرید.
  • فیلتر را تا حد ممکن زود اعمال کنید.
  • برای شمارنده تجمعی Delta بسازید.
  • Uptime و Restart را ثبت کنید.
  • در Incident شواهد مکمل را هم‌زمان بگیرید.
  • روی Production از Query آزمایش‌نشده و XML سنگین دوری کنید.

بهترین روش‌ها و کاربرد سازمانی

sys.dm_os_tasks زمانی بیشترین ارزش را دارد که در Runbook مشخص جای بگیرد: Trigger چه چیزی است، Query چه زمانی اجرا می‌شود، چه ستون‌هایی ثبت می‌شوند و مسئول تفسیر کیست. این نظم داده خام را به تصمیم عملیاتی تبدیل می‌کند.

برای آموزش تیم، نتیجه نمونه را کنار Query نگه دارید تا کارشناسان بدون اجرای Production معنای ستون‌ها را بفهمند. سپس در محیط آزمایش بار مصنوعی ایجاد و انتظار می‌رود کدام شاخص تغییر کند. این تمرین رابطه علت و علامت را روشن می‌کند.

در پروژه مشاوره یا بهینه‌سازی، Snapshot باید با Query Store، Wait Statistics، Extended Events، Performance Counter و شاخص‌های سیستم‌عامل هم‌بسته شود. هیچ ابزار واحدی همه لایه‌ها را پوشش نمی‌دهد.

  1. فرضیه و بازه زمانی را مشخص کنید.
  2. نسخه و مجوز را کنترل کنید.
  3. Query کم‌حجم را در آزمایش اجرا کنید.
  4. Timestamp و Uptime را ذخیره کنید.
  5. حداقل دو Snapshot قابل مقایسه بگیرید.
  6. داده را با DMV مکمل Join کنید.
  7. تکرار یک‌به‌چند را کنترل کنید.
  8. نتیجه را با SLA و تجربه کاربر مرتبط کنید.

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

sys.dm_os_tasks دقیقاً چه چیزی را نشان می‌دهد؟

sys.dm_os_tasks برای هر Task فعال یا داخلی یک ردیف فراهم می‌کند و State، Scheduler، Session، Request، Execution Context و I/O منتظر را نشان می‌دهد. خروجی یک Snapshot زنده است و برای نتیجه‌گیری باید با زمان Capture، Uptime و DMVهای مکمل تفسیر شود.

چطور نخستین گزارش آموزشی از sys.dm_os_tasks بسازیم؟

از انتخاب ستون‌های کلیدی، فیلتر Session یا وضعیت مرتبط و ثبت Timestamp UTC شروع کنید. سپس نتیجه نمونه را با Baseline محیط سالم مقایسه کنید و معنی هر ستون را پیش از تعریف Alert مستند سازید.

آیا داده sys.dm_os_tasks برای تصمیم خرید CPU یا حافظه کافی است؟

خیر. تصمیم تجاری خرید سخت‌افزار به روند بلندمدت، SLA، رشد بار، Waitها و داده سیستم‌عامل نیاز دارد. این DMV یکی از شواهد است و مشاوره ظرفیت‌سنجی می‌تواند از هزینه خرید اشتباه جلوگیری کند.

چگونه پایش sys.dm_os_tasks هزینه عملیاتی را کاهش می‌دهد؟

Collector کم‌حجم می‌تواند نشانه‌های فشار را پیش از Incident ثبت کند و زمان عیب‌یابی را کاهش دهد. ارزش اقتصادی زمانی ایجاد می‌شود که داده با Runbook، Alert قابل اقدام و مسئول مشخص همراه باشد.

تفاوت sys.dm_os_tasks با DMV مکمل آن چیست؟

Task واحد زمان‌بندی‌شونده کار است؛ یک Request موازی می‌تواند چند Task و Execution Context داشته باشد. ترکیب لایه‌ها مانع می‌شود یک شمارنده منفرد به علت قطعی تبدیل شود.

چه زمانی برای تحلیل sys.dm_os_tasks از خدمات تخصصی استفاده کنیم؟

وقتی مشکل گذرا، چندلایه یا Production است و تیم نمی‌تواند Snapshot را دوباره تولید کند، طراحی Session جمع‌آوری شواهد و تحلیل حرفه‌ای مفید است. آموزش هدفمند نیز به تیم کمک می‌کند Queryها را ایمن و تکرارپذیر اجرا کند.

رایج‌ترین خطا هنگام خواندن sys.dm_os_tasks چیست؟

رایج‌ترین خطا تفسیر مقدار لحظه‌ای یا تجمعی بدون Baseline و بدون توجه به Restart است. خطای دیگر استفاده از SELECT ستاره در Collector پرتکرار و فرض ثبات همه ستون‌های داخلی در نسخه‌های مختلف است.

اجرای sys.dm_os_tasks چه اثر Performance دارد؟

یک SELECT محدود و موردی معمولاً سبک است، اما Polling بسیار پرتکرار، پردازش XML یا ذخیره همه ستون‌ها هزینه ایجاد می‌کند. ستون‌های لازم، TOP، فیلتر زودهنگام و تناوب متناسب با هدف را انتخاب کنید.

Best Practice ذخیره تاریخچه sys.dm_os_tasks چیست؟

Timestamp UTC، sqlserver_start_time، شناسه Instance و فقط شاخص‌های لازم را ذخیره کنید. جدول تاریخچه باید Retention، Index متناسب با Query گزارش و جداسازی دسترسی امنیتی داشته باشد.

sys.dm_os_tasks در کدام نسخه‌های SQL Server قابل استفاده است؟

این DMV در نسخه‌های پشتیبان SQL Server ارائه می‌شود، اما ستون‌ها و مجوزها می‌توانند با نسخه و Platform فرق کنند. در SQL Server 2022 و جدیدتر برای بسیاری از DMVهای Performance مجوز VIEW SERVER PERFORMANCE STATE لازم است؛ اسکریپت چندنسخه‌ای باید این تفاوت را کنترل کند.

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

چرا یک Snapshot از sys.dm_os_tasks برای تشخیص قطعی کافی نیست؟

زیرا State می‌تواند گذرا و Counter تجمعی باشد. پاسخ حرفه‌ای باید به Baseline، Delta، Uptime و هم‌بستگی با شواهد مکمل اشاره کند.

تفاوت Task، Worker، Scheduler و Thread چیست؟

Task واحد کار، Worker مجری SQLOS، Scheduler هماهنگ‌کننده اجرای Cooperative و Thread موجودی سیستم‌عامل است. یک Request موازی می‌تواند چند Task و Worker داشته باشد.

چرا Timestamp UTC و زمان شروع سرویس ثبت می‌شوند؟

UTC مقایسه بین سرورها را پایدار می‌کند و زمان شروع سرویس Reset شمارنده‌های تجمعی را آشکار می‌سازد.

چگونه هزینه Collector را کاهش می‌دهید؟

ستون‌های محدود، Filter زودهنگام، Interval متناسب، حذف Sort غیرضروری و Retention روشن انتخاب می‌شوند. Query در بار مشابه Production آزمایش می‌شود.

مجوز مناسب در SQL Server 2022 چیست؟

برای بسیاری از DMVهای Performance مجوز VIEW SERVER PERFORMANCE STATE لازم است. پاسخ دقیق باید نسخه، Platform و اصل حداقل دسترسی را نیز در نظر بگیرد.

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

  • هدف Query مربوط به sys.dm_os_tasks روشن است.
  • نسخه و وجود ستون‌های استفاده‌شده بررسی شده است.
  • مجوز با اصل حداقل دسترسی واگذار شده است.
  • SELECT ستاره در Collector استفاده نشده است.
  • Timestamp UTC و Uptime ثبت می‌شوند.
  • مقدار تجمعی با Delta تحلیل می‌شود.
  • Snapshot منفرد به علت قطعی تبدیل نمی‌شود.
  • Join یک‌به‌چند از نظر Double Count کنترل شده است.
  • Retention و امنیت جدول تاریخچه مشخص است.
  • نتیجه با DMVها و شواهد مکمل تطبیق داده می‌شود.

جمع‌بندی

sys.dm_os_tasks ابزار ارزشمندی برای تحلیل Taskهای SQLOS است، به شرط آنکه خروجی آن در Context معماری SQLOS، نسخه SQL Server و زمان نمونه‌برداری خوانده شود. مثال‌های این مقاله از Query پایه تا Snapshot و پیوند چند DMV را پوشش دادند تا مسیر تشخیص قابل تکرار باشد.

برای مشاهده ارتباط این DMV با هشت نمای دیگر، راهنمای جامع CPU، Scheduler، Worker، Task و منابع SQLOS را مطالعه کنید.

 

0 نظر

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

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

حرف 500 حداکثر