Eu descobri algumas coisas
select * from sys.dm_exec_query_stats
mostrará todos os planos de consulta em cache. Infelizmente, nenhum texto SQL é mostrado lá.
No entanto, você pode unir o texto SQL aos planos da seguinte forma:
select plan_handle, creation_time, last_execution_time, execution_count, qt.text
FROM
sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text (qs.[sql_handle]) AS qt
A partir daqui é bastante trivial adicionar uma cláusula WHERE
para encontrar o SQL que eu sei que está na consulta e, em seguida, posso executar:
DBCC FREEPROCCACHE (plan_handle_id_goes_here)
para remover cada plano de consulta do cache do plano de consulta. Não é exatamente fácil ou conveniente, mas aparece para funcionar ..
edit: o cache de consultas inteiro também funciona e é menos perigoso do que parece, pelo menos na minha experiência:
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;