Quelle est la durée « raisonnable » pour garder un curseur SQL ouvert ?

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

  •  08-06-2019
  •  | 
  •  

Question

Dans vos applications, qu'est-ce qu'un « long délai » pour maintenir une transaction ouverte avant de la valider ou de l'annuler ?Minutes?Secondes ?Heures?

et sur quelle base de données ?

Était-ce utile?

La solution

@lomaxx, @ChanChan :à ma connaissance, les curseurs ne posent problème que sur SQL Server et Sybase (variantes T-SQL).Si votre base de données de prédilection est Oracle, alors les curseurs sont vos amis.J'ai vu un certain nombre de cas où l'utilisation de curseurs a réellement amélioré les performances.Les curseurs sont un mécanisme incroyablement utile et, à vrai dire, dire des choses comme "si vous utilisez un curseur, nous vous virons" est un peu ridicule.

Cela dit, vous souhaitez uniquement garder un curseur ouvert pour le minimum absolu requis.Spécifier une durée maximale serait arbitraire et inutile sans comprendre le domaine du problème.

Autres conseils

Je vais probablement être critiqué pour cela, mais vous devriez vraiment essayer d'éviter d'utiliser des curseurs car ils entraînent de graves problèmes de performances.Si vous devez l'utiliser, vous devez le garder ouvert le minimum absolu de temps possible afin de libérer les ressources bloquées par le curseur dès que possible.

transactions:minutes.

Curseurs :0 secondes maximum, si vous utilisez un curseur nous vous virons.

Ce n'est pas ridicule si l'on considère que nous sommes dans un environnement Web à haute disponibilité, qui doit exécuter un serveur SQL, et nous n'autorisons même pas les processus stockés en raison de l'incapacité de les versionner et de les maintenir avec précision.Si nous utilisions Oracle, peut-être.

En général, je suis d'accord avec les autres réponses :Évitez les curseurs lorsque cela est possible (dans la plupart des cas) et fermez-les le plus rapidement possible.

Cependant:Tout dépend de l'environnement dans lequel vous travaillez.

  • S'il s'agit d'un environnement de site Web de production avec de nombreux utilisateurs, assurez-vous que le curseur disparaît avant que quelqu'un n'obtienne un délai d'attente.
  • Si vous écrivez - par exemple - une "procédure stockée d'analyse de journal" (ou autre) sur une machine propriétaire qui ne fait rien d'autre :n'hésitez pas à faire ce que vous voulez.Vous serez la seule personne à devoir attendre.Ce n'est pas comme si le serveur de base de données allait mourir parce que vous utilisez des curseurs.Vous devez cependant considérer que le comportement d’utilisation changera peut-être avec le temps et qu’à un moment donné, 10 personnes pourraient utiliser cette application.Alors essaie de trouver un autre moyen ;)

@nineside :Mis à part les problèmes de performances, il s'agit également d'utiliser le bon outil pour le travail.Étant donné le choix de déplacer le curseur de votre requête vers le code, je pense que 99 fois sur 100, il serait préférable de mettre cette logique de boucle dans une sorte de code géré.Cela vous permet de bénéficier des avantages de l'utilisation d'un débogueur, de la vérification des erreurs au moment de la compilation, de la sécurité du type, etc.

Ma réponse à la question est toujours la même, si vous utilisez un curseur, fermez-le dès que possible, dans Oracle, j'essaierais également d'utiliser des curseurs explicites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top