Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2008 sử dụng CPU cao

Bạn có thể xác định các truy vấn tốn kém (và cơ sở dữ liệu mà chúng được liên kết) bằng cách sử dụng DMV, ví dụ: từ bài viết TechNet này :

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 nặng nề, nhưng không may là nó sẽ không xác định được cơ sở dữ liệu có thể có khối lượng truy vấn nhỏ rất cao đang sử dụng các bit nhỏ của CPU riêng lẻ nhưng tổng hợp lại là các bit lớn. Bạn có thể làm điều đó với truy vấn này từ các truy vấn DMV của Glenn Allan Berry :

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ả hai truy vấn này đều không xác định được ứng dụng đã chạy chúng và các DMV được 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à ghi chú tên ứng dụng trong sys.dm_exec_sessions hoặc xem lại dấu vết).

Tất nhiên bạn có thể tự động hóa công việc này bằng nhiều công cụ hiệu suất của bên thứ 3 trên thị trường (tuyên bố 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 Cố vấn Hiệu suất , 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 mà chúng đã chạy và ứng dụng gọi chúng là gì).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bật tính năng ghi dữ liệu thay đổi (CDC) trên toàn bộ bảng HOẶC bật CDC trên bảng có danh sách cột trong SQL Server

  2. HOẶC không được hỗ trợ với Câu lệnh CASE trong SQL Server

  3. Điều chỉnh dịch vụ báo cáo máy chủ SQL

  4. Ràng buộc mặc định trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 90

  5. Cách thay đổi mô hình khôi phục của cơ sở dữ liệu máy chủ SQL bằng T-SQL