2009-02-23 4 views
0

Я занимаюсь анализом производительности приложения, над которым я работаю. Приложение основано на веб-интерфейсе (asp.net), используя старую версию NHibernate (1.0) на MSSQL Server (2005).sql-профайлер показывает nhibernate запущенные запросы дважды?

Запуск профайлера против приложения, похоже, показывает что-то немного странное, поскольку мы, кажется, дважды запрашиваем объекты, один раз в качестве прямого запроса и однажды завернутый в sp_executesql. например:

 

SELECT col1, col2 FROM TABLE 
exec sp_executesql N'SELECT col1, col2 FROM TABLE' 

Глядя на статистику внутри профайлер я могу видеть, что они являются различными событиями (выбранный записывается как событие 45 - SP: StmtCompleted в то время как призыв к sp_executesql записывается как событие 10 - RPC: завершено) ,

Я не слишком много работал с NHibernate до этого, но я не могу себе представить, что это нормальное поведение. Я либо неправильно читаю трассировку профиля (в каком случае, как я должен интерпретировать выше), или есть ли веская причина для этого?

Если это так плохо, как я думаю, есть ли способ отключить это поведение?

Спасибо

ответ

4

Ваши запросы не запускаются дважды. Это просто, что эти 2 события уволены за одно и то же заявление.

+0

ok - так для моего понимания, почему один упакован в sp_executesql, а второй нет? – Chris

+0

и почему запуск оператора sp_executesql вручную не воспроизводит то же поведение? – Chris

+0

Я не очень хорошо знаком с NHibernate, но я бы предположил, что это происходит из-за его настроек команды. Было бы странно, что они стреляли дважды. –