Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на процесора от база данни?

Нещо като. Вижте тази заявка:

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

Това ще ви даде заявките в кеша на плана по реда на това колко CPU са използвали. Можете да изпълнявате това периодично, като в задача на SQL Agent, и да вмъквате резултатите в таблица, за да сте сигурни, че данните продължават да съществуват след рестартиране.

Когато прочетете резултатите, вероятно ще разберете защо не можем да свържем тези данни директно с отделна база данни. Първо, една заявка може също да скрие своята истинска база данни родител, като прави трикове като този:

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

Заявката ще бъде изпълнена в MSDB, но ще търси резултати от AdventureWorks. Къде трябва да присвоим потреблението на процесора?

Става по-лошо, когато:

  • Свързване между множество бази данни
  • Изпълнете транзакция в множество бази данни и усилията за заключване обхващат множество бази данни
  • Изпълнявайте задачи на SQL Agent в MSDB, които „работят“ в MSDB, но архивирайте отделни бази данни

Продължава и продължава. Ето защо има смисъл производителността да се настройва на ниво заявка, вместо на ниво база данни.

В SQL Server 2008R2 Microsoft представи функции за управление на производителността и управление на приложения, които ще ни позволят да опаковаме една база данни в разпределим и внедрим DAC пакет, и те обещават функции, които да улеснят управлението на производителността на отделни бази данни и техните приложения. Все още обаче не прави това, което търсите.

За повече от тях вижте T-SQL хранилище в wiki SQL Server на Toad World (по-рано в SQLServerPedia) .

Актуализирано на 29 януари, за да включва общи числа вместо само средни стойности.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете уникално ограничение за колона за вече съществуваща таблица - SQL Server / TSQL урок, част 97

  2. Използване на CASE в оператора WHERE, когато параметърът има множество стойности

  3. Как да експортирате данни на SQL Server от таблица в CSV файл

  4. Нулиране на началната стойност на самоличността след изтриване на записи в SQL Server

  5. Възникна грешка, свързана с мрежата или специфична за екземпляр, при установяване на връзка със SQL Server