В многопоточном приложении все потоки подключаются к базе данных. Ожидается ли это или какая-то проблема?

Я использую NService и NHibernate для своего приложения. Что касается NServicebus, мы определяем количество потоков в файле конфигурации. По количеству рабочих потоков он работает в многопоточной среде. Иногда, когда все потоки используются и потоки получают соединение с базой данных, это не позволяет приложению создать соединение с базой данных. Исключение возникает в рабочем журнале при достижении максимального размера пула. И все потоки освобождают соединение в соответствии с тайм-аутом соединения.

Мой вопрос заключается в том, должны ли все потоки освобождать соединение после использования вместо того, чтобы переводить их в неактивное состояние, или он работает нормально. Если он работает нормально, каким образом я могу увеличить свой рабочий. Потому что при увеличении это дает мне ошибку максимального размера пула


person user349576    schedule 08.09.2010    source источник


Ответы (1)


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

person Ian Ringrose    schedule 08.09.2010
comment
Спасибо за ваш ответ, Ян. Но иногда, даже если потоков меньше, количество подключений к базе данных больше. Это может быть из-за того, что приложение не освобождает подключение к базе данных. - person user349576; 08.09.2010
comment
Тогда ваша проблема заключается в том, что приложение не освобождает соединение с базой данных, и вам нужно это исправить. - person Ian Ringrose; 08.09.2010
comment
Да, это может быть из-за этого. Но поскольку я использую Spring.Data.Nhibernate12, через свое приложение я не создаю и не освобождаю соединение с базой данных. Фабрика сеансов NHibernate делает это для моего приложения. Так может это проблема NHibernate или любая проблема в моей конфигурации приложения. Поскольку ранее я сомневался, что только для этого я поднял вопрос о том, что приложение не освобождает соединение с базой данных, и я также опубликовал свой файл конфигурации. В моем предыдущем вопросе я также опубликовал свой файл конфигурации. - person user349576; 08.09.2010
comment
Могут ли другие приложения подключаться к вашей базе данных? - person Udi Dahan; 08.09.2010
comment
К нему подключается не только мой рабочий, скажем, 50 рабочих потоков. Никакое другое приложение - person user349576; 08.09.2010
comment
Только одно приложение с 50 рабочими потоками подключается к базе данных. И если мы проверим сеанс V $ в базе данных, он покажет, какой exe подключен, это соединение сохраняется до некоторого времени в состоянии INActive, а затем отключается. Итак, какой запрос приходит до соединение существует. Наш рабочий выдает исключение максимального размера пула (в NHibernate LOG) - person user349576; 08.09.2010
comment
Вы случайно не используете управление версиями с NH через столбец ORA_ROWSCN? У нас были некоторые проблемы с NH и распределенными транзакциями за пределами NSB при использовании этого стиля управления версиями. - person Adam Fyles; 14.09.2010