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

Jak zjistit, které uložené procedury používají jaké indexy?

Máte počet spuštění pro všechny příkazy v sys.dm_exec_query_stats a plán XML můžete extrahovat pomocí sys.dm_exec_query_plan . Plán obsahuje podrobnosti, jako jsou použité operátory skenování, takže mezi těmito dvěma můžete vytvořit spoustu informací z toho, na co se ptáte. Například následující dotaz vám ukáže operátory IndexScan v často spouštěných příkazech z plánů uložených v mezipaměti, které způsobují mnoho logických čtení:

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. Použití TUPLES k vložení více než 1000 položek do klauzule SQL IN

  2. Pomocí id, které jsou sql oddělené čárkami

  3. Postgresql date_trunc s časovým pásmem posune pásmo o 1 hodinu

  4. Jak získat časové pásmo operačního systému z databáze Oracle ve formátu řetězce? (Převést/převést datum na ts s tz)