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 :

snapshot en lecture ?


Sujet :

MS SQL Server

  1. #1
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut snapshot en lecture ?
    Bonjour,


    Un bout de la question dépend peut etre d'ADO.net, mais ca me semblait plus logique de venir là, vous me direz si je me trompe ...

    Depuis un programme .net nous ouvrons une connexion, exécutons un select, lisons 3 lignes, faisons pause

    puis on ouvre une autre connexion, on démarre une transaction, on delete la table, puis on dépause la 1ère connexion

    et là moi je trouve ca surprenant mais on arrive encore à lire des lignes ... et je ne pense pas avoir activé de snapshot quelquepart ...

    le delete a pu se finir, nous laissons la connexion ouverte sans commit ou rollback, pensant vérrouiller la table
    et le select est fait après un SET ISOLATION LEVEL READ COMMITTED

    si on tente d'exécuter la requete après le delete on a bien un timeout à cause du verrouillage

    l'origine de ce test c'est qu'on sait que le positionnement à la ligne suivante peut planter s'il y verrouillage par une autre connexion, ca nous est déjà arrivé à priori et on veut voir ce qui se passe en détail ...
    avec ado.net sur le select c'est executereader pour exécuter puis un while .read pour lire chaque ligne

    Merci de m'éclairer sur ce sujet
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  2. #2
    Expert confirmé
    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
    Points : 4 043
    Points
    4 043
    Par défaut
    Je ne sais pas si j'ai tout bien compris à ta situation, mais si tu fais un SELECT, que tu récupères un dataset, ou autre, et que tu le parcours dans ton code .NET, le jeu de résultat est manipulé en local et n'est plus requêté, donc tu peux toujours accéder à tes lignes, puisqu'il s'agit d'un jeu de résultats local.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pas un dataset non, je lis les lignes avec un sqldatareader, en forward only
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert confirmé
    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
    Points : 4 043
    Points
    4 043
    Par défaut
    Hum, avec un curseur côté serveur ou client ? Je ne suis pas très au clair avec ça. Selon John Papa c'est du connecté.
    http://msdn.microsoft.com/en-us/magazine/cc188717.aspx

    qu'est-ce que tu vois dans le profiler pendant que tu boucles dans la sqldatareader ? des sp_cursorfetch ? http://msdn.microsoft.com/fr-fr/library/ff848736.aspx
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je viens de regarder dans profiler, j'ai coché tout ce qu'il y avait dans cursor et rien n'apparait
    je vais souvent des traces en cochant stmtstarting/completed /rpc /batch et je n'ai jamais vu de sp_cursorfetch au milieu du reste

    le datareader c'est bien du connecté en théorie, par contre je ne pense pas qu'il rapatrie les données avant qu'on commence à lire les données, car l'executereader peut prendre 5ms alors que la boucle sur datareader.read qui positionne sur la prochaine ligne peut prendre des secondes
    et donc je pense bien que c'est un curseur

    dans le meilleur des cas je vois bien un snapshot côté serveur, mais je ne vois aucun paramètre qui irait en ce sens

    de plus comme dit précédemment nous avons déjà eut une erreur d'exécution sur le .read, ce qui nous a fait pensé qu'il y avait un verrou par une autre connexion, bienqu'on pensait aussi qu'sql serveur ayant exécuté la requete select il aurait mis des intentions de verrous partagé en lecture
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Expert confirmé
    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
    Points : 4 043
    Points
    4 043
    Par défaut
    Si, il est clair que quand tu exécutes ton reader, il exécute le SELECT. Ensuite, il peut fetcher un curseur coté serveur en utilisant le sp_cursorfetch. Le langage SQL est ensembliste, il n'y a pas d'appel individuel à des lignes d'une table pendant que tu tournes une boucle du côté du client. Donc si tu ne vois pas de fetch au niveau du serveur, il devrait utiliser un curseur côté client.

    Par contre ce que tu dis sur la latence sur le MoveNext de ta boucle est troublant. Si tu le fais en pas à pas et que tu regardes ce qui se passe sur le serveur avec le profiler, qu'est-ce qui se passe en terme de requête SQL sur le MoveNext ?
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par rudib Voir le message
    Par contre ce que tu dis sur la latence sur le MoveNext de ta boucle est troublant. Si tu le fais en pas à pas et que tu regardes ce qui se passe sur le serveur avec le profiler, qu'est-ce qui se passe en terme de requête SQL sur le MoveNext ?
    j'aurais tendance à dire rien du tout vu que je n'ai rien vu passé tout à l'heure ni avant

    après je ne sais pas s'il y a vraiment une latence sur le next, mais il y a aussi une latence sur le getvalues qui récupère les valeurs de la ligne
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [2008] Création d'un compte en lecture seule sur une base snapshot
    Par scazikiss dans le forum Administration
    Réponses: 12
    Dernier message: 26/03/2013, 15h46
  2. Snapshot en lecture seule
    Par fatati dans le forum SQL
    Réponses: 1
    Dernier message: 30/10/2008, 14h29
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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