Я заметил, что множество подключений db осталось открытым на моем выпуске SQL Server, некоторые в течение очень долгого времени. Многие из них имеют открытую транзакцию. Как видно из запроса:Почему sysprocesses остается открытым на SQL Server в течение длительного времени?
select * from sysprocesses where open_tran>0
Статус: = "sleeping", cmd = "AWAITING COMMAND".
Соединения открываются с помощью NHibernate следующим образом:
For<ISessionFactory>().Singleton()
.Use(() => DataContext.GetSessionFactory());
For<ISession>().Transient()
.Use(context => context.GetInstance<ISessionFactory>().OpenSession());
Некоторые сеансы использовать область транзакции: _transactionScope = новый TransactionScope();
Некоторые из них создают сделку:
_uncommittedTransaction = SessionUncommittedWrapper.Session.BeginTransaction(IsolationLevel.ReadUncommitted);
Транзакция и/или TransactionScope расположены впоследствии.
Почему соединения все еще открыты? И это проблема, если ничего не блокируется?
ДБ частично на побегушках приложения, которые сделали это. приложение может сделать вызов db и оставить его открытым или открыть, сделать и закрыть .. многие плохие веб-кодеры открывают dbs, а не закрывают их, и требуется некоторое время, чтобы закрыть его – BugFinder