bonjour,
J'ai une application fourni par un editeur qui fonctionne en windows 2000 et
sqlserver 200.
Lorsque les utilisateurs font des select l'application verrouille toute la
table et bloque les autres utilisateurs.
Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau
ligne par exemple ).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian Robert
Bonjour,
Les problèmes de verrous arrivent fréquement, la version 2005 permet d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
Petite explication pour votre cas.
Un utilisateur qui effectue un SELECT vérouille les données des tables (au niveau enregistrement ou page) pendant la durée d'execution. Cependant il s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque) la table complète.
Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures (SELECT) attendre la fin de celui-ci.
Pour éviter ce genre de situation, appliquez ces quelques conseils : - Les mises à jours doivent être courtes et ne concerner que très peu d'enregistrements - Les transactions, doivent elles aussi être les plus courtes possibles. - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et REPEATABLE_READ quand celà n'est pas nécessaire
Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de la requête pour ne vérouiller que des enregistrements. Cependant cette méthode désactive la gestion dynamique des vérrous par SQL Server pour cette requête et risque de générer une surcharge de travail pour le serveur, d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
D'autres solutions plus complexes existent aussi...
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"phil" a écrit :
bonjour, J'ai une application fourni par un editeur qui fonctionne en windows 2000 et sqlserver 200. Lorsque les utilisateurs font des select l'application verrouille toute la table et bloque les autres utilisateurs. Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau ligne par exemple ).
Bonjour,
Les problèmes de verrous arrivent fréquement, la version 2005 permet
d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
Petite explication pour votre cas.
Un utilisateur qui effectue un SELECT vérouille les données des tables (au
niveau enregistrement ou page) pendant la durée d'execution. Cependant il
s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent
faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque)
la table complète.
Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs
utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser
une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à
jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour
s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures
(SELECT) attendre la fin de celui-ci.
Pour éviter ce genre de situation, appliquez ces quelques conseils :
- Les mises à jours doivent être courtes et ne concerner que très peu
d'enregistrements
- Les transactions, doivent elles aussi être les plus courtes possibles.
- Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et
REPEATABLE_READ quand celà n'est pas nécessaire
Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de
la requête pour ne vérouiller que des enregistrements. Cependant cette
méthode désactive la gestion dynamique des vérrous par SQL Server pour cette
requête et risque de générer une surcharge de travail pour le serveur,
d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
D'autres solutions plus complexes existent aussi...
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005
"phil" a écrit :
bonjour,
J'ai une application fourni par un editeur qui fonctionne en windows 2000 et
sqlserver 200.
Lorsque les utilisateurs font des select l'application verrouille toute la
table et bloque les autres utilisateurs.
Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau
ligne par exemple ).
Les problèmes de verrous arrivent fréquement, la version 2005 permet d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
Petite explication pour votre cas.
Un utilisateur qui effectue un SELECT vérouille les données des tables (au niveau enregistrement ou page) pendant la durée d'execution. Cependant il s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque) la table complète.
Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures (SELECT) attendre la fin de celui-ci.
Pour éviter ce genre de situation, appliquez ces quelques conseils : - Les mises à jours doivent être courtes et ne concerner que très peu d'enregistrements - Les transactions, doivent elles aussi être les plus courtes possibles. - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et REPEATABLE_READ quand celà n'est pas nécessaire
Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de la requête pour ne vérouiller que des enregistrements. Cependant cette méthode désactive la gestion dynamique des vérrous par SQL Server pour cette requête et risque de générer une surcharge de travail pour le serveur, d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
D'autres solutions plus complexes existent aussi...
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"phil" a écrit :
bonjour, J'ai une application fourni par un editeur qui fonctionne en windows 2000 et sqlserver 200. Lorsque les utilisateurs font des select l'application verrouille toute la table et bloque les autres utilisateurs. Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau ligne par exemple ).
phil
peut on pas modifier ûn paramètre tel que le niveau d'isolation au niveau de la base pour ne plus avoir de verrouillage table ?
"Christian Robert" a écrit :
Bonjour,
Les problèmes de verrous arrivent fréquement, la version 2005 permet d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
Petite explication pour votre cas.
Un utilisateur qui effectue un SELECT vérouille les données des tables (au niveau enregistrement ou page) pendant la durée d'execution. Cependant il s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque) la table complète.
Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures (SELECT) attendre la fin de celui-ci.
Pour éviter ce genre de situation, appliquez ces quelques conseils : - Les mises à jours doivent être courtes et ne concerner que très peu d'enregistrements - Les transactions, doivent elles aussi être les plus courtes possibles. - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et REPEATABLE_READ quand celà n'est pas nécessaire
Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de la requête pour ne vérouiller que des enregistrements. Cependant cette méthode désactive la gestion dynamique des vérrous par SQL Server pour cette requête et risque de générer une surcharge de travail pour le serveur, d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
D'autres solutions plus complexes existent aussi...
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"phil" a écrit :
> bonjour, > J'ai une application fourni par un editeur qui fonctionne en windows 2000 et > sqlserver 200. > Lorsque les utilisateurs font des select l'application verrouille toute la > table et bloque les autres utilisateurs. > Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau > ligne par exemple ).
peut on pas modifier ûn paramètre tel que le niveau d'isolation au niveau de
la base pour ne plus avoir de verrouillage table ?
"Christian Robert" a écrit :
Bonjour,
Les problèmes de verrous arrivent fréquement, la version 2005 permet
d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
Petite explication pour votre cas.
Un utilisateur qui effectue un SELECT vérouille les données des tables (au
niveau enregistrement ou page) pendant la durée d'execution. Cependant il
s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent
faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque)
la table complète.
Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs
utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser
une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à
jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour
s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures
(SELECT) attendre la fin de celui-ci.
Pour éviter ce genre de situation, appliquez ces quelques conseils :
- Les mises à jours doivent être courtes et ne concerner que très peu
d'enregistrements
- Les transactions, doivent elles aussi être les plus courtes possibles.
- Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et
REPEATABLE_READ quand celà n'est pas nécessaire
Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de
la requête pour ne vérouiller que des enregistrements. Cependant cette
méthode désactive la gestion dynamique des vérrous par SQL Server pour cette
requête et risque de générer une surcharge de travail pour le serveur,
d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
D'autres solutions plus complexes existent aussi...
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005
"phil" a écrit :
> bonjour,
> J'ai une application fourni par un editeur qui fonctionne en windows 2000 et
> sqlserver 200.
> Lorsque les utilisateurs font des select l'application verrouille toute la
> table et bloque les autres utilisateurs.
> Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau
> ligne par exemple ).
peut on pas modifier ûn paramètre tel que le niveau d'isolation au niveau de la base pour ne plus avoir de verrouillage table ?
"Christian Robert" a écrit :
Bonjour,
Les problèmes de verrous arrivent fréquement, la version 2005 permet d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
Petite explication pour votre cas.
Un utilisateur qui effectue un SELECT vérouille les données des tables (au niveau enregistrement ou page) pendant la durée d'execution. Cependant il s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque) la table complète.
Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures (SELECT) attendre la fin de celui-ci.
Pour éviter ce genre de situation, appliquez ces quelques conseils : - Les mises à jours doivent être courtes et ne concerner que très peu d'enregistrements - Les transactions, doivent elles aussi être les plus courtes possibles. - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et REPEATABLE_READ quand celà n'est pas nécessaire
Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de la requête pour ne vérouiller que des enregistrements. Cependant cette méthode désactive la gestion dynamique des vérrous par SQL Server pour cette requête et risque de générer une surcharge de travail pour le serveur, d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
D'autres solutions plus complexes existent aussi...
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"phil" a écrit :
> bonjour, > J'ai une application fourni par un editeur qui fonctionne en windows 2000 et > sqlserver 200. > Lorsque les utilisateurs font des select l'application verrouille toute la > table et bloque les autres utilisateurs. > Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau > ligne par exemple ).
Christian Robert
L'option ROWLOCK c'est uniquement au niveau de la requête (en fait de la table pour être exact).
Les niveau d'isolation, se définissent au niveau de la connexion... Par contre il ne définissent pas si le vérouillage se fait au niveau de l'enregistrement ou non.
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"phil" a écrit :
peut on pas modifier ûn paramètre tel que le niveau d'isolation au niveau de la base pour ne plus avoir de verrouillage table ?
"Christian Robert" a écrit :
> Bonjour, > > Les problèmes de verrous arrivent fréquement, la version 2005 permet > d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT. > > Petite explication pour votre cas. > > Un utilisateur qui effectue un SELECT vérouille les données des tables (au > niveau enregistrement ou page) pendant la durée d'execution. Cependant il > s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent > faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque) > la table complète. > > Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs > utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser > une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à > jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour > s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures > (SELECT) attendre la fin de celui-ci. > > Pour éviter ce genre de situation, appliquez ces quelques conseils : > - Les mises à jours doivent être courtes et ne concerner que très peu > d'enregistrements > - Les transactions, doivent elles aussi être les plus courtes possibles. > - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et > REPEATABLE_READ quand celà n'est pas nécessaire > > Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de > la requête pour ne vérouiller que des enregistrements. Cependant cette > méthode désactive la gestion dynamique des vérrous par SQL Server pour cette > requête et risque de générer une surcharge de travail pour le serveur, > d'autant que celui-ci sais gérer les verrous au niveau enregistrement. > > D'autres solutions plus complexes existent aussi... > > -- > Cordialement > > Christian Robert > Consultant - Formateur chez Winwise > MCT - MCDBA - MCSD > MCTS & MCITP SQL Server 2005 > > > "phil" a écrit : > > > bonjour, > > J'ai une application fourni par un editeur qui fonctionne en windows 2000 et > > sqlserver 200. > > Lorsque les utilisateurs font des select l'application verrouille toute la > > table et bloque les autres utilisateurs. > > Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau > > ligne par exemple ).
L'option ROWLOCK c'est uniquement au niveau de la requête (en fait de la
table pour être exact).
Les niveau d'isolation, se définissent au niveau de la connexion... Par
contre il ne définissent pas si le vérouillage se fait au niveau de
l'enregistrement ou non.
--
Cordialement
Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005
"phil" a écrit :
peut on pas modifier ûn paramètre tel que le niveau d'isolation au niveau de
la base pour ne plus avoir de verrouillage table ?
"Christian Robert" a écrit :
> Bonjour,
>
> Les problèmes de verrous arrivent fréquement, la version 2005 permet
> d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT.
>
> Petite explication pour votre cas.
>
> Un utilisateur qui effectue un SELECT vérouille les données des tables (au
> niveau enregistrement ou page) pendant la durée d'execution. Cependant il
> s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent
> faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque)
> la table complète.
>
> Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs
> utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser
> une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à
> jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour
> s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures
> (SELECT) attendre la fin de celui-ci.
>
> Pour éviter ce genre de situation, appliquez ces quelques conseils :
> - Les mises à jours doivent être courtes et ne concerner que très peu
> d'enregistrements
> - Les transactions, doivent elles aussi être les plus courtes possibles.
> - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et
> REPEATABLE_READ quand celà n'est pas nécessaire
>
> Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de
> la requête pour ne vérouiller que des enregistrements. Cependant cette
> méthode désactive la gestion dynamique des vérrous par SQL Server pour cette
> requête et risque de générer une surcharge de travail pour le serveur,
> d'autant que celui-ci sais gérer les verrous au niveau enregistrement.
>
> D'autres solutions plus complexes existent aussi...
>
> --
> Cordialement
>
> Christian Robert
> Consultant - Formateur chez Winwise
> MCT - MCDBA - MCSD
> MCTS & MCITP SQL Server 2005
>
>
> "phil" a écrit :
>
> > bonjour,
> > J'ai une application fourni par un editeur qui fonctionne en windows 2000 et
> > sqlserver 200.
> > Lorsque les utilisateurs font des select l'application verrouille toute la
> > table et bloque les autres utilisateurs.
> > Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau
> > ligne par exemple ).
L'option ROWLOCK c'est uniquement au niveau de la requête (en fait de la table pour être exact).
Les niveau d'isolation, se définissent au niveau de la connexion... Par contre il ne définissent pas si le vérouillage se fait au niveau de l'enregistrement ou non.
-- Cordialement
Christian Robert Consultant - Formateur chez Winwise MCT - MCDBA - MCSD MCTS & MCITP SQL Server 2005
"phil" a écrit :
peut on pas modifier ûn paramètre tel que le niveau d'isolation au niveau de la base pour ne plus avoir de verrouillage table ?
"Christian Robert" a écrit :
> Bonjour, > > Les problèmes de verrous arrivent fréquement, la version 2005 permet > d'améliorer légèrement les choses avec les modes d'isolation SNAPSHOT. > > Petite explication pour votre cas. > > Un utilisateur qui effectue un SELECT vérouille les données des tables (au > niveau enregistrement ou page) pendant la durée d'execution. Cependant il > s'agit d'un verrou partagé, c'est à dire que plusieurs utilisateurs peuvent > faire simultanément des SELECT, de plus on ne vérouille jamais (ou presque) > la table complète. > > Les problèmes de vérouillages arrivent quand vous avez un ou plusieurs > utilisateurs qui effectuent des SELECT, et un utilisateur souhaitant réaliser > une mise à jour. Les verrous partagés (des SELECT) empechent toute mise à > jour tant qu'ils existent. Donc l'update doit attendre la fin des SELECT pour > s'executer. De même si un utilisateur effectue un UPDATE, tous les lectures > (SELECT) attendre la fin de celui-ci. > > Pour éviter ce genre de situation, appliquez ces quelques conseils : > - Les mises à jours doivent être courtes et ne concerner que très peu > d'enregistrements > - Les transactions, doivent elles aussi être les plus courtes possibles. > - Evitez les niveau d'isolation de transaction tel que SERIALIZABLE et > REPEATABLE_READ quand celà n'est pas nécessaire > > Vous pouvez aussi comme vous l'indiquiez utiliser WITH(ROWLOCK) au niveau de > la requête pour ne vérouiller que des enregistrements. Cependant cette > méthode désactive la gestion dynamique des vérrous par SQL Server pour cette > requête et risque de générer une surcharge de travail pour le serveur, > d'autant que celui-ci sais gérer les verrous au niveau enregistrement. > > D'autres solutions plus complexes existent aussi... > > -- > Cordialement > > Christian Robert > Consultant - Formateur chez Winwise > MCT - MCDBA - MCSD > MCTS & MCITP SQL Server 2005 > > > "phil" a écrit : > > > bonjour, > > J'ai une application fourni par un editeur qui fonctionne en windows 2000 et > > sqlserver 200. > > Lorsque les utilisateurs font des select l'application verrouille toute la > > table et bloque les autres utilisateurs. > > Comment puis je faire pour changer le niveau deveouillage ( verrou au niveau > > ligne par exemple ).