Как глобально установить время ожидания в nhibernate
Я периодически получаю следующее исключение.
System.Data.SqlClient.SqlException: истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.
Я добавил следующее в мои критерии, чтобы увеличить время ожидания.
.SetTimeout(180)
1) Есть ли способ добавить это в мою конфигурацию nhibernate, чтобы 180 было временем по умолчанию?
2) каковы последствия увеличения таймаута? Это увеличит или уменьшит вероятный капот тупиков?
2 ответа
command_timeout
- Укажите время ожидания по умолчанию для IDbCommands, сгенерированных NHibernate
Взято из таблицы 3.1. NHibernate ADO.NET Недвижимость в
http://www.nhforge.org/doc/nh/en/index.html
Объявление 2. Тайм-аут соединения не поможет вам с блокировками. Тайм-аут - это время ожидания клиентом ответа БД, и если время истекло, БД просто отправляет сообщение об ошибке.
С другой стороны, взаимоблокировки разрешаются, поскольку одна транзакция имеет блокировку и ожидает другую блокировку, которая принадлежит другой транзакции, в то время как она ожидает ресурс, заблокированный первой транзакцией. Обратите внимание, что когда БД обнаруживает эту проблему, она немедленно выдает ошибку, а не после какого-либо таймаута
Увидеть:
Когда вы увеличиваете тайм-аут, единственное, что вы разрешите, это более длительное ожидание, когда любая транзакция удерживает блокировку, которую вы ожидаете.
Например, когда у вас есть клиент, который развертывает большие данные в вашей системе и выполняет блокировку на основе таблицы. Операции по развертыванию могут занять 60 секунд. Предположим, что другой клиент, который читает данные из таблицы, этот клиент заблокирован для 60 seconds
пока он не сможет прочитать данные. предполагать timeout = 30 seconds
- это всегда не удается, с другой стороны, такая же ситуация с 90 seconds timeout
буду работать.
Зависит от ситуации, но вы должны предоставлять как можно меньше транзакций для обеспечения лучшей задержки и пропускной способности.