sql >> Databáze >  >> RDS >> Sqlserver

Využití CPU databází?

Tak nějak. Podívejte se na tento dotaz:

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

Tím získáte dotazy v mezipaměti plánu v pořadí podle toho, kolik CPU spotřebovaly. Můžete to spouštět pravidelně, jako v úloze SQL Agent, a vkládat výsledky do tabulky, abyste měli jistotu, že data zůstanou zachována i po restartu.

Když si přečtete výsledky, pravděpodobně si uvědomíte, proč nemůžeme tato data přímo korelovat zpět do individuální databáze. Za prvé, jeden dotaz může také skrýt svého skutečného databázového rodiče pomocí triků jako je tento:

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

Dotaz by byl proveden v MSDB, ale zjišťoval by výsledky z AdventureWorks. Kam bychom měli přiřadit spotřebu CPU?

Zhorší se to, když:

  • Spojte se mezi více databázemi
  • Proveďte transakci ve více databázích a úsilí o zamykání zahrnuje více databází
  • Spouštějte úlohy SQL Agent v MSDB, které "fungují" v MSDB, ale zálohujte jednotlivé databáze

Jde to dál a dál. Proto má smysl ladit výkon na úrovni dotazu namísto na úrovni databáze.

V SQL Server 2008R2 společnost Microsoft představila funkce správy výkonu a správy aplikací, které nám umožní zabalit jednu databázi do distribuovatelného a nasaditelného balíčku DAC, a jsou to slibné funkce, které usnadní správu výkonu jednotlivých databází a jejich aplikací. Stále však nedělá to, co hledáte.

Další z nich najdete v knihovně Úložiště T-SQL na wiki serveru SQL Server Toad World (dříve na SQLServerPedia) .

Aktualizováno 29. 1. tak, aby zahrnovalo celková čísla namísto pouhých průměrů.



  1. Mzdový datový model

  2. Jak porovnat data na serveru SQL Server

  3. Databázové tabulky, čím více, tím lépe?

  4. Jak identifikovat jazyk ve sloupci utf-8 v MySQL