¿La ejecución de una declaración ALTER PROCEDURE
para un procedimiento almacenado causa que todos los planes de ejecución en caché para ese procedimiento almacenado se vuelvan inválidos y caducan en SQL Server 2008/2005?¿Alterar un procedimiento almacenado caduca los planes de ejecución en caché?
Respuesta
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 comoALTER PROCEDURE
, que soltaría todos los planes para ese procedimiento desde el caché.
Si bien creo que (como usted tiene una gran reputación) está documentado en MSDN en cualquier lugar – Kane
Sí lo será. Encontrará un enlace. –
http://msdn.microsoft.com/en-us/library/ms181055.aspx –
Sí. Por supuesto, esto es fácil de probarse a sí mismo:
- crear un procedimiento
- ejecutarlo varias veces
- Confirmar que se almacena en caché por sys.dm_exec_cached_plans cheques
- modificar el procedimiento
- 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%';
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.
¿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. –
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
- 1. Ejecutar un procedimiento almacenado dentro de un procedimiento almacenado
- 2. procedimiento almacenado - forzando orden de ejecución
- 3. Ejecución del procedimiento almacenado sincronizado en mysql
- 4. Linq: ejecución de interrupción del procedimiento almacenado
- 5. sql server helper procedimiento almacenado o utilidad para alterar tabla alterar columna IDENTIDAD (1,1)
- 6. ¿Cómo suprimo los resultados de un procedimiento almacenado dentro de un procedimiento almacenado?
- 7. SQL Server sp_ExecuteSQL y planes de ejecución
- 8. ¿Cómo desactivo los resultados de la consulta al ejecutar un procedimiento almacenado desde un procedimiento almacenado?
- 9. ¿Existe un "estoy seguro" para la ejecución del procedimiento almacenado? :)
- 10. Procedimiento almacenado al ejecutar otro procedimiento almacenado
- 11. Otorgar privilegio de ejecución al procedimiento almacenado en SQL Azure
- 12. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 13. Ejecución programada del procedimiento almacenado en el servidor SQL
- 14. Cómo guardar un procedimiento almacenado?
- 15. ¿La ejecución del procedimiento almacenado de T-SQL es "atómica"?
- 16. ¿Cómo programar un procedimiento almacenado?
- 17. Llamar a un procedimiento almacenado en un procedimiento almacenado en MySQL
- 18. ¿Cómo compila Sql Server los planes de ejecución para el flujo lógico en los procedimientos almacenados?
- 19. Transacción de procedimiento almacenado
- 20. Consultas SQL, planes de ejecución y "Paralelismo"
- 21. Seleccionar y actualizar en un procedimiento almacenado
- 22. ¿Cómo selecciono un procedimiento almacenado en Sybase?
- 23. Llamar al procedimiento almacenado con los parámetros
- 24. Ejecutar un procedimiento almacenado como permiso de otro usuario
- 25. Ejecutar un procedimiento almacenado de SQL y procesar los resultados
- 26. hibernar y procedimiento almacenado
- 27. procedimiento almacenado devuelve varchar
- 28. Cómo crear un procedimiento almacenado dentro de otro procedimiento almacenado en SQL Server 2008
- 29. ¿Cómo editas un procedimiento almacenado en MySQL?
- 30. ¿Cómo elimino un procedimiento almacenado en postgresql?
Sí, hará –
Gracias a todos los que respondieron – Kane