powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: виснет SQL Server
6 сообщений из 6, страница 1 из 1
NHibernate: виснет SQL Server
    #36514421
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.

Такая проблема:
Есть 2 класса IPersistentObject и его наследник ChangeLogMessage. Маплю их в SQL Server 2005 с помощью NHibernate.

Маппинги такие:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PersistentData" namespace="PersistentData">
  <class name="IPersistentObject" table="TBL_PERSISTENT_OBJECTS" abstract="true">
    <id name="id" type="string" length="18">
      <column name="ID"/>
      <generator class="PersistentData.PrefixIDGenerator, PersistentData"/>
    </id>
    <discriminator column="discr" type="string"/>
  </class>
</hibernate-mapping>

и

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MedicalData" namespace="MedicalData.Logging">
  <subclass name="ChangeLogMessage" extends="PersistentData.IPersistentObject" discriminator-value="ChangeLogMessage">
    <join table="TBL_CHANGE_LOG">
      <key foreign-key="FK_CHANGE_LOG_MESSAGE" column="ID"/>
      <property name="objectID" column="objectID" not-null="true"/>
      <property name="type" column="type" type="ChangeType" not-null="true"/>
    </join>
  </subclass>
</hibernate-mapping>

Когда выполняю на HQL вот такой запрос
Код: plaintext
1.
select max(obj.id) 
from PersistentData.IPersistentObject as obj
,
все нормально. А когда пытаюсь сделать тоже самое для ChangeLogMessage (т.е.
Код: plaintext
1.
select max(obj.id)
from MedicalData.ChangeLogMessage as obj
), sqlserver виснет и оживает только после перезапуска или таймаута.

В логах посмотрел, что для ChangeLogMessage выполняется такой sql:
Код: plaintext
1.
2.
3.
select max(changelogm0_.ID) as col_0_0_ 
from TBL_PERSISTENT_OBJECTS changelogm0_ 
   inner join TBL_CHANGE_LOG changelogm0_1_ on changelogm0_.ID=changelogm0_1_.ID
where changelogm0_.discr='ChangeLogMessage'
.

Подскажите, в чем проблема?
...
Рейтинг: 0 / 0
NHibernate: виснет SQL Server
    #36516178
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Update: если использовать count вместо max, все тоже самое.
...
Рейтинг: 0 / 0
NHibernate: виснет SQL Server
    #36516932
guest2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rodya,

Скорее всего дедлок. Посмотри, ты скорее всего в одной транзакции что-то пишешь в таблицу, а в другой транзакции в это же время пытаешься из неё читать.
...
Рейтинг: 0 / 0
NHibernate: виснет SQL Server
    #36516966
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть какие-нибудь инструменты для SQL Server, чтобы посмотреть сколько транзакций открыто, в какой что делается и прочее.
Знаю что для оракла такого куча, а вот для SQL сервера не встречал.
Просто по коду все должно быть в порядке.
...
Рейтинг: 0 / 0
NHibernate: виснет SQL Server
    #36518033
guest2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rodya,

Если MS-SQL не express, то в management studio есть встроенный профайлер, а если express, то вот например: http://sites.google.com/site/sqlprofiler/ . Я эти профайлером последний раз дедлок и отловил.
...
Рейтинг: 0 / 0
NHibernate: виснет SQL Server
    #36525342
Rodya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest2,

СПАСИБО!!!
Таки да, это был дедлок. Отловил только по логам хиберната.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: виснет SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]