OVH Cloud OVH Cloud

acces concurrent à une table volumineuse

2 réponses
Avatar
jpayenneville
Bonjour,

J'ai un probl=E8me d'acc=E8s concurrent =E0 une table volumineuse.

Elle marche comme une table de Log, on va dire. D'un cot=E9 il y a un
processus qui INSERT et de l'autre il y a un processus qui DELETE pour
=E9purer de vieux enregistrements.

Comme la table est volumineuse la table est lock=E9 le temps de faire la
suppression des enregistrements. Du coup, on ne peut plus ins=E9rer. Ce
qui perturbe la production chez nous.

Quels sont les solutions pour r=E9soudre cette forme de blocage ?

Merci pour vos suggestions.

Cfg : Sql server 2005

2 réponses

Avatar
Sylvain Lafontaine
J'imagine que la table est lockée par SQL-Server parce que vous essayez de
faire la suppression de tous les enregistrements dans une seule transaction.
Vous devriez essayer d'y aller étape par étape; c'est-à-dire un
enregistrement ou un groupe d'enregistrements à la fois; de façon à éviter
l'escalation des locks. Comme il s'agit de suppression d'enregistrements
devenus inutiles, le temps que cela prend ne devrait pas être vraiment
important.

Dans ce cas précis, l'utilisation d'un index en cluster pourrait également
être utile car il pourrait permettre l'utilisation de "range lock";
cependant j'ai des trous de mémoire à ce sujet là.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


wrote in message
news:
Bonjour,

J'ai un problème d'accès concurrent à une table volumineuse.

Elle marche comme une table de Log, on va dire. D'un coté il y a un
processus qui INSERT et de l'autre il y a un processus qui DELETE pour
épurer de vieux enregistrements.

Comme la table est volumineuse la table est locké le temps de faire la
suppression des enregistrements. Du coup, on ne peut plus insérer. Ce
qui perturbe la production chez nous.

Quels sont les solutions pour résoudre cette forme de blocage ?

Merci pour vos suggestions.

Cfg : Sql server 2005
Avatar
Fred BROUARD
a écrit :
Bonjour,

J'ai un problème d'accès concurrent à une table volumineuse.

Elle marche comme une table de Log, on va dire. D'un coté il y a un
processus qui INSERT et de l'autre il y a un processus qui DELETE pour
épurer de vieux enregistrements.

Comme la table est volumineuse la table est locké le temps de faire la
suppression des enregistrements. Du coup, on ne peut plus insérer. Ce
qui perturbe la production chez nous.

Quels sont les solutions pour résoudre cette forme de blocage ?



Faire un DELETE en exigeant que le verrou soit posé par ligne
DELETE FROM laTAable WITH (ROWLOCK)

Cela sera plus long mais moins bloquant.

Si un index est posé sur la colonne qui sert d'horodatage alors
spécifier un tag d'index comme suit :
DELETE FROM laTAable WITH (INDEX X_HORODATAGE)
Cela ira plus vite !

A +



Merci pour vos suggestions.

Cfg : Sql server 2005




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************