261 messaggi dal 12 maggio 2003
Il sito sul quale lavoro si appoggia ad un db mysql e si interfaccia ad esso tramite nhibernate. Quando faccio una determinata operazione di salvataggio mysql inizia ad aprire thread di connessione al ritmo di uno al secondo saturando velocemente il sistema e mandando il tutto a gambe all'aria. Vi posto il metodo di salvataggio che sembra generare il problema.
public void SaveNew(New n)
    {
      NHibernate.ISession session = NhibernateHelper.GetCurrentSession();
      NHibernate.ITransaction tx = session.BeginTransaction();
      
      try
      {
        session.SaveOrUpdate(n);
        session.Flush();

        tx.Commit();
        NhibernateHelper.CloseSession();
      }
      catch(Exception ex)
      {
        try
        {
          tx.Rollback();
          NhibernateHelper.CloseSession();
        }
        catch(Exception e)
        {
          throw e;
        }
        throw ex;
      }
    }


La connessione viene chiusa regolarmente e non so come posso verificare quello che succede all'interno del metodo SaveOrUpdate. Avete qualche consiglio?
Vi prego aiutatemi!!
Ciao,

cosa succede se togli Trasaction ?

Fabrizio Canevali
575 messaggi dal 23 giugno 2003
www.padovaboy.it
Magari dico una porcata ma hai provato a specificare questo nella stringprovider:

Pooling=false;Connect Timeout=45;

A me era successa una cosa simile ed era una vera rogna...pareva che i driver odbc di mysql non chiudessero correttamente le connessioni ...anche se richieste correttamente da programmazione...mi pare di aver risolto disabilitando il pooling :P

www.padovaboy.it dal 2001 con furore :D
261 messaggi dal 12 maggio 2003
Grazie per le risposte.
Allora, la transaction è necessaria per Nhibernate poichè vengono effettuate varie query di aggiornamento fra le relazioni e non devono esserci discrepanze altrimenti è un casino.
Mentre la questione del pooling, in effetti potrebbe essere una soluzione, ma ne risentirebbero troppo le prestazioni anche perchè è un sito con circa tremila utenti al giorno.

Cmq dalle varie prove che ho fatto credo con un piccolo margine di dubbio di aver isolato il problema ad un operazione di inserimento. Il problema è che a livello di codice C# è tutto ok. Quindi ci deve essere qualche errore a livello di db o di mapping...ma anche lì ho controllato più volte..non so che pesci pigliare..
575 messaggi dal 23 giugno 2003
www.padovaboy.it
Ciao.
Beh intanto fai dei test disabilitando il pooling e vedi cosa succede.
Poi direi che i tuoi problemi sono dati dai driver che fanno schifo (tant'è che la stessa mysql se n'è accorta, infatti ultimamente dopo 1 anno di assenteismo, hanno messo qualcuno a continuare il progetto dei connector).
Oppure hai una cattiva configurazione di MySQL.
Controlla i parametri del numero di thread e dei timeout.

www.padovaboy.it dal 2001 con furore :D

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.