Ciò che è “ragionevole” durata del periodo di tempo per mantenere un cursore SQL aperto?

StackOverflow https://stackoverflow.com/questions/10727

  •  08-06-2019
  •  | 
  •  

Domanda

Nelle applicazioni, che cosa è un "tempo" per mantenere una transazione aperta prima di fare il commit o il rollback?Minuti?Secondi?Ore?

e che i database?

È stato utile?

Soluzione

@lomaxx, @ChanChan:al meglio della mia conoscenza dei cursori è solo un problema di SQL Server e Sybase (T-SQL e varianti).Se il database di scelta è Oracle, poi i cursori sono il tuo amico.Ho visto un certo numero di casi in cui l'uso di cursori ha effettivamente migliorato le prestazioni.I cursori sono un modo incredibilmente utile meccanismo e tbh, dicendo cose come "se si utilizza un cursore abbiamo il fuoco" è un po ' ridicolo.

Detto questo, si vuole solo mantenere un cursore aperto per il minimo assoluto che è richiesto.Specificare un tempo massimo sarebbe arbitraria e inutile senza la comprensione del dominio del problema.

Altri suggerimenti

Sono probabilmente andando a ottenere fiammato per questo, ma in realtà si dovrebbe cercare di evitare l'uso di cursori come si incorrere in un grave calo di prestazioni.Se è necessario l'uso di esso, si dovrebbe tenere aperto il minimo tempo possibile in modo da liberare le risorse bloccate dal cursore al più presto.

operazioni:minuti.

I cursori:0seconds massimo, se si utilizza un cursore abbiamo il fuoco.

Questo non è ridicolo se si considera che siamo in una elevata disponibilità di un ambiente web, che ha per l'esecuzione di sql server, e non abbiamo nemmeno permettere stored procedure a causa della incapacità di preciso la versione e mantenere la loro.Se si utilizza oracle forse.

In generale sono d'accordo con le altre risposte:Evitare di cursori, quando possibile (nella maggior parte dei casi) e chiudere il più velocemente possibile.

Tuttavia:Tutto dipende dall'ambiente in cui si lavora.

  • Se si tratta di una produzione in ambiente web con un sacco di utenti, assicurarsi che il cursore va via prima che qualcuno ottiene un timeout.
  • Se sei ad esempio, la scrittura di un "registro di analisi stored procedure" (o quello che è) di un proprietario della macchina che non fa altro:sentitevi liberi di fare ciò che si vuole fare.Sarai l'unica persona che deve aspettare.Non è come se il server di database è andando a morire perché si utilizzano i cursori.Si dovrebbe considerare, però, che forse l'utilizzo di comportamento cambierà nel corso del tempo e a un certo punto ci potrebbe essere di 10 persone che utilizzano l'applicazione.Quindi cercate di trovare un altro modo ;)

@ninesided:problemi di prestazioni da parte, anche utilizzando lo strumento giusto per il lavoro.Data la scelta di spostare il cursore di una query nel codice, io penso che 99 volte su 100 sarebbe meglio mettere quella logica di loop in una sorta di codice gestito.Ciò consente di ottenere i vantaggi dell'utilizzo di un debugger, compilare errore in fase di controllo, il tipo di sicurezza etc.

La mia risposta alla domanda è ancora la stessa, se si utilizza un cursore, chiudere al più presto, in oracle vorrei anche essere cercando di utilizzare i cursori espliciti.

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