Профилировщик sql дважды показывает запущенные запросы nhibernate?

Я проводил анализ производительности приложения, над которым работаю. Это веб-приложение (asp.net) с использованием старой версии NHibernate (1.0) на сервере MSSQL (2005).

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


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

Глядя на статистику в профилировщике, я вижу, что это разные события (выбор записывается как событие 45 - SP: StmtCompleted, в то время как вызов sp_executesql записывается как событие 10 - RPC: Completed).

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

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

Спасибо


person Chris    schedule 23.02.2009    source источник


Ответы (1)


ваши запросы не выполняются дважды. Просто эти два события запускаются для одного и того же утверждения.

person Mladen Prajdic    schedule 23.02.2009
comment
хорошо - так что, насколько я понимаю, почему один завернут в sp_executesql, а второй нет? - person Chris; 23.02.2009
comment
и почему выполнение инструкции sp_executesql вручную не воспроизводит такое же поведение? - person Chris; 23.02.2009
comment
Я не так хорошо знаком с NHibernate, но я предполагаю, что это происходит из-за настроек его команды. Было бы очень странно, что они стреляли дважды. - person Mladen Prajdic; 23.02.2009