semacam. Lihat kueri ini:
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
Ini akan memberi Anda kueri dalam cache paket dalam urutan berapa banyak CPU yang telah mereka gunakan. Anda dapat menjalankan ini secara berkala, seperti dalam tugas Agen SQL, dan menyisipkan hasilnya ke dalam tabel untuk memastikan data tetap ada setelah reboot.
Saat Anda membaca hasilnya, Anda mungkin akan menyadari mengapa kami tidak dapat menghubungkan data tersebut secara langsung kembali ke database individual. Pertama, satu kueri juga dapat menyembunyikan induk basis data sebenarnya dengan melakukan trik seperti ini:
USE msdb
DECLARE @StringToExecute VARCHAR(1000)
SET @StringToExecute = 'SELECT * FROM AdventureWorks.dbo.ErrorLog'
EXEC @StringToExecute
Kueri akan dieksekusi di MSDB, tetapi akan melakukan polling hasil dari AdventureWorks. Di mana kita harus menetapkan konsumsi CPU?
Ini menjadi lebih buruk ketika Anda:
- Bergabung di antara beberapa basis data
- Jalankan transaksi di banyak basis data, dan upaya penguncian mencakup banyak basis data
- Jalankan tugas Agen SQL di MSDB yang "berfungsi" di MSDB, tetapi buat cadangan database individual
Ini terus berlanjut. Itu sebabnya masuk akal untuk menyesuaikan kinerja di tingkat kueri alih-alih tingkat basis data.
Di SQL Server 2008R2, Microsoft memperkenalkan fitur manajemen kinerja dan manajemen aplikasi yang memungkinkan kita mengemas satu database dalam paket DAC yang dapat didistribusikan dan disebarkan, dan fitur tersebut menjanjikan untuk mempermudah pengelolaan kinerja database individual dan aplikasinya. Namun, tetap tidak melakukan apa yang Anda cari.
Untuk informasi lebih lanjut, lihat Repositori T-SQL di wiki SQL Server Toad World (sebelumnya di SQLServerPedia) .
Diperbarui pada 1/29 untuk memasukkan jumlah total, bukan hanya rata-rata.