Domanda

In Firebird 2.0, sta usando una transazione esplicita più veloce su un comando SELECT piuttosto che eseguirla con una implicita?

È stato utile?

Soluzione

Tutti i comandi SQL (SELECT, INSERT, UPDATE ecc.) possono essere eseguiti SOLO all'interno di alcune transazioni. Non è possibile eseguire un comando senza che la transazione sia stata avviata prima di essa.

Altri suggerimenti

Le transazioni esplicite e implicite sono una funzionalità del set di componenti che si sta utilizzando per accedere al database, non una funzionalità di Firebird stesso. Come accennato in precedenza, Firebird sempre fa tutto all'interno di una transazione. Questo ha un paio di implicazioni per te:

  • Uso di " implicito " la transazione non può essere più veloce quindi usando un " Explicit " transazione perché dal punto di vista di Firebird, una transazione è una transazione, non importa chi l'ha avviata.
  • Per ottenere le migliori prestazioni a volte è necessario un controllo accurato su " Commits " ;. Mentre il " implicito " la transazione non può essere più veloce di " Explicit " transazione, l'Esplicito potrebbe essere più veloce perché puoi controllare StartTransactions e Commit. Mentre di solito si desidera eseguire tutti gli aggiornamenti di un database all'interno di una transazione (quindi tutti hanno esito positivo o negativo come set) a volte si desidera dividere le operazioni in più gruppi: se è necessario inserire in blocco molti record, probabilmente si desidera per commetterne uno ogni 1000 record circa.

Firebird non può eseguire comandi SQL senza una transazione.

PS: ottieni i migliori risultati in termini di prestazioni se esegui il commit delle transazioni, anziché ripristinarle. Anche se hai chiamato SELECT e non hai cambiato nulla.

Oltre a quanto già detto, tieni presente che la transazione può essere:

  • lettura e scrittura
  • Read-Only

Per un SELECT sarebbe meglio usare una transazione di sola lettura

PS: esistono altri tipi di transazioni, ma questi due sono quelli importanti per questo argomento.

Di solito la transazione aggiunge un certo sovraccarico. Tuttavia, dovresti stare attento se non hai avviato alcune transazioni predefinite quando ti connetti a Firebird.

In base alla mia esperienza, le transazioni implicite tendono automaticamente a conservare automaticamente il commit, quindi dovrebbero essere più lente. Puoi sempre modificare il comportamento predefinito.

Ma raccomanderei di usare transazioni esplicite poiché Commit Retaining potrebbe causare ulteriore dolore se blocca troppe transazioni. In tal caso, l'accesso a Firebird può rallentare notevolmente mentre attraversa tutte le transazioni bloccate / bloccate per determinare il valore corretto dei dati.

Ecco alcune discussioni su di esso

http: //forums.devshed. com / firebird-sql-sviluppo-61 / differenza-active-transazione-863103.html

http://www.slideshare.net/ibsurgeon/3-how-transactionswork

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top