NH Profiler

Que cela soit en Java ou en .NET on a bien quelques conseils sur l’utilisation des frameworks de mapping objet-relationnel. Par exemple avec Hibernate, il est conseillé d’activer le “show_sql” afin de voir les requêtes SQL exécutées contre le serveur de base de données, et puis de mettre en lazy les collections par défaut etc … Mais Oren Eini frappe fort avec NH Prof, un profiler pour les applications utilisant NHibernate.

Bien sûr il peut servir en cas de “crise” quand  votre DBA hurle à la requête trop lourde mais on peut aussi l’employer de façon pro-active afin de détecter les problèmes au plus tôt. Voici quelques copies d’écrans. Je l’ai utilisé dans une application POC avec ASP.NET MVC et Spring.

Côté Application, on ajoute une ligne d’initialisation :

HibernatingRhinos.NHibernate.Profiler.Appender.NHibernateProfiler.Initialize();

Et on lance le client puis notre application. NH Prof collecte les informations, on peut voir ici qu’il mets bien en évidence le informations statistiques de la session :

l'écran de stats de NH Prof
l'écran de stats de NH Prof

Mais là où l’intérêt de NH Prof réside c’est dans sa capicité à remonter des alertes sur certains anti-pattern comme le fameux SelectN +1 dans le code suivant d’une DAO :

public override List LoadAll() { List subs = base.LoadAll(); foreach (Subscriber sub in subs) { //force n+1 foreach (Address adress in sub.Addresses) { Blabla(adress.Country); } } return subs; }

SelectN+1 dans NH Prof
SelectN+1 dans NH Prof

ou le chargement d’entités sans filtre :

requête sans filtre
requête sans filtre

Pour chaque alerte une page du site explique les tenants et aboutissants, par exemple avec le Select N+1

Il est amusant de voir cette application pour la version .NET du framework JAVA qui est devenu un standard dans son incarnation “JPA”, car bien qu’il existe des outils de type console pour Hibernate un peu plus évolués que le “sysout des familles” je n’ai pas encore vu de profiler aussi développé.

A noter :  l’application est codée en WPF.

billet publié dans les rubriques coding le