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

Bagaimana menemukan Prosedur Tersimpan apa yang menggunakan indeks apa?

Anda memiliki jumlah eksekusi untuk semua pernyataan di sys.dm_exec_query_stats , dan Anda dapat mengekstrak XML paket menggunakan sys.dm_exec_query_plan . Paket berisi detail seperti operator pemindaian yang digunakan, jadi di antara keduanya Anda dapat membuat banyak informasi dari apa yang Anda minta. Misalnya, kueri berikut akan menunjukkan kepada Anda operator IndexScan dalam pernyataan yang sering dijalankan dari paket yang di-cache yang menyebabkan banyak pembacaan logis:

with xmlnamespaces ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sp)
select top(100) 
  q.total_logical_reads, q.execution_count
  , x.value(N'@Database', N'sysname') as [Database]
  , x.value(N'@Schema', N'sysname') as [Schema]
  , x.value(N'@Table', N'sysname') as [Table]
  , x.value(N'@Index', N'sysname') as [Index]
  , substring(t.text, q.statement_start_offset/2,   
  case when 0 < q.statement_end_offset then (q.statement_end_offset - q.statement_start_offset)/2
  else len(t.text) - q.statement_start_offset/2 end) as [Statement]
from sys.dm_exec_query_stats q
cross apply sys.dm_exec_query_plan(plan_handle)
cross apply sys.dm_exec_sql_text(sql_handle) as t
cross apply query_plan.nodes(N'//sp:IndexScan/sp:Object') s(x)
where execution_count > 100
order by total_logical_reads desc;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan Hasil dari dua kueri dan keluaran sebagai satu tabel

  2. Menghapus Akun Email Database dari Profil (SSMS)

  3. Cara membagi string dan memasukkan nilai ke dalam tabel di SQL Server

  4. Bagaimana cara mendapatkan jumlah baris dalam pernyataan pilih yang dieksekusi?

  5. Bagaimana cara menonaktifkan Batasan untuk semua tabel dan mengaktifkannya?