Bạn có thể xác định truy vấn tốn kém (và các cơ sở dữ liệu chúng có liên quan với) sử dụng DMVs , ví dụ from this TechNet article:
SELECT TOP 50
[Average CPU used] = total_worker_time/qs.execution_count,
[Total CPU used] = total_worker_time,
[Execution count] = qs.execution_count,
[Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END -
qs.statement_start_offset)/2)
,[Parent Query] = qt.text
,DatabaseName = DB_NAME(qt.dbid)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Average CPU used] DESC;
Những điều này sẽ cho bạn biết về các truy vấn hitter nặng, nhưng tiếc là nó sẽ không xác định một cơ sở dữ liệu có thể có khối lượng rất cao của các truy vấn nhỏ mà đang sử dụng bit nhỏ của CPU riêng nhưng bit lớn trong tổng hợp. Bạn có thể làm điều đó với truy vấn này from Glenn Allan Berry's DMV queries:
WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName],
SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid') AS F_DB
GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
DatabaseName, [CPU_Time_Ms],
CAST([CPU_Time_Ms] * 1.0/SUM([CPU_Time_Ms])
OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);
Cả các truy vấn này xác định các ứng dụng mà chạy chúng, và DMVs sử dụng không lưu trữ thông tin đó (bạn sẽ phải bắt các truy vấn trong hành động và lưu ý tên ứng dụng trong sys.dm_exec_sessions hoặc xem lại một dấu vết).
Tất nhiên bạn có thể tự động hóa công việc này với nhiều công cụ hiệu suất bên thứ ba trên thị trường (từ chối trách nhiệm: Tôi làm việc cho một trong số họ, SQL Sentry, người sản xuất Performance Advisor, thực hiện tất cả những điều trên, bao gồm theo dõi các truy vấn chi phí cao và duy trì thông tin về cơ sở dữ liệu nào họ chạy và ứng dụng nào được gọi là chúng).
Nguồn
2012-04-25 16:47:07