acces concurrent à une table volumineuse

Le
jpayenneville
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain Lafontaine
Le #11878271
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)


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
Fred BROUARD
Le #11878251
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 *************************
Publicité
Poster une réponse
Anonyme