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 :

IsolationLevel dans une vue


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut IsolationLevel dans une vue
    Bonjour,

    je me permet de créer ce post car je n'ai pas trouvé de réponse dans ce forum. J'ai bien trouvé ca : http://www.developpez.net/forums/sho...napshot&page=2

    Mais ca ne réponds pas bien a ma problématique

    Donc voila mon soucis :
    J'ai une appli avec plus de 500 utilisateurs, et je suis souvent soumis a des interblocage. J'ai mis la base en isolation level Snapshot.

    Tous mes select passent par des procedures stockées. Dans mes storeproc critiques j'ai placé des :
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT
    Par contre je rencontre un petit soucis :

    j'ai une store proc qui va faire un select dans une vue. Mais la vue se bloque et il faudrait mettre l'isolation level au niveau de la vue directement.

    J'ai vu qu'il etait possible de spécifier le mode de blocage directement sur le select en faisant un :
    select * from t with(NOLOCK)
    Mais dans mon cas, ce n'est pas le mode NOLOCK que je souhaite, mais le mode snapshot.

    Je dois donc modifier ma vue avec des parametres supplémentaires, mais je ne sais pas lesquels choisir.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT
    est un paramétre de session. Inutile donc de le mettre à chaque objet, il suffit de démarrer votre connexion en laçant préalablement cet ordre SQL avant toute chose...

    Attention cepandant aux effets pervers :
    1) le niveau snapshot consomme beaucoup de ressource notamment dans la tempdb
    2) le faite que vous ayez des blocages peut être lié à une mauvaise utilisation des niveaux d'isolation, mais plus surement à un très mauvais style de développement, par exemple l'usage de curseur, des transactions inutiles et longues, le faible recours aux requêtes, une programmation lourde côté client, l'absence de procédures stockées, un usage intensif de curseurs... etc !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 40
    Par défaut
    Merci d'avoir pris le temps de me répondre

    1) le niveau snapshot consomme beaucoup de ressource notamment dans la tempdb
    Ca j'en avais une petite idée, mais c'est un risque a prendre. Il y a 2 serveur sql en mirroring (mode haute accessibilité) dédiés. Pour 500 utilisateurs c'est largement suffisent normalement

    2) le faite que vous ayez des blocages peut être lié à une mauvaise utilisation des niveaux d'isolation,
    Ca c'est fort possible. Actuellement j'utilisais aucun niveau d'isolation. J'ai été confronté a des interblocages donc je me suis dit : Chouette je vais pouvoir tester quelque chose de neuf

    mais plus surement à un très mauvais style de développement
    ,

    C'est possible, mais je pense pas que ce soit le probleme

    par exemple l'usage de curseur
    Je n'utilise les curseurs que tres rarement (dans des procédures stockées complexes uniquement). Par contre, je ne connais pas d'autre moyen pour parcourir une table que les curseurs ( coté base de données)

    des transactions inutiles et longues
    Le temps de transaction dépends du temps des requetes Je fais enorméméent de traitement coté base de données, ce qui normalement devrait diminuer la durée totale du traitement.

    le faible recours aux requêtes
    une programmation lourde côté client, l'absence de procédures stockées
    Je possede 0 Ligne de SQL dans mon code. Uniquement des appels a des procedure stockées (meme les select)
    Le seul temps de latence que ca occasionne est le temps liée a la réflexion pour remplir dynamiquement les parametres des procédures (je développe en C#)

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

Discussions similaires

  1. [SQL Server 2000] ajouter une colonne identité dans une vue?
    Par CetTer dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/08/2005, 13h43
  2. Count dans une vue
    Par gldfdp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 05h55
  3. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  4. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  5. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27

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