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

Administration SQL Server Discussion :

Afficher le nombre total de plans dans le cache de procédures et la taille de mémoire mobilisée


Sujet :

Administration SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut Afficher le nombre total de plans dans le cache de procédures et la taille de mémoire mobilisée
    Hello,

    En écrivant quelques requêtes pour auditer le cache, je suis tombé sur un problème où j'ai besoin de votre lumière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(*) AS [Nb_Total_Plans]
    ,SUM(c.size_in_bytes)/(1024*1024) AS [Total_Cache_Size_Mo]
    FROM sys.dm_exec_cached_plans c 
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) s
    Résultat
    -----------
    Nb_Total_Plans ................ Total_Cache_Size_Mo
    2255 ................................ 180

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) AS [Nb_Total_Plans]
    ,SUM(c.size_in_bytes)/(1024*1024) AS [Total_Cache_Size_Mo]
    FROM sys.dm_exec_cached_plans c
    Résultat
    -----------
    Nb_Total_Plans ................ Total_Cache_Size_Mo
    2262 ................................ 175
    Le BOL dit ceci concernant le plan_handle :

    Identificateur du plan en mémoire. Cet identificateur est transitoire et il reste constant uniquement pendant que le plan est dans le cache.
    Comment expliquer cette différence ? Qu'est ce qui est plus logique pour afficher le nombre total de plans dans le cache de procédures et la taille de mémoire mobilisée ?

    Détails des requêtes en préparation

    Merci de m'éclairer
    Etienne ZINZINDOHOUE
    Billets-Articles

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Dans la mesure ou plan_handle ne doit pas être NULL, les deux requêtes doivent renvoyer la même chose. Maintenant, combien de compilations ont eu lieu entre la première requête et la seconde ? Il y a au moins ta deuxième requête, plus 6 autres requêtes. Le deuxième SELECT doit convenir.
    David B.

  3. #3
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par dbaffaleuf Voir le message
    Dans la mesure ou plan_handle ne doit pas être NULL, les deux requêtes doivent renvoyer la même chose. Maintenant, combien de compilations ont eu lieu entre la première requête et la seconde ? Il y a au moins ta deuxième requête, plus 6 autres requêtes. Le deuxième SELECT doit convenir.
    Sur un autre serveur je viens de lancer les 2 requêtes presques simultanément (un F5 dans SSM) et j'obtiens ceci :

    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(*) AS [Nb_Total_Plans]
    ,SUM(c.size_in_bytes)/(1024*1024) AS [Total_Cache_Size_Mo]
    FROM sys.dm_exec_cached_plans c 
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) s
    Nb_Total_Plans ................ Total_Cache_Size_Mo
    14488 ................................ 594

    et pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) AS [Nb_Total_Plans]
    ,SUM(c.size_in_bytes)/(1024*1024) AS [Total_Cache_Size_Mo]
    FROM sys.dm_exec_cached_plans c
    Nb_Total_Plans ................ Total_Cache_Size_Mo
    14491 ................................ 583

    Regarder : le nombre de plan augmente contrairement à la taille du cache qui lui dimunie : c'est bizarre ça ! Il n' y a que chez moi qu'il y a ce comportement bizarre ? (je viens de faire ce test sur 3 machines différentes ) et j'obtiens le même comportement bizarre sur chacune des machines !



    Merci de m'éclairer
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Un test avec la vue sys.dm_os_memory_objects donne un résultat très éloigné (~15 Mo) des 2 requêtes précédentes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUM(pages_allocated_count)* 8000 /(1024*1024) AS size_cache_memory_Mo 
    FROM sys.dm_os_memory_objects 
    WHERE type IN ('MEMOBJ_CACHESTOREOBJCP', 'MEMOBJ_CACHESTORESQLCP', 'MEMOBJ_CACHESTOREXPROC', 'MEMOBJ_SQLMGR')
    Etienne ZINZINDOHOUE
    Billets-Articles

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    le nombre de plan augmente contrairement à la taille du cache qui lui dimunie : c'est bizarre ça
    Cela dépend de l'utilisation qui est faite de votre instance SQL Server.
    Vous pouvez avoir un plan qui prend plusieurs Mo et qui est évincé du cache, puis remplace par des plans de plusieurs autre requêtes nécessitant moins d'espace ...

    Comme vous l'a suggéré dbaffaleuf, il vous faudrait jeter un œil au nombre de compilations par seconde ...

    @++

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Effectivement le contenu du cache n'étant pas statique, il est difficile de comparer à 2 instants t1 et t2 les 2 requêtes citées plus haut.

    ++

  7. #7
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Bon, je suppose clos ce post

    Merci
    Etienne ZINZINDOHOUE
    Billets-Articles

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2008, 15h24
  2. Nombre total d'enregistrement dans un Form
    Par pleasewait dans le forum Access
    Réponses: 2
    Dernier message: 28/12/2006, 16h53
  3. [MySQL] afficher le nombre total d'enregistrements
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/03/2006, 22h14
  4. [MySQL] afficher le nombre total de message
    Par blastmanu dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/02/2006, 19h44

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