2009-12-21 21 views
20

Hemos creado tantos procedimiento almacenado ineficiente en nuestra aplicación, siempre posponemos para que sea más eficiente hasta que tengamos un problema grave con el rendimiento de base de datos.¿El procedimiento almacenado más ejecutado?

Ahora, estoy pensando para fijar una por una orden por el procedimiento almacenado más a menudo ejecutados.

¿Cuál es la mejor manera de averiguar qué procedimiento almacenado es el más ejecutada?

¿Existe un script que puede mostrar qué procedimiento almacenado se ejecuta la mayor parte?

Respuesta

23

Uso:

SELECT TOP 10 
     qt.TEXT AS 'SP Name', 
     SUBSTRING(qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN(qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query, 
     qs.execution_count AS 'Execution Count', 
     qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime', 
     qs.total_worker_time AS 'TotalWorkerTime', 
     qs.total_physical_reads AS 'PhysicalReads', 
     qs.creation_time 'CreationTime', 
     qs.execution_count/DATEDIFF(Second, qs.creation_time, GETDATE()) AS 'Calls/Second' 
    FROM sys.dm_exec_query_stats AS qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt 
WHERE qt.dbid = (SELECT dbid 
        FROM sys.sysdatabases 
        WHERE name = '[your database name]') 
ORDER BY qs.total_physical_reads DESC 

Referencia: SQL SERVER – 2005 – Find Highest/Most Used Stored Procedure

+0

también se puede extraer el 'SUBSTRING (Texto, statement_start_offset/2, caso cuando (statement_end_offset = -1) entonces len (texto) más (statement_end_offset-statement_start_offset)/2 final)' para la consulta real dentro de la SP –

+0

@Remus: ¡Agregado, gracias! –

+0

cabe subcadena (qt.text, qs.statement_start_offset/2, CASE CUANDO (qs.statement_end_offset = -1), entonces LEN (qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query, –

0

situación típica ..

Ejecutar el analizador de rendimiento Y a continuación, iniciar la aplicación establecer algunos filtros para capturar gran número de lecturas/escrituras/exploraciones etc ..

1

Una forma rápida de lograr esto es ejecuta SQL Profiler, y luego "agrupa" tu rastro mediante TextData.

  • entrar en su propiedades de rastreo
  • En la pestaña Selección de eventos, haga clic en Organizar Columnas ...
  • Haga clic en TextData, y moverlo hasta el área "Grupos".

Es posible también sólo quieren ver eventos específicos, como por lotes SQL terminado. Si mal no recuerdo, eso te dará duraciones y otras estadísticas útiles para agrupar/filtrar.

1

Otra herramienta es fantástica panel de rendimiento de Microsoft. link text

Cuestiones relacionadas