SQL Server 2008 - Buscando Stored Procedures que no están en el caché

Posted on
  • sábado, 25 de julio de 2009
  • by
  • Román
  • in
  • Etiquetas:
  • Con el query que se publica a continuación se puede obtener una lista de Stored Procedures que no están en el cache, lo cual podría posibilitar investigar luego si esos S.P. que no están en el cache son realmente utilizados o no.

    Atención, nunca borre o elimine un stored procedure basandose en este query, ya que este query indica solamente si el sp está en el cache, lo cual no significa necesariamente que no se utiliza, por caso si un S.P. tiene las sentencias RECOMPILE, nunca jamás aparecerá en el cache a pesar de ser plenamente utilizado.

    Y recuerde que en vez de eliminar un S.P. debería renombrarlo con algún prefijo que identifique claramente a los SPs a investigar en el entorno de testing y luego hacer las pruebas correspondientes en entornos de testing y de pruebas para ver si ese S.P. es usado o no. Y obviamente, luego de todas esas pruebas y como medida de seguridad adicional, antes de borrar un S.P. en producción se debe guardar un script con toda la lógica.

    Dicho lo anterior, veamos los scripts:
    -- Obtengo una lista de SPs en la base de datos (SQL 2005 and 2008)
      SELECT p.name AS 'SP Name', p.create_date, p.modify_date      
      FROM sys.procedures AS p
      WHERE p.is_ms_shipped = 0
      ORDER BY p.name;
    
    
      -- Obtener una lista de SPs posiblemente no usados (SQL 2008 solamente)
      SELECT p.name AS 'SP Name'        
      FROM sys.procedures AS p
      WHERE p.is_ms_shipped = 0
    
      EXCEPT
    
      SELECT p.name AS 'SP Name'        -- Lista de SPs en la base actual
      FROM sys.procedures AS p          -- que están en el procedure cache
      INNER JOIN sys.dm_exec_procedure_stats AS qs
      ON p.object_id = qs.object_id
      WHERE p.is_ms_shipped = 0;
    Adicionalmente usted puede usar el siguiente query (solamente SQL Server 2008)
    para determinar las dependencias de un objeto.
    SELECT referencing_schema_name, referencing_entity_name
    FROM sys.dm_sql_referencing_entities (‘Person.Address’, 'OBJECT');
    
    
    Estos consejos son dados "AS IS" "TAL COMO ESTÁN", no doy ni concedo explicita o implicitamente
    garantía alguna acerca de estos scripts, queries y consejos, ni de su funcionalidad ni utilidad
    y su uso queda bajo la exclusiva responsabilidad de un Administrador de Bases de Datos competente
    y experimentado, toda responsabilidad por daños alguno o el mal uso de los mismos queda bajo la
    responsabilidad exclusiva de dicho administrador y se da por entendido que las bases de Datos
    SQL Server deben ser administradas por profesionales expertos en dicha tecnología.
    No me hago cargo de modo alguno por daños en datos, sistemas y servidores o 
    similes por el uso de este o cualquier otro artículo de este blog.
    
    
    Hugo Román Bernachea
    Mail de contacto: SQLServer777@gmail.com

    Microsoft Certified DBA
    Microsoft Certified Trainer
    Twitter: @bernachea

    3 comentarios:

    Anónimo dijo...

    cuando escriviste "experimentado" en lugar de "esperimentado" ya no te tuve confiansa jajaja

    Diego dijo...

    Yo tampoco te tendría confianza anónimo, ya que es "escribiste" y no "escriviste"

    Anónimo dijo...

    jajajaja! me hicieron reir!

    Publicar un comentario