اسکریپتی برای بدست اوردن کوئری‌های پرهزینه

اسکریپتی برای بدست اوردن کوئری‌های پرهزینه

امروز میخوام به جرات یکی از اسکریپت‌های پرکاربری که خودم موقعی که با یه مشکل در سرور مواجه میشم رو بگم. این اسکریپت لیستی از کوئری‌های پرهزینه از لحاظ Cpu, Io  و غیره رو در زمان سپری شده به همراه پلن اون بهتون میده که گاهی خروجی این کوئری سرور و دیتابیس شما رو از مشکل غیرمنتظره و حاد ایجاد شده نجات میده.

در این اسکریپت قسمت ORDER BY به صورت کامنت هستش که شما براساس مشکلی که با اون مواجه هستین اون قسمت مد نظر از کامنت درمیارین و اسکریپت اجرا میکنید.

 

SELECT TOP(50) qs.execution_count AS [Execution Count],
(qs.total_logical_reads)*8/1024.0 AS [Total Logical Reads (MB)],
(qs.total_logical_reads/qs.execution_count)*8/1024.0 AS [Avg Logical Reads (MB)],
(qs.total_worker_time)/1000.0 AS [Total Worker Time (ms)],
(qs.total_worker_time/qs.execution_count)/1000.0 AS [Avg Worker Time (ms)],
(qs.total_elapsed_time)/1000.0 AS [Total Elapsed Time (ms)],
(qs.total_elapsed_time/qs.execution_count)/1000.0 AS [Avg Elapsed Time (ms)],
qs.creation_time AS [Creation Time]
,t.text AS [Complete Query Text], qp.query_plan AS [Query Plan]
FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK)
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp
WHERE t.dbid = DB_ID()
ORDER BY qs.execution_count DESC OPTION (RECOMPILE);-- frequently ran query
-- ORDER BY [Total Logical Reads (MB)] DESC OPTION (RECOMPILE);-- High Disk Reading query
-- ORDER BY [Avg Worker Time (ms)] DESC OPTION (RECOMPILE);-- High CPU query
-- ORDER BY [Avg Elapsed Time (ms)] DESC OPTION (RECOMPILE);-- Long Running query

خیلی خوشحال میشم که نظرتون در مورد این کوئری و نتیجه‌ای که گرفتین با من به اشتراک بذارین.

اموزش SqlServer

Expensive Querysql serverاسکریپتاموزش SqlServer
Comments (0)
Add Comment