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

Développement SQL Server Discussion :

Option WITH RECOMPILE et plan d'exécution d'une requête


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut Option WITH RECOMPILE et plan d'exécution d'une requête
    Bonjour,

    J'essaie de comprendre l'effet de l'option WITH RECOMPILE à la création d'une procédure stockée.

    Si j'ai bien compris, l'utilisation de cette option entraîne la recompilation automatique d'une procédure stockée.

    J'ai aussi compris que seules les parties de la procédure stockées qui présentent un changement par rapport à la première exécution( modification de valeur des paramètres ) est recompilée .

    Mais qu'en est- il des plans d'execution?
    A la première exécution, un plan d'exécution est placé dans le cache plan .Où est situé ce cache plan, en mémoire, fans un fichier particulier?

    A la recompilation, ce plan d'exécution est-il modifié?


    Pour finir, quel est l'intérêt de choisir la clause OPTION(RECOMPILE) par rapport à la clause WITH RECOMPILE?

    Merci beaucoup de votre aide sur ces points car j'ai un peu de mal avec la doc microsoft.

    Bien cordialement.

    new_wave

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Dans une routine SQL (Trigger, Procédure, UDF) il y a du code SQL (requêtes) et du code Transact SQL (procédural).
    Pour une procédure l'option WITH RECOMPILE, recompile le code TRANSACT SQL, mais pas les requêtes...
    Pour recompiler une requête sans toucher au code Transact SQL de la procédure, vous devez ajouter OPTION (RECOMPILE) en fin de requête.

    Autrement dit vous avez toutes les options possible :
    1) ne recompiler que le code procédural => WITH RECOMPILE
    2) recompiler une ou plusieurs requête(s) avec OPTION RECOMPILE
    3) tout recompiler avec WITH RECOMPILE + OPTION RECOMPILE

    CONSEIL :
    Il n'est pas toujours souhaitable de recompiler toutes les requêtes d'une procédure. Seule les requêtes complexes sont parfois intéressantes à recompiler.
    La recompilation de la procédure relance sa mise en cache

    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 éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut clause WITH RECOMPILE
    Bonjour et merci beaucoup de votre réponse.

    Pouvez vous me dire où est placé le cache plan : est ce un fichier temporaire ou est il en partie stocké en mémoire?
    Merci à vous .

    Par ailleurs, j'ai les questions suivantes relatives à l'approbation SQL Serveur à la connexion d'un utilisateur
    Si l’utilisateur du réseau est approuvé dans SQL Server, ou s’il appartient à un groupe qui est approuvé dans SQL Server, alors l’utilisateur sera connecté au serveur SQL.
    Vous indiquez dans votre cours sur la sécurité SQL Serveur

    Au niveau SGBDR SQL Server, vous avec des comptes de connexion au serveur qui peuvent être de deux sortes :

    1) un mappage de compte Windows
    C’est à dire un compte Windows enregistré dans le serveur SQL et donc autorisé à y pénétrer.
    Syntaxe minimale de création d’un mapping d’utilisateur Windows à un compte de connexion SQL :
    CREATE LOGIN <nom_utilisateur_Windows> FROM WINDOWS;
    Ce que je ne comprends pas bien c'est ceci
    un compte Windows enregistré dans le serveur SQL et donc autorisé à y pénétrer
    Quand j'utilise mon compte Windows pour me connecter à Sql serveur , comment mon compte peut il être enregistré dans Sql Serveur alors qu'il s'agit d'un compte Windows?Est ce un enregistrement qui se fait automatiquement sans que je fasse aucune opération? Si oui, pourquoi est ce fait ainsi ?

    Merci beaucoup de votre aide sur ce point.

    Par ailleurs, j'ai appris que lorsque une base de données est OFFLINE, il n'est pas possible de faire des opérations de maintenance sur cette base de données .

    Comment peut on alors procéder s'il est nécessaire de réparer cette base de données ?

    Pour finir,j'ai lu ceci à propos des extensions de base de données
    . Pour éviter de perdre de la place disque, il existe deux types d’extensions :
    • Uniforme : réservée à un seul objet.
    • Mixte : partagée par plusieurs objets, 8 au maximum.
    Lorsqu’une table est créée, les pages sont allouées dans une extension mixte. Quand les données représentent huit pages, alors des extensions uniformes sont allouées à la table.
    Pouvez vous m'expliquer la notion d'extension mixte que je n'ai pas bien comprise , notamment

    partagée par plusieurs objets, 8 au maximum.
    Cela signifie t-il que ces extensions peuvent servir à la création de plusieurs objets (8 au maximum)?

    Je vous remercie encore beaucoup de votre aide .

    Bien cordialement.

    new_wave

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Bonjour et merci beaucoup de votre réponse.

    Pouvez vous me dire où est placé le cache plan : est ce un fichier temporaire ou est il en partie stocké en mémoire?
    Merci à vous .
    Un cache c'est toujours et exclusivement de la mémoire en matière de SGBDR. Jamais de disque jamais de fichier. Pour information, vous pouvez avoir une "vision" des niveaux de cache de SQL Server à l'aide de la commande DBCC MEMORYSTATUS (environ 70 niveaux de cache...)

    Par ailleurs, j'ai les questions suivantes relatives à l'approbation SQL Serveur à la connexion d'un utilisateur
    Notez qu'il aurait fallu ouvrir une nouvelle discussion pour ce qui suit et qui fait référence à mon article sur le sujet :
    https://blog.developpez.com/sqlpro/p..._et_utilisateu


    Vous indiquez dans votre cours sur la sécurité SQL Serveur...
    Quand j'utilise mon compte Windows pour me connecter à Sql serveur , comment mon compte peut il être enregistré dans Sql Serveur alors qu'il s'agit d'un compte Windows?
    En lançant la commande qui figure dans ce même article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE LOGIN <nom_utilisateur_Windows> FROM WINDOWS;
    Est ce un enregistrement qui se fait automatiquement sans que je fasse aucune opération?
    NON
    ...
    Par ailleurs, j'ai appris que lorsque une base de données est OFFLINE, il n'est pas possible de faire des opérations de maintenance sur cette base de données .

    Comment peut on alors procéder s'il est nécessaire de réparer cette base de données ?
    OFFLINE signifie que la base de données est placé dans un mode inaccessible. Or inaccessible veut bien dire inaccessible ! Que ce soit par un utilisateur externe, vous par exemple ou interne (processus SQL Server) . À de très rare exceptions près (opération d'extrême urgence) aucune opération n'est donc possible dans ce mode.
    Dans SQL Server, toutes les opérations de maintenance se font à chaud (la base est en exploitation), et sans blocage (les utilisateurs peuvent continuer de lire ou d'écrire les données, de modifier la structure des objets.... ). Par exemple la sauvegarde (BACKUP DATABASE...) ne peut se faire que si la base est en exploitation.


    Pour finir,j'ai lu ceci à propos des extensions de base de données
    Le mieux serait de lire mon livre "SQL Server 2014", qui le détaille.

    Pouvez vous m'expliquer la notion d'extension mixte que je n'ai pas bien comprise , notamment
    En gros, table et index sont structurés dans des pages de 8 Ko. Mais la lecture du disque se fait par bloc de 64 Ko regroupant donc 8 pages contiguës. Certaines extensions peuvent donc contenir 8 pages d'un même index ou d'une même table (on parle alors d'extensions uniformes) et d'autre peuvent combiner les pages de différents index ou table (on parle d'extensions mixtes). Il est possible de régler cela et depuis les dernières version de SQL Server, les extensions sont par défaut toutes uniformes.

    Cela signifie t-il que ces extensions peuvent servir à la création de plusieurs objets (8 au maximum)?
    OUI !

    A +

    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 1175
Taille : 105,0 Ko
    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/ * * * * *

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut Questions diverses
    Bonjour et merci beaucoup de toutes ces réponses.

    Je vais bien y réfléchir et reviens vers vous .

    Bon confinement et bonne santé.

    Bien cordialement.

    new_wave

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2018, 10h37
  2. Comment fige t-on le plan d'exécution d'une requête
    Par alexisongagna dans le forum Administration
    Réponses: 4
    Dernier message: 02/01/2013, 17h13
  3. Affichage du plan d'exécution d'une requête
    Par orafrance dans le forum Contribuez
    Réponses: 1
    Dernier message: 30/12/2011, 16h01
  4. Plan d'exécution d'un requête
    Par Etienne5685 dans le forum Développement
    Réponses: 16
    Dernier message: 03/06/2011, 17h43
  5. Forcer le choix du plan d'exécution d'une requête
    Par hmechbal dans le forum Oracle
    Réponses: 5
    Dernier message: 20/01/2011, 23h28

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