Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pemanfaatan CPU oleh database?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya memiliki kunci asing yang mereferensikan kolom dalam tampilan di SQL Server?

  2. Apa yang setara dengan bigint di C#?

  3. Cara MENGUBAH beberapa kolom sekaligus di SQL Server

  4. Cara Menggunakan OBJECT_ID() pada Objek Lintas Database di SQL Server

  5. Cara membuat Unique Constraint pada Kolom untuk Tabel yang sudah ada - Tutorial SQL Server / TSQL Part 97