Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wykorzystanie procesora przez bazę danych?

Raczej. Sprawdź to zapytanie:

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

Dzięki temu uzyskasz zapytania w pamięci podręcznej planu w kolejności, w jakiej wykorzystali procesor. Możesz uruchamiać to okresowo, jak w przypadku zadania SQL Agent, i wstawiać wyniki do tabeli, aby upewnić się, że dane przetrwają po ponownym uruchomieniu.

Czytając wyniki, prawdopodobnie zdasz sobie sprawę, dlaczego nie możemy skorelować tych danych bezpośrednio z pojedynczą bazą danych. Po pierwsze, pojedyncze zapytanie może również ukryć swojego prawdziwego rodzica bazy danych, wykonując takie sztuczki:

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

Zapytanie zostanie wykonane w MSDB, ale będzie sondować wyniki z AdventureWorks. Gdzie powinniśmy przypisać zużycie procesora?

Gorzej, gdy:

  • Połącz między wieloma bazami danych
  • Uruchom transakcję w wielu bazach danych, a wysiłek związany z blokowaniem obejmuje wiele baz danych
  • Uruchom zadania agenta SQL w MSDB, które "działają" w MSDB, ale wykonaj kopie zapasowe poszczególnych baz danych

To trwa i trwa. Dlatego sensowne jest dostrajanie wydajności na poziomie zapytania, a nie na poziomie bazy danych.

W SQL Server 2008R2 firma Microsoft wprowadziła funkcje zarządzania wydajnością i zarządzania aplikacjami, które pozwolą nam spakować pojedynczą bazę danych w dystrybuowalny i wdrażalny pakiet DAC, a ponadto obiecują funkcje ułatwiające zarządzanie wydajnością poszczególnych baz danych i ich aplikacji. Jednak nadal nie robi tego, czego szukasz.

Więcej informacji znajdziesz w Repozytorium T-SQL na wiki Toad World's SQL Server (dawniej na SQLServerPedia) .

Zaktualizowano 29 stycznia, aby uwzględnić liczby całkowite, a nie tylko średnie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wykonać wyzwalacz PRZED AKTUALIZACJĄ z serwerem sql?

  2. Maksymalna przestrzeń rzeczywista w varbinary (max) w SQL Server

  3. sp_executesql powoduje, że moje zapytanie jest bardzo powolne

  4. Jak wyświetlić klucz podstawowy tabeli SQL Server?

  5. Procedura składowana, która eksportuje dane do plików csv eksportuje tylko do jednego pliku