SQL-빠른 팁 #11 - 가장 집약적인 쿼리
SQL Server 팁과 요령
이것은 제가 1년 동안 축적한 일련의 빠른 팁과 요령 중 일부이며 다른 사람들에게 유용할 수 있다고 생각합니다.
비슷한 짧은 팁과 요령이 있으면 의견을 남겨주세요.
가장 집약적인 쿼리
데이터베이스로 작업하는 우리 대부분은 어느 시점에서 데이터베이스가 예상대로 수행되지 않는 이유를 찾아야 하는 작업을 받게 되며 데이터베이스 사용량이 많은 대규모 시스템을 실행할 때 원인이 무엇인지 알아내는 것은 매우 까다로울 수 있습니다. .
아래 쿼리는 System dynamic Management View dm_exec_query_stats를 사용하여 SQL Server의 캐시된 쿼리 계획에 대한 성능 통계를 나열합니다.
스크립트는 쿼리가 CPU를 가장 많이 사용하는 몇 가지 힌트를 제공합니다.
SELECT SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END
- qs.statement_start_offset)/2)+1)
as [Text],
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
-- converting microseconds to seconds
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
-- Retrieve the query text
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
-- Retrieve the query plan
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC -- CPU time
SELECT TOP 50
[Avg. MultiCore/CPU time(sec)] = qs.total_worker_time / 1000000 / qs.execution_count,
[Total MultiCore/CPU time(sec)] = qs.total_worker_time / 1000000,
[Avg. Elapsed Time(sec)] = qs.total_elapsed_time / 1000000 / qs.execution_count,
[Total Elapsed Time(sec)] = qs.total_elapsed_time / 1000000,
qs.execution_count,
[Avg. I/O] = (total_logical_reads + total_logical_writes) / qs.execution_count,
[Total I/O] = total_logical_reads + total_logical_writes,
Query = SUBSTRING(qt.[text], (qs.statement_start_offset / 2) + 1,
(
(
CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.[text])
ELSE qs.statement_end_offset
END - qs.statement_start_offset
) / 2
) + 1
),
Batch = qt.[text],
[DB] = DB_NAME(qt.[dbid]),
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
WHERE qs.execution_count > 5 --more than 5 occurences
ORDER BY [Total MultiCore/CPU time(sec)] DESC
Reference
이 문제에 관하여(SQL-빠른 팁 #11 - 가장 집약적인 쿼리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/coderallan/sql-quick-tip-11-most-intensive-queries-201l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)