El próximo año, estoy ayudando en un esfuerzo por limpiar varios entornos de SQL Server.
Tenemos alrededor de 10,000 procedimientos almacenados y estimamos que solo alrededor de 1000 de ellos se usan de manera regular, y otros 200 más o menos se usan en una rara ocasión, lo que significa que tenemos mucho trabajo por hacer.
Dado que tenemos varios departamentos y equipos que pueden acceder a estas bases de datos y procedimientos, no siempre somos los que llamamos a los procedimientos, lo que significa que debemos determinar qué procedimientos se están llamando. Además de eso, queremos determinar esto en unos pocos meses, no en unos pocos días (lo que elimina algunas posibilidades).
Un enfoque para esto es usar SQL Server Profiler
y rastrear qué procedimientos se están llamando y compararlos con la lista de los procedimientos que tenemos, mientras marcamos si los procedimientos se usan o no. A partir de entonces, podríamos mover los procedimientos a un esquema diferente en caso de que un departamento venga gritando.
¿Está usando el Profiler
enfoque más efectivo aquí? ¿Y / o alguno de ustedes hizo algo similar y encontró otra forma / mejor manera de hacerlo?
fuente
Puede encontrar esta pregunta útil, se aplica a tablas y columnas, pero sugiere utilizar una herramienta de terceros ApexSQL Clean, que también puede encontrar procedimientos almacenados no utilizados, así como todos los objetos a los que no hace referencia ningún otro objeto en la base de datos o en bases de datos externas
Descargo de responsabilidad: trabajo para ApexSQL como ingeniero de soporte
fuente
unreferenced stored procedures
, en cambio OP quiere encontrar el SP no utilizado. Su respuesta no sirve como respuesta para esta pregunta.Si está utilizando SQL Server 2008+, también puede usar eventos extendidos con un objetivo de histograma . Posiblemente esto sería más ligero que un rastro.
AFAIK necesitaría crear una sesión diferente para cada base de datos de interés, ya que no pude ver ninguna indicación de que fuera posible agrupar en varias columnas. El ejemplo rápido a continuación se filtra en
database_id=10
Y luego, después de ejecutar algunos procedimientos almacenados en esa base de datos varias veces y recuperar los datos con
La salida es
Mostrando que el procedimiento con
object_id
de1287675635
se ejecutó 36 veces, por ejemplo. Elasynchronous_bucketizer
es la memoria solamente por lo que sería mejor para establecer algo que las encuestas esta vez en cuando y lo guarda en un almacenamiento persistente.fuente
WHERE (source_database_id IN (10,15,20))
pero, por desgracia, esto no es compatible.object_id
(o el mismoobject_name
) en diferentes bases de datos por separado y tampoco creo que sea posible.extended events
dónde se agregó en 2012, no en 2008?Como continuación del guión de Kin. Aquí hay un script simple para crear una tabla para rastrear los usos a lo largo del tiempo y un script para actualizarlo periódicamente.
fuente
Esta publicación también proporciona una secuencia de comandos para encontrar objetos no utilizados: busque las tablas de la base de datos no utilizadas en SQL Server A continuación se muestra la secuencia de comandos del artículo, cambié el tipo de tabla "U" en el tipo de procedimiento almacenado "P":
fuente