как глобально установить время ожидания в nhibernate - PullRequest
2 голосов
/ 10 августа 2011

Я периодически получаю следующее исключение.

System.Data.SqlClient.SqlException: истекло время ожидания.Период ожидания истек до завершения операции, или сервер не отвечает.

Я добавил следующее в мои критерии, чтобы увеличить время ожидания.

 .SetTimeout(180)

1) Есть ли способ добавить это в мою конфигурацию nhibernate, чтобы 180 было временем по умолчанию?

2) каковы последствия увеличения времени ожидания?Будет ли это увеличивать или уменьшать вероятность появления тупиковых ситуаций?

Ответы [ 2 ]

6 голосов
/ 10 августа 2011

command_timeout - укажите тайм-аут по умолчанию для IDbCommands, сгенерированных NHibernate

Из таблицы 3.1. Свойства NHibernate ADO.NET в
http://www.nhforge.org/doc/nh/en/index.html#configuration-hibernatejdbc

0 голосов
/ 14 августа 2013

Объявление 2. Тайм-аут подключения не поможет вам с блокировками. Тайм-аут - это время ожидания клиентом ответа БД, и если время истекло, БД просто отправляет сообщение об ошибке.

С другой стороны, взаимоблокировки разрешаемы , поскольку одна транзакция имеет блокировку и ожидает другую блокировку, которая принадлежит другой транзакции, в то время как она ожидает ресурс, заблокированный первой транзакцией. Обратите внимание, что когда БД обнаруживает эту проблему, она немедленно выдает ошибку, а не после какого-либо таймаута.

См:

enter image description here

Когда вы увеличиваете тайм-аут, единственное, что вы разрешите, это более длительное ожидание, когда любая транзакция удерживает блокировку, которую вы ожидаете.

например. когда у вас есть клиент, который развертывает большие данные в вашей системе и выполняет блокировку на основе таблицы. Операции по развертыванию могут занять 60 секунд. Предположим, что другой клиент, который читает данные из таблицы, этот клиент заблокирован на 60 seconds, пока он не сможет прочитать данные. Предположим, timeout = 30 seconds - это всегда не получается, с другой стороны, такая же ситуация с 90 seconds timeout будет работать.

Зависит от ситуации, но вы должны предоставлять как можно меньше транзакций для обеспечения лучшей задержки и пропускной способности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...