title: NHibernate + MySql Intermittent TimeoutException
body: <p>I have just migrated my NHibernate app from SQL Server to MySql.  All seems well except I am getting intermittent TimeoutExceptions.  I can find a lot of info about this timeouts with MySql and even <a href="http://www.codefin.net/2007/05/hibernate-and-mysql-connection-timeouts.html" rel="nofollow">one blog post</a> about timeouts with Hibernate + MySql + C3PO (whatever that is).  But nothing about how to tweak NHib to stop this problem.  Do you know?</p>
  
  <p>Here is the stack trace:</p>
  
  <pre><code>NHibernate.TransactionException: Begin failed with SQL exception ---&gt; 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 ---&gt; 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. ---&gt; 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()
  </code></pre>