SQL Server 2005 Profiler


Estaba haciendo una prueba de carga de una aplicacion GeneXus, de la cual estamos por liberar una nueva versión.  Es una aplicación java y la base de datos es SQL Server 2005. 

La idea de la prueba, era ver si los cambios que se habian hecho al modelo de datos, permitia ejecutar las consultas existentes, con un tiempo de respuesta razonable. 

Para poder identificar los mayores problemas de performance tenemos una metodología bastante aceitada: 

  • Capturar las sentencias que demoran en la base de datos.
  • Capturar los locks en la base de datos. 
  • Identificar que objetos GeneXus ejecutan dichas sentencias. 
  • Tratar de optimizar los objetos GeneXus para mejorar la performance (cambiar los for each, poner when, mejorar la programacion, etc). 
  • Tratar de optimizar la ejecucion de la sentencias (crear nuevos indices, estadisticas, planes de ejecucion, fragmentacion, etc)
  • Minimizar los bloqueos (analizar la forma en que se bloquean las aplicaciones)

Usando el SQL Server 2005 Profiler, para capturar las sentencias que demoran pude encontrar una cosa a la que no  le encuentro explicación.
Cuando se muestra el resultado de la captura en el Profiler, se muestra el campo DURATION, que tiene lo que demoró en ejectuar la sentencia, en MILISEGUNDOS. 

Cuando se salva el resultado del trace, a una tabla de la base de datos, el campo DURATION se salva pero como MICRO MILISEGUNDOS (lo anterior X 1000). 

En SQL Server 2000 la duracion mostrada en el Profiler y en la base de datos (al salvar el trace) se mostraba todo en milisengudos, que parece algo mas coherente.  Seguramente existe alguna explicación razonable para este comportamiento, pero en el momento no la encuentro.  

Comentarios

  1. Hola que tal
    Te cuento, ahora estamos usando bastante el sql server profiler(SSP) para ver eventos de Analysis services.
    Sobre esa parte del Table Trace, como hago para crearla, me seria mas facil pasar esos eventos a una tabla y luego a un excel, para poder analizar mejor que consultas mdx estan presionando a mi servidor de analisis.

    Gracias
    Mi correo es ealvinoq@gmail.com
    me llamo Esteban!!

    Saludos

    ResponderBorrar
  2. Esteban:
    Para crear una tabla que contenga los registros capturados en el profiler, tenes que hacer File/Save as Table/ desde el profiler, en la sesion que ya registro los eventos que a ti te interesan.
    Te va a pedir una base de datos y el nombre de una tabla y eso es todo...

    ResponderBorrar
  3. Hola
    Desde hace unas semanas estamos teniendo un problema de bloqueos en tablas, y la verdad que no podemos identificar cual es el problema.
    Es un sistema web de manejo de expedientes, esta realizado con gx9 sobre .net y sqlserver 2000
    La tabla que se bloquea es siempre la misma (identificador una tabla que asigna numeros ID), y por la manera en que genexus manda las instrucciones la traza de sql server no nos dice demasiado.
    El problema mas grave es que el bloqueo empieza a cascadear y termina tirando toda la base de datos.
    Por ahora mucho mas no les puedo comentar, la gente que lo desarrollo esta bastante perdida, incluso el dba.
    Por eso el motivo de este pedido de ayuda es que nos indiquen por donde empezar y si alguien tubo problemas similares.
    Desde ya muchas gracias

    ResponderBorrar
  4. Etra:
    recomiendo empezar por el sp_who2 para identificar quien bloquea a quien y con que recursos.
    No es un tema facil, pero hay que encararlo.
    Una opcion (no siempre posible) es hacer que el proceso que da numeros, ejecute en otra UTL (o Logical Unit Work - LUW) y que haga commit.

    ResponderBorrar
  5. Enrique interesante lo estoy probando, has visto este bloqueo ya que tengo estos tipos de WAITYPE y ponene lenta una aplicación PAGEIOLATCH_SH y PAGEIOLATCH_EX

    ResponderBorrar
  6. Neftali:
    Con un poco mas de informacion a lo mejor te podria ayudar mejor.

    Lo que tenes es un bloqueo?

    ResponderBorrar
  7. Enrique, si tengo un bloqueo comienza a degenerarce la performance en un momento los matamos y la aplicación revive en el activity monitor lo coloca suspend.
    Van quendando con largo tiempo los bloqueos que hace la maquina hasta que se muere, en la pagina stackoverflow me dice que es que acceso tablas gigantes sin indices
    ,es cierto un monton de for eachs sin acceso con indices a tablas de millones de registros.
    Pero solo para saber si tienes experiencia en estos casos.

    ResponderBorrar
  8. Enrique,

    te envie al mail de gmail las imagenes para ver si ves algos.
    gracias de antemano

    ResponderBorrar
  9. Buenas noches, tambien tengo el mismo problema, mi servidor tenia 4gb y lo subieron a 6gb, luego se realizo unas actualizaciones y todo ok, se activo el AWE, seguia funcionando, pero esta semana se realizan bloqueos en cascada, tengo que estar matando con KILL el proceso que origino esto, alguna sugerencia, gracias por el apoyo

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.