2011-09-06 14 views

Respuesta

7

Sí.

Usted puede verificar esto haciendo

SELECT * FROM sys.dm_exec_procedure_stats 
where object_id = object_id('YourProc', 'P') 

antes y después.

De TechNet

[situaciones en las que los planes se elimina de la memoria caché incluyen] operaciones globales como correr DBCC FREEPROCCACHE para borrar todos los planes de caché, así como cambios en un solo procedimiento, tales como ALTER PROCEDURE, que soltaría todos los planes para ese procedimiento desde el caché.

+0

Si bien creo que (como usted tiene una gran reputación) está documentado en MSDN en cualquier lugar – Kane

+0

Sí lo será. Encontrará un enlace. –

+0

http://msdn.microsoft.com/en-us/library/ms181055.aspx –

4

Sí. Por supuesto, esto es fácil de probarse a sí mismo:

  1. crear un procedimiento
  2. ejecutarlo varias veces
  3. Confirmar que se almacena en caché por sys.dm_exec_cached_plans cheques
  4. modificar el procedimiento
  5. La fila sys.dm_exec_cached_plans se ha ido
CREATE PROCEDURE dbo.blat AS SELECT 1; 
GO 
EXEC dbo.blat; 
GO 5 

SELECT COUNT(*) 
FROM sys.dm_exec_cached_plans AS p 
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS s 
WHERE [sql].[text] LIKE '%dbo.blat%'; 

ALTER PROCEDURE dbo.blat AS SELECT 22; 
GO 

SELECT COUNT(*) FROM sys.dm_exec_cached_plans AS p 
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS s 
WHERE [sql].[text] LIKE '%dbo.blat%'; 

1

Lo hace - pero puede haber otros factores.

A veces con graves problemas de rendimiento, he encontrado que ejecutar explícitamente DBCC FREEPROCCACHE puede mejorar enormemente el rendimiento del sistema. Por supuesto, también puede borrar explícitamente la memoria caché para un único sproc si sabe que tiene problemas.

+0

¿Es esto una situación en la que el caché del plan está lleno de muchas consultas adhoc de un solo uso o algo así? Si es así, optimiza para las cargas de trabajo adhoc podría ser una opción. –

+0

Para ser sincero, he visto esto algunas veces, pasé mucho tiempo tratando de resolverlo, tuve contratistas y todo. Nunca llegamos a la ruta porque solo descubrimos que después de muchas actualizaciones de bases de datos a veces era necesario llamar a 'DBCC FREEPROCCACHE'. – TheCodeKing

Cuestiones relacionadas