Frage

In Anwendungen, was eine "lange Zeit", um eine Transaktion zu öffnen, bevor ein commit oder Rollback?Minuten?Sekunden?Stunden?

und auf welche Datenbank?

War es hilfreich?

Lösung

@lomaxx, @ChanChan:nach meinem besten wissen Cursor sind nur ein problem auf SQL Server und Sybase T-SQL-Varianten).Wenn Ihre Datenbank der Wahl ist, Oracle, dann Cursor sind dein Freund.Ich habe gesehen, eine Reihe von Fällen, in denen das verwenden von Cursorn hat die Leistung tatsächlich verbessert wurde.Cursor sind ein unglaublich nützliches Instrument, und tbh, Dinge zu sagen wie "wenn Sie einen cursor, verwenden wir Feuer" ist ein wenig lächerlich.

Nachdem das gesagt ist, wollen Sie nur zu halten, eine cursor öffnet sich für das absolute minimum, das erforderlich ist.Die Angabe einer maximalen Zeit wäre willkürlich und sinnlos ohne das Verständnis der problem-Domäne.

Andere Tipps

Ich bin wahrscheinlich geflammt für diese, aber Sie sollten wirklich versuchen zu vermeiden und die Verwendung von Cursorn, wie Sie entstehen, eine ernsthafte performance-hit.Wenn Sie muss es verwenden, sollten Sie es offen halten, das absolute minimum an der Zeit möglich, so dass Sie frei zu den Ressourcen blockiert werden, indem Sie den cursor so schnell wie möglich.

Transaktionen:Minuten.

Cursor:0seconds maximal, wenn Sie einen cursor, verwenden wir Feuer Sie.

Das ist nicht lächerlich, wenn man bedenkt, wir sind eine hohe Verfügbarkeit web-Umgebung, die sql server ausgeführt, und wir werden nicht erlauben es sogar, gespeicherte Prozeduren wegen der Unmöglichkeit, genaue version und Sie zu pflegen.Wenn wir mit oracle-vielleicht.

Im Allgemeinen, ich Stimme mit den anderen Antworten:Vermeiden Sie die Cursor, wenn möglich, in den meisten Fällen), und schließen Sie Sie so schnell wie möglich.

Jedoch:Es hängt alles von der Umgebung, in der Sie arbeiten.

  • Wenn es ist eine Produktion website Umfeld mit vielen Benutzern, stellen Sie sicher, dass der cursor verschwindet, bevor jemand bekommt einen timeout.
  • Wenn Sie - zum Beispiel - schreiben eines "log-Analyse gespeicherte Prozedur" (oder was auch immer) auf eine geschützte Maschine, die nichts tut, die anderen:fühlen Sie sich frei, zu tun, was Sie tun möchten.Sie werden die einzige person, die Sie hat, zu warten.Es ist nicht so, dass der Datenbank-server wird sterben, denn Sie verwenden von Cursorn.Sie sollten überlegen, obwohl, vielleicht, dass sich das Nutzerverhalten im Laufe der Zeit verändern und irgendwann gibt es vielleicht 10 Menschen, die diese Anwendung verwenden.So versuchen Sie einen anderen Weg finden ;)

@ninesided:performance-Probleme beiseite, es geht auch darum, mit dem richtigen Werkzeug für den job.Angesichts der Wahl, bewegen Sie den cursor aus der Ihre Abfrage in code, ich würde denken, 99 times out of 100, es wäre besser, sich zu setzen, die Schleife Logik in eine Art von verwaltetem code.So können Sie die Vorteile der Verwendung eines Debuggers, compile time error checking, type saftey etc.

Meine Antwort auf die Frage-ist immer noch die gleiche, wenn Sie einen cursor schließen Sie so schnell wie möglich, in oracle würde ich auch versuchen explizite Cursor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top