DMV ها (Dynamic Management Views) در SQL Server مجموعهای از ویوهای سیستمی هستند که اطلاعات لحظهای و دقیقی از وضعیت سرور، دیتابیس، Queryها و منابع سختافزاری ارائه میکنند. استفاده هوشمندانه از DMVها به شما کمک میکند تا:
- عملکرد Query را بهینه کنید.
- گلوگاههای سیستمی (CPU, IO, Memory) را شناسایی کنید.
- مشکلات لاک و تراکنش را عیبیابی کنید.
معرفی DMV ها و مزایای آنها
Dynamic Management Views، از نسخه SQL Server 2005 به بعد معرفی شدند و در هر نسخه، تعداد و قابلیتهای جدیدی به آنها اضافه شده است. ویژگیهای اصلی DMVها:
- نمایش آمار زنده از اجرای Queryها، منابع و وضعیت دیتابیس
- گزارشهای Read-Only، بدون تغییر در دادهها
- نیاز به مجوزهای
VIEW SERVER STATE
یاVIEW DATABASE STATE
دستهبندی اصلی DMVها
دستهبندی | کاربرد کلی | نمونه DMV |
---|---|---|
sys.dm_exec_* | آنالیز Queryها و Execution Plan | sys.dm_exec_query_stats |
sys.dm_exec_query_plan | ||
sys.dm_os_* | مانیتور منابع OS و سرور | sys.dm_os_wait_stats |
sys.dm_os_memory_clerks | ||
sys.dm_db_* | وضعیت دیتابیس، ایندکس و فایلها | sys.dm_db_index_usage_stats |
sys.dm_db_missing_index_details | ||
sys.dm_tran_* | اطلاعات تراکنش و لاکها | sys.dm_tran_locks |
sys.dm_tran_active_transactions | ||
sys.dm_io_* | آمار ورودی/خروجی دیسک | sys.dm_io_virtual_file_stats |
sys.dm_clr_* | گزارشهای CLR و اسمبلیهای بارگذاریشده | sys.dm_clr_appdomains |
sys.dm_clr_loaded_assemblies |
کاربرد DMV ها در عیبیابی مشکلات
- تشخیص Queryهای کند و سنگین
- با
sys.dm_exec_query_stats
وsys.dm_exec_requests
، Queryهایی با بالاترین زمان اجرا را بیابید. - Execution Plan را از
sys.dm_exec_query_plan
استخراج کنید تا Bottleneckها را تشخیص دهید.
- با
- بررسی لاکها و Deadlock
sys.dm_tran_locks
برای شناسایی Lockهای فعال- ترکیب با
sys.dm_exec_requests
برای نمایش Sessionهای بلاکشده
- تحلیل Wait Stats و گلوگاه منابع
sys.dm_os_wait_stats
نوع و مدت زمان انتظار (مثل PAGEIOLATCH, CXPACKET) را نشان میدهد.sys.dm_os_memory_clerks
مصرف حافظه توسط اجزای مختلف SQL را گزارش میکند.
- مانیتورینگ IO دیسک
sys.dm_io_virtual_file_stats
میزان خواندن/نوشتن و Latency فایلها را میدهد.sys.dm_io_pending_io_requests
تعداد درخواستهای معلق دیسک را نمایش میدهد.
- تحلیل استفاده از ایندکسها
sys.dm_db_index_usage_stats
میزان استفاده از هر ایندکس را نشان میدهد.sys.dm_db_missing_index_details
پیشنهاد ایندکسهای جدید را ارائه میکند.
DMV ها و بهینهسازی Query
– شناسایی Queryهای پر هزینه با این اسکریپت:
SELECT TOP 5
qs.total_elapsed_time/qs.execution_count AS avg_time_ms,
qs.execution_count,
st.text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY avg_time_ms DESC;
– بررسی Execution Plan برای هر Query:
SELECT
qp.query_plan,
st.text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE qs.execution_count > 10;
نکات مهم
- از SELECT* پرهیز کنید و فقط ستونهای ضروری را انتخاب کنید.
- Statistics را با دستور
UPDATE STATISTICS
دورهای بهروز نگه دارید. - در صورت Parameter Sniffing، از
OPTION (RECOMPILE)
یاOPTIMIZE FOR UNKNOWN
استفاده کنید.
DMV ها در نسخههای مختلف SQL Server
نسخه | DMVهای کلیدی جدید |
---|---|
۲۰۰۵ | معرفی پایهای sys.dm_exec_, sys.dm_os_, sys.dm_db_* |
۲۰۰۸ R2 SP1 | sys.dm_server_services, sys.dm_os_windows_info, … |
۲۰۱۲ | sys.dm_hadr_*, sys.dm_db_uncontained_entities, … |
۲۰۱۴ | sys.dm_db_xtp_table_memory_stats, sys.dm_db_column_store_* |
۲۰۱۶ | sys.dm_exec_query_store_, sys.dm_os_buffer_pool_extension_ |
۲۰۱۹/۲۰۲۲ | DMVهای Intelligent Query Processing، Big Data Clusters، Ledger Tables |
نکات کلیدی برای استفاده اثربخش از DMV ها
- مطمئن شوید مجوزهای لازم را دارید (
VIEW SERVER STATE
/VIEW DATABASE STATE
). - خروجی DMVها پس از ریاستارت یا پاک شدن Cache از بین میرود؛ در صورت لزوم گزارش دورهای بگیرید.
- دادهها را در جداول تاریخچه ذخیره کنید تا روند بلندمدت را تحلیل کنید.
- از ابزارهایی مانند Power BI ،Grafana یا SSRS برای داشبورد بلادرنگ بهره ببرید.
سوالات متداول (FAQ)
۱. DMV چیست و چرا اهمیت دارد؟
Dynamic Management Views، ویوهای سیستمی هستند که اطلاعات زندهای از اجرا، منابع و وضعیت SQL Server ارائه میدهند و پایهی هر کار مانیتورینگ و عیبیابی حرفهای هستند.
۲. چه مجوزهایی برای دسترسی به DMV نیاز است؟
برای DMVهای سروری به VIEW SERVER STATE
و برای DMVهای دیتابیس به VIEW DATABASE STATE
نیاز دارید.
۳. آیا خواندن DMVها روی Performance تأثیر دارد؟
Queryهای معمولی DMVها Read-Only بوده و تاثیر ناچیزی دارند، اما اسکریپتهای سنگین تحلیل میتوانند منابع قابل توجهی مصرف کنند.
۴. چطور میتوانم دادههای DMV را آرشیو کنم؟
با ایجاد Jobهای زمانبندیشده در SQL Server Agent و ذخیره خروجی DMVها در جداول گزارش، میتوانید تاریخچه عملکرد را نگهداری کنید.
۵. چگونه DMVها را با ابزارهای مانیتورینگ ترکیب کنم؟
از اتصال مستقیم SQL به Power BI یا Grafana و کشیدن Queryهای DMV به داشبورد، گزارشهای بلادرنگ بسازید.
تماس و مشاوره
میخواهید Performance دیتابیس خود را ۳ برابر بهبود دهید؟ برای مشاوره رایگان در زمینه DMV، مانیتورینگ و Performance Tuning کلیک کنید.
نظری داده نشده