IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[TOUS] Isolation des transactions : Optimisation


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 224
    Par défaut [TOUS] Isolation des transactions : Optimisation
    Bonjour,


    Nous utilisons Sql Server avec des pages asp.net (dans le cadre d'accès multi-utilisateur).
    Nous encapsulons toutes les requêtes contenues dans une page dans une transaction READ.COMMITED.
    En cas d'erreur dans une des requêtes, un rollback est effectué.

    Parfois une page peut mettre plusieurs minutes à se charger.

    Pendant toute la durée de la transaction (qui peut durée plusieurs minutes voire plus rarement + d'une heure), des verrous sont ils posés sur les lignes retournées par les requêtes SELECT, tout comme pour les requêtes INSERT/UPDATE ?

    Si oui, je pense que les verrous sur les requêtes SELECT sont inutiles et que donc, on pourrait diminuer l'isolation de ces requêtes SELECT, via l'option snapshot ON de READCOMMITED.
    (Cela augmenterait nos performances qui deviennent critiques).

    J'aurai besoin de l'avis de personnes plus expertes dans ce domaine..
    Mais aussi tous conseils de personnes aussi avisés que moi seront les bienvenus..

    D'avance merci beaucoup..



    ---
    P.S. : si des verrous sont posés sur les requêtes SELECT; dans le cas d'une longue transaction, si une autre transaction tente d'accèder aux même données, elle sera obligé d'attendre la fin de la première transaction, et dans ce cas, sa page ne pourra s'afficher que lorsque la première transaction sera terminée..
    Or j'ai testé, et ça ne le fais pas : j'arrive à afficher rapidement une page qui accède aux mêmes données qu'une autre page que j'ai lancé avant et dont la transaction dure très longtemps (qui n'est pas terminée alors que ma deuxième page (lancée en deuxième) a pu s'afficher avant).

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    En niveau d'isolation READ COMMITTED, les verrous partagés posés pour un SELECT ne sont pas maintenus durant la durée de la transaction, seulement le temps de l'instruction.

    Pour quelle raison maintiens-tu une transaction durant l'exécution de la page ASP, est-ce vraiment nécessaire ? Ceci dit, une exécution de plusieurs minutes, c'est très long, il y aurait vraiment de l'amélioration de performance à affectuer.

    Peux-tu nous dire pourquoi tu fais des transactions, et quelles sont, en gros les opérations effectuées ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 224
    Par défaut
    Bonjour Rudib,

    merci pour votre réponse.

    Nous avons opté pour une transaction dans la durée de vie d'une page, car cela nous facilite le code (on ne gère pas les transactions car elles se gèrent toutes seules dans le page_init et le page_unload [pour faire simple])

    Pendant toute la durée d'une page, on a
    - des lecture/ajout/modification via des formulaires html de saisies.
    - des lectures pour l'affichage de données en tableaux
    - des lectures pour des parcourts d'arbres etc.. (les traitements peuvent être assez long voire très long en fonction des données que l'utilisateur demande). Sur le parcourt d'arbre on a effectivement qulques optimisation qu'on peut faire (nombre de requêtes etc..)

    Pour le fait qu'on maintient la transaction sur toute la page, cela est plus sécurisant pour le programmeur (il est déjà dans une transaction, aucun risque pour l'intégrité des données).

    Par contre nous réfléchissons au fait de diminuer l'isolation de la transaction en cours de transaction (j'ai vu que c'est possible dans la msdn).
    Et dans ce cas, nous cherchons à savoir quelles sont les pages ou bien à quel endroit de la page on peut le faire.. A priori j'aurai dis les SELECT mais comme vous me dîtes que les verrous sur les SELECT ne sont maintenus que le temps de l'instruction, alors ce n'est pas la peine.. et donc on est déjà optimisé au mieux..

    qu'en pensez vous ?

    (merci)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 224
    Par défaut
    Connaissez vous le lien sur la doc MSDN qui explique comment sont traités les verrous sur les différents SELECT/INSERT/UPDATE d'un READ COMMITED ?

    Pour les INSERT et UPDATE, le verrou est bien maintenu durant toute la transaction ? (enfin j'espère)

    (merci)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 224
    Par défaut
    Dernière remarque :

    Sachant que Read.Commited est une isolation qui a pour but de prévenir les "lectures incorrectes",

    Si dans un read.Commited, les verrous ne sont maintenus que le temps de l'instruction, alors on a des possibilités de "lectures incorrectes" si une transaction concurrente modifie une donnée de l'arbre (qu'on est en train de parcourir récursivement via plusieurs SELECT séparés dans le temps) ?

    ce ne sont pas des lectures incorrectes d'une seule ligne , mais une lecture incorrecte global de tout l'arbre récupéré....

    J'espère ne pas trop vous embrouiller

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bon, le READ COMMITTED permet de garantir des lectures propres, cad qu'il prévient la lecture de lignes qui sont en train d'être modifiées, donc la lecture exactement en même temps que l'exécution d'un UPDATE.
    Si l'UPDATE est dans une transaction, la lecture à partir d'une autre session devra attendre la fin de la transaction ...
    Chez vous, ça peut faire pas mal de temps.

    Franchement, faire systématiquement des longues transactions va tuer vos performances, pour la raison expliquée ci-dessus. Il faudrait vraiment réfléchir à l'utilité de ça ...

    Pour les SELECT, tu peux les faire en READ UNCOMMITTED ( WITH (NOLOCK) ), qui n'honore pas les verrous exclusifs. En d'autres terme, permet les lectures sales.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Framework] Spring AOP et isolation des transactions
    Par HadanMarv dans le forum Spring
    Réponses: 3
    Dernier message: 16/07/2013, 16h02
  2. Isolation des transactions avec Hibernate
    Par Gob4 dans le forum Hibernate
    Réponses: 0
    Dernier message: 14/03/2013, 11h48
  3. Gestion des transactions et isolation
    Par SQLpro dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/01/2011, 11h46
  4. [EF] Niveau d'isolation des transactions
    Par stephane.julien dans le forum Accès aux données
    Réponses: 2
    Dernier message: 25/03/2009, 10h49
  5. Niveau isolement des transactions
    Par lio33 dans le forum Débuter
    Réponses: 4
    Dernier message: 23/11/2005, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo