NHibernate + MySql прерывистое время ожиданияException

0

Я только что перенесла свое приложение NHibernate с SQL Server на MySql. Кажется, все хорошо, но я получаю прерывистый TimeoutExceptions. Я могу найти много информации об этих тайм-аутах с MySql и даже одно сообщение в блоге о тайм-аутах с Hibernate + MySql + C3PO (что бы это ни было). Но ничего о том, как настроить NHib, чтобы остановить эту проблему. Знаете ли вы?

Вот трассировка стека:

NHibernate.TransactionException: Begin failed with SQL exception ---> System.TimeoutException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond ---> System.IO.IOException: Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   --- End of inner exception stack trace ---
   at MyNetworkStream.HandleOrRethrowException(Exception e)
   at MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.TimedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
   at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
   at MySql.Data.MySqlClient.NativeDriver.ReadOk(Boolean read)
   at MySql.Data.MySqlClient.NativeDriver.SetDatabase(String dbName)
   at MySql.Data.MySqlClient.Driver.SetDatabase(String dbName)
   at MySql.Data.MySqlClient.MySqlConnection.ChangeDatabase(String databaseName)
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at NHibernate.Connection.DriverConnectionProvider.GetConnection()
   at NHibernate.AdoNet.ConnectionManager.GetConnection()
   at NHibernate.Impl.SessionImpl.get_Connection()
   at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
   --- End of inner exception stack trace ---
   at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
   at NHibernate.Transaction.AdoTransaction.Begin()
   at NHibernate.AdoNet.ConnectionManager.BeginTransaction()
   at NHibernate.Impl.SessionImpl.BeginTransaction()
  • 0
    а сейчас вы могли бы поставить таймер, чтобы сделать фиктивный SELECT, чтобы избежать тайм-аута?
  • 0
    Тим, ты решил это, а мне все больше и больше интересно ...
Теги:
nhibernate
timeout

1 ответ

0

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

В конце я добавил Pooling=false; в строку подключения. Я не уверен, что это окончательное решение, но оно остановило мою проблему.

Вы можете проверить спящие соединения, используя show processlist в редакторе MySQL...

  • 0
    Благодарю. Хлоп! Объединив = ложь? Вы беспокоитесь о влиянии производительности на это?
  • 0
    Скорее всего, да, это зависит от варианта использования; однако я думаю, что в коде пула есть ошибка, которая помечает соединения как sleeping НО не позволяет им разбудить, таким образом, в конце концов у вас кончатся соединения. Как я уже сказал, это не окончательное решение, но это обходной путь для меня, по крайней мере, на данный момент.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню