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

Sử dụng CPU của cơ sở dữ liệu?

Đại loại. Kiểm tra truy vấn này:

SELECT total_worker_time/execution_count AS AvgCPU  
, total_worker_time AS TotalCPU
, total_elapsed_time/execution_count AS AvgDuration  
, total_elapsed_time AS TotalDuration  
, (total_logical_reads+total_physical_reads)/execution_count AS AvgReads 
, (total_logical_reads+total_physical_reads) AS TotalReads
, execution_count   
, SUBSTRING(st.TEXT, (qs.statement_start_offset/2)+1  
, ((CASE qs.statement_end_offset  WHEN -1 THEN datalength(st.TEXT)  
ELSE qs.statement_end_offset  
END - qs.statement_start_offset)/2) + 1) AS txt  
, query_plan
FROM sys.dm_exec_query_stats AS qs  
cross apply sys.dm_exec_sql_text(qs.sql_handle) AS st  
cross apply sys.dm_exec_query_plan (qs.plan_handle) AS qp 
ORDER BY 1 DESC

Thao tác này sẽ giúp bạn có các truy vấn trong bộ nhớ cache của gói theo thứ tự lượng CPU mà chúng đã sử dụng hết. Bạn có thể chạy điều này định kỳ, giống như trong công việc SQL Agent và chèn kết quả vào bảng để đảm bảo dữ liệu vẫn tồn tại sau khi khởi động lại.

Khi bạn đọc kết quả, bạn có thể nhận ra lý do tại sao chúng tôi không thể tương quan dữ liệu đó trực tiếp trở lại cơ sở dữ liệu riêng lẻ. Đầu tiên, một truy vấn duy nhất cũng có thể ẩn cơ sở dữ liệu gốc thực sự của nó bằng cách thực hiện các thủ thuật như sau:

USE msdb
DECLARE @StringToExecute VARCHAR(1000)
SET @StringToExecute = 'SELECT * FROM AdventureWorks.dbo.ErrorLog'
EXEC @StringToExecute

Truy vấn sẽ được thực hiện trong MSDB, nhưng nó sẽ thăm dò kết quả từ AdventureWorks. Chúng ta nên chỉ định mức tiêu thụ CPU ở đâu?

Nó trở nên tồi tệ hơn khi bạn:

  • Kết hợp giữa nhiều cơ sở dữ liệu
  • Chạy một giao dịch trong nhiều cơ sở dữ liệu và nỗ lực khóa kéo dài nhiều cơ sở dữ liệu
  • Chạy các công việc SQL Agent trong MSDB "hoạt động" trong MSDB, nhưng sao lưu các cơ sở dữ liệu riêng lẻ

Nó đi và về. Đó là lý do tại sao nên điều chỉnh hiệu suất ở cấp truy vấn thay vì cấp cơ sở dữ liệu.

Trong SQL Server 2008R2, Microsoft đã giới thiệu các tính năng quản lý hiệu suất và quản lý ứng dụng cho phép chúng tôi đóng gói một cơ sở dữ liệu duy nhất trong một gói DAC có thể phân phối và triển khai, đồng thời chúng hứa hẹn là các tính năng giúp quản lý hiệu suất của từng cơ sở dữ liệu và ứng dụng của chúng dễ dàng hơn. Tuy nhiên, nó vẫn không thực hiện những gì bạn đang tìm kiếm.

Để biết thêm về những thứ đó, hãy xem kho T-SQL tại wiki SQL Server của Toad World (trước đây là SQLServerPedia) .

Đã cập nhật vào ngày 1/29 để bao gồm tổng số thay vì chỉ số trung bình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thêm + - 1 năm trong SQL Server

  2. Kết nối với máy chủ SQL từ một máy tính khác

  3. Sử dụng SMO, vẫn không đi được ... ConnectionContext.ExecuteNonQuery (script) không thể hiểu GO

  4. Cách sử dụng trình thiết kế truy vấn trong SQL Server

  5. sumProduct trong sql