Ce este un termen rezonabil pentru a menține un cursor SQL deschis?

În aplicațiile dvs., care este un "timp îndelungat" pentru a păstra o tranzacție deschisă înainte de a comite sau de a reveni? Minute? Secunde? Ore?

și pe ce bază de date?

0
fr hi bn

5 răspunsuri

tranzacții: minute.

Cursoare: maximum 0 secunde, dacă folosiți un cursor, vă declanșăm.

Nu este ridicol atunci când considerăm că suntem într-un mediu web de înaltă disponibilitate, care trebuie să ruleze serverul SQL, și nu permitem nici macar procs stocate din cauza incapacității de a le corecta versiunea și de a le întreține. Dacă am folosi oracolul, poate.

0
adăugat
Se pare că problema dvs. este că executați SQLServer.
adăugat autor Crashworks, sursa

Probabil că voi fi în flăcări pentru acest lucru, dar ar trebui să încercați să evitați utilizarea cursorilor, deoarece aceștia suferă o lovitură serioasă de performanță. Dacă trebuie să-l utilizați, ar trebui să-l păstrați deschis cât mai puțin posibil, astfel încât să eliberați resursele care sunt blocate de cursor ASAP.

0
adăugat

@ ninesided: problemele de performanță deoparte, este de asemenea despre utilizarea instrumentului potrivit pentru job. Având în vedere alegerea de a muta cursorul din interogarea dvs. în cod, aș crede că 99 de ori din 100 ar fi mai bine să puneți acea logică de looping într-un fel de cod gestionat. Acest lucru vă permite să obțineți avantajele utilizării unui depanator, să compilați verificarea erorilor de timp, să introduceți un tip de siguranță etc.

Răspunsul meu la întrebare este același, dacă utilizați un cursor, închideți-l cât mai repede, în oracol aș încerca, de asemenea, să folosesc cursoare explicite.

0
adăugat

@lomaxx, @ChanChan: la cele mai bune cursoarele mele de cunoștințe sunt doar o problemă pe SQL Server și Sybase (variante T-SQL). Dacă baza de date aleasă este Oracle, cursorii sunt prietenul tău. Am văzut o serie de cazuri în care utilizarea cursorilor a îmbunătățit de fapt performanța. Cursorii sunt un mecanism incredibil de util și sunt de acord, spunând că lucrurile precum "dacă folosiți un cursor pe care vi-l tragem" este puțin cam ridicol.

După ce ați spus acest lucru, doriți doar să păstrați un cursor deschis pentru minimul absolut necesar. Specificarea unui timp maxim ar fi arbitrar și inutil fără a înțelege domeniul problemei.

0
adăugat

În general, sunt de acord cu celelalte răspunsuri: Evitați cursoarele când este posibil (în majoritatea cazurilor) și închideți-le cât mai repede posibil.

Totuși: Totul depinde de mediul în care lucrați.

  • Dacă este un mediu web de producție cu o mulțime de utilizatori, asigurați-vă că cursorul dispare înainte ca cineva să primească un timp de expirare.
  • Dacă, de exemplu, scrieți un "jurnal de analiză a procedurii stocate" (sau orice altceva) pe o mașină proprietară care nu face nimic altceva: nu ezitați să faceți ce vreți să faceți. Veți fi singura persoană care trebuie să aștepte. Nu este ca și cum serverul bazei de date va muri pentru că utilizați cursoare. Ar trebui să luați în considerare, totuși, că poate comportamentul de utilizare se va schimba în timp și la un moment dat ar putea fi 10 persoane care utilizează acea aplicație. Încercați să găsiți o altă cale;)
0
adăugat