atom feed8 messages in com.googlegroups.nhibernate-hispanoRe: [NHibernate-Hispano] Mucha difere...
FromSent OnAttachments
César PistinerNov 19, 2014 12:32 pm 
Juan José Montes de Oca ArbósNov 19, 2014 1:04 pm 
César PistinerNov 19, 2014 1:34 pm 
Pedro WoodNov 19, 2014 3:08 pm 
César PistinerNov 19, 2014 5:28 pm 
Carlos PeixNov 20, 2014 1:48 am 
César PistinerNov 20, 2014 1:59 am 
César PistinerNov 20, 2014 4:25 am 
Subject:Re: [NHibernate-Hispano] Mucha diferencia entre query desde SQL Management Studio y Test
From:César Pistiner (chpi@gmail.com)
Date:Nov 20, 2014 4:25:52 am
List:com.googlegroups.nhibernate-hispano

Bueno gente,

Les comento que con los cambios sugeridos el test ya no supera los malditos 5 segundos :)

Les dejo lo que hice por si le sirve a otro, pasé la inicialización de NH al FixtureSetUp.

[TestFixtureSetUp] public void Init() { Configuration nhConfiguration = new Configuration(); nhConfiguration.Configure("hibernate-performance.cfg.xml"); _sessionFactory = nhConfiguration.BuildSessionFactory(); }

Gracias a todos por la ayuda, ahora me voy a concetrar en mi problema original de performance!

Saludos, César

Buen día Carlos!

Si!! Ni bien llego voy a probar eso y les cuento.

Muchas gracias!

Abrazo, César

El jue, nov 20, 2014 06:48 AM, Carlos Peix <carl@gmail.com> escribió:

Cesar,

Fijate en que setup (TestInitialize, ClassInitialize o AssemblyInitialize) esta la lógica de inicialización y pasalo lo mas arriba posible.

---------------------------------- Carlos Peix

2014-11-19 22:28 GMT-03:00 César Pistiner <chpi@gmail.com>:

Hola Pedro!

Primero gracias por tu completa respuesta.

Si, efectivamente usé un profiler para ver la select que esta generando NH y esa es la que puse en el management studio. Gracias por los links, voy a leerlos con tiempo. En cuanto saque la lógica de configuración e inicialización de NH al setup les comento como fueron los resultados. Me imaginaba que algo de tiempo se lo llevaba eso pero no pensé que era tanto.

Gracias nuevamente.

Saludos, César

El mié, nov 19, 2014 08:08 PM, Pedro Wood <pedr@gmail.com> escribió:

Hola César

Cuando corrés el query desde el managment studio sólo toma en cuenta el tiempo de la consulta en si, en cambio tu test incluye tiempo de conexión a la base e inicialización de NH.

En ese test seguro se está llevando la mayor parte del tiempo esto último y no la consulta en si.

Como primer paso sacá esto al setup de los tests:

Configuration nhConfiguration = new Configuration(); nhConfiguration.Configure("hibernate-performance.cfg.xml"); ISessionFactory sessionFactory = nhConfiguration.BuildSessionFactory();

Para conocer más sobre el tema del manejo de la sesión:

http://joseoncode.com/2011/03/03/effective-nhibernate- session-management-for-web-apps/

Para mejorar la performance de NH hay muchas cosas que se pueden hacer, desde la configuración, el manejo de la sesión, en las consultas en sí (según cómo las escribís, si usas lazy loading, o eagar fetch), ... Un problema muy común como es el SELECT n+1

Acá tenés info de performance:

http://geekswithblogs.net/Optikal/archive/2013/03/10/152371.aspx

Hay que empezar por diagnosticar bien dónde están los problemas de performance y para eso necesitás por lo menos tener un log, o un profiler, para ver el SQL que está ejecutando NH.

Saludos,

Pedro

2014-11-19 18:34 GMT-03:00 César Pistiner <chpi@gmail.com>:

Si!! es el único test que estoy corriendo, en cuanto lo pruebe les

comento como fue!

Muchas gracias!

Saludos, César

El mié, nov 19, 2014 06:04 PM, Juan José Montes de Oca Arbós < juan@gmail.com> escribió:

Hola Cesar, si este es el único tests ejecutás demora mucho, porque

primero debe inicializar varias cosas.

En un proyecto en el que trabajo pasaba lo mismo, y la solución fue agregar un test vacío que se ejecutara primero, con un nombre tipo a00().

También, como extra, podés probar de sacar la configuración de NH al setup de los tests para reducir los tiempos de configuración de NH.

Espero que te sirva de ayuda... ya nos cuentas como sigue la cosa.

Saludos Y ÉXITOS!!

-- Juan José Montes de Oca Arbós.

=========================== Web personal: http://juanjose.montesdeocaarbos.com.ar/blog/

El 19 de noviembre de 2014, 17:32, César Pistiner < chpi@gmail.com> escribió:

Hola gente!

Los molesto con un tema que me tiene mal, estoy teniendo algunos problemas de performance en nuestra aplicación web. Para atacar el problema puntual me armé un test que es el siguiente:

[Test, Timeout(5000)] [Category("Performance")] public void ImportacionDeComprobantes() { Configuration nhConfiguration = new Configuration(); nhConfiguration.Configure("hibernate-performance.cfg.xml"); ISessionFactory sessionFactory = nhConfiguration. BuildSessionFactory(); using (ISession session = sessionFactory.OpenSession()) { IResponsable emisor = session.Get<Transportista>(new Guid("CCD461E8-1299-4868-856F-9F0A00FDF3F5"));

var criteria = session.CreateCriteria<DetalleResumenDeCuenta>(); criteria.Add(Restrictions.Eq("IdExterno", "CC121"));

criteria = criteria.CreateCriteria("Comprobante", "c"); criteria.Add(Restrictions.Eq("c.Emisor", emisor));

Assert.IsTrue(criteria.List().Count > 0); } }

La ejecución de este test supera los *5 segundos*, pero me llama mucho la atención que si pongo la sentencia que genera NH en el SQL Management Studio, tarda *nada*, menos de 1 segundo. ¿Puedo tener tanta diferencia? ¿Qué puedo revisar para mejorar esto?

Espero haber sido claro, si necesitan algo más de info (mapping, índices que tengo creados, etc.) puedo compartirlas sin problema.

Desde ya, muchas gracias!

Saludos, César