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 :

Attente de ressource Memoire long


Sujet :

Administration SQL Server

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Attente de ressource Memoire long
    Bonjour,

    Voici mon problème... Depuis quelques temps, je remarque que mes sites se bloquent sur des pages ayant des événements qui nécessitent un rechargement de la page avec une nouvelle connexion sql (par exemple le changement de page d'un catalogue). La page ne repond plus et il faut attendre un certains temps avant de pouvoir faire une action sur la page qui bloque. (j'espère que je me suis fait comprendre!!!)

    J'ai lancé l'outil "Moniteur d'activité" sur SQL Management studio et j'observe que quand une page bloque, dans la partie "Attentes de ressources", j'ai "Memory" qui grimpe en flèche au niveau du temps d'attente (sans avoir de requête coûteuse qui s'affiche). Quand enfin le temps d'attente revient à 0, mon site se débloque.

    Comment éradiquer ce phénomène et à quoi ceci est dû?

    Merci pour votre aide!

  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
    Avant l'exécution de la tentative de connexion, lancer la commande ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dbcc sqlperf('sys.dm_os_wait_stats','clear');
    GO
    Faire un test de connexion et une fois le test terminé lancer la commande ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    WITH Waits AS
    (SELECT wait_type, wait_time_ms / 1000. AS wait_time_s,
    100. * wait_time_ms / SUM(wait_time_ms) OVER() AS pct,
    ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn
    FROM sys.dm_os_wait_stats
    WHERE wait_type NOT IN ('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE','SLEEP_TASK',
    'SLEEP_SYSTEMTASK','SQLTRACE_BUFFER_FLUSH','WAITFOR', 'LOGMGR_QUEUE','CHECKPOINT_QUEUE',
    'REQUEST_FOR_DEADLOCK_SEARCH','XE_TIMER_EVENT','BROKER_TO_FLUSH','BROKER_TASK_STOP','CLR_MANUAL_EVENT',
    'CLR_AUTO_EVENT','DISPATCHER_QUEUE_SEMAPHORE', 'FT_IFTS_SCHEDULER_IDLE_WAIT',
    'XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
    'ONDEMAND_TASK_QUEUE', 'BROKER_EVENTHANDLER', 'SLEEP_BPOOL_FLUSH'))
    SELECT W1.wait_type, 
    CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s,
    CAST(W1.pct AS DECIMAL(12, 2)) AS pct,
    CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct
    FROM Waits AS W1
    INNER JOIN Waits AS W2
    ON W2.rn <= W1.rn
    GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct
    HAVING SUM(W2.pct) - W1.pct < 99 OPTION (RECOMPILE);
    GO
    Et poster le résultat

    thx
    David B.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Voici le résultat que j'obtient

    wait_type wait_time_s pct running_pct
    RESOURCE_SEMAPHORE 827.31 95.35 95.35
    SOS_SCHEDULER_YIELD 14.49 1.67 97.02
    SQLTRACE_FILE_WRITE_IO_COMPLETION 10.71 1.23 98.26
    OLEDB 3.04 0.35 98.61
    WRITELOG 1.75 0.20 98.81
    PREEMPTIVE_XE_CALLBACKEXECUTE 1.72 0.20 99.01

  4. #4
    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
    OK, c'est un problème de mémoire nécessaire lors de la compilation d'une requête.

    Il faudrait pour identifier clairement quelle est la requête en question, lancer deux requêtes pendant l'établissement de la connexion (pas à la fin mais bien pendant l'attente):

    1) -- Déterminer les conditions d'attente (coût du plan, temps d'attente, type de gateway, etc...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from sys.dm_exec_query_memory_grants;
    GO
    2) -- Déterminer le texte et le plan de la requête en attente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select SQ.text ,WTA.*,  QP.query_plan from sys.dm_os_waiting_tasks WTA
    join sys.dm_exec_sessions SES on SES.session_id = WTA.session_id
    join sys.dm_exec_requests REQ on REQ.session_id = SES.session_id
    cross apply sys.dm_exec_sql_text(REQ.sql_handle) SQ
    cross apply sys.dm_exec_query_plan(REQ.plan_handle) QP
    where SES.is_user_process=1
    and WTA.wait_type = 'RESOURCE_SEMAPHORE';
    GO
    David B.

  5. #5
    Membre actif
    Homme Profil pro
    Administrateur de base de données MCITP Database Administrator 2008
    Inscrit en
    Décembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données MCITP Database Administrator 2008
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 40
    Points : 201
    Points
    201
    Par défaut
    Bonjour,
    essaye d'identifier et examiner les requêtes qui attendent une allocation de mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT text,query_plan, requested_memory_kb, granted_memory_kb, used_memory_kb 
    FROM 
    SYS.DM_EXEC_QUERY_MEMORY_GRANTS mgr
    CROSS APPLY SYS.DM_EXEC_SQL_TEXT(sql_handle) txt
    CROSS APPLY SYS.DM_EXEC_QUERY_PLAN(mgr.plan_handle) qp

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Je n'ai aucun résultat avec les requêtes que vous m'avez donné...

    J'ai du mal à comprendre car quand le site bloque bien souvent il n'y a aucune requête coûteuse en attente (sur activity monitor).

  7. #7
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Je viens de récupérer une erreur sql quand le site a bloqué :

    erreur CatalogueInfusion exp : System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
    at System.Data.SqlClient.TdsParserStateObject.WriteSni()
    at System.Data.SqlClient.TdsParserStateObject.WritePacket(Byte flushMode)
    at System.Data.SqlClient.TdsParserStateObject.ExecuteFlush()
    at System.Data.SqlClient.TdsParser.TdsExecuteSQLBatch(String text, Int32 timeout, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj)
    at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
    at System.Data.SqlClient.SqlCommand.ExecuteScalar()
    Je sais pas si ça peux vous aider à comprendre ce qui se passe!

  8. #8
    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
    Peux-tu mettre en PJ le contenu de l'errorlog stp
    David B.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    en pièce jointe le fichier errorlog
    Fichiers attachés Fichiers attachés

  10. #10
    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
    Visiblement tu as un problème de pression mémoire sur ton serveur au vu des messages suivants :

    spid1s,Unknown,A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 1519 seconds. Working set (KB): 158752<c/> committed (KB): 369296<c/> memory utilization: 42%.

    Peux-tu nous donner plus de précision concernant ton environnement ?

    - Quantité de mémoire sur le serveur ?
    - Quantité allouée à SQL Server ?
    - Quantité de mémoire libre sur le serveur ?
    - As-tu mis en place une surveillance des compteurs de performance instance:Buffer Manager:Buffer Cache hit ratio et instance:Buffer Managerage Life Expectancy ?
    - Est-ce que tu es concernée par un serveur SQL virtualisé ?

    ++

  11. #11
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Alors c'est un serveur dédié 1&1 : Windows Web Server 2008R2 Service Pack 1
    RAM : 4,00GB

    Commande DBCC MEMORYSTATUS :
    Memory Manager KB
    VM Reserved 4238360
    VM Committed 1103296
    Locked Pages Allocated 0
    Reserved Memory 1024
    Reserved Memory In Use 0

    Physical Memory
    Available 1875MB
    Cached 1869MB
    Total 4062MB
    Installed 4096MB
    Dites moi si vous voulez plus d'infos!

  12. #12
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Autre chose :

    J'ai remarqué depuis quelque temps en observant les performance que l'utilisation de la mémoire physique était de 86%. J'ai donc installé l'outil RAMMAP et j'ai "réinitialisé" la mémoire. Depuis je le fais de temps en temps. Mais si je ne le fais pas au fur et à mesure le pourcentage de mémoire physique utilisé augmente de jour en jour!

    Merci beaucoup pour votre aide!!!

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    4 go c'est très peu.
    Est-ce du 32 ou du 64 bits ?

    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/ * * * * *

  14. #14
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    ok je vais essayer de voir pour augmenter la ram...

    C'est du 64bits

  15. #15
    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
    2 choses à faire en 64 bits:

    - Mettre une valeur explicite à 'max server memory'
    - Verrouiller les pages en mémoire (si j'ai bien compris c'est une machine physique et pas une VM)

    SQL Server édition Enterprise ou Standard ?
    Si Standard alors il faut placer un traceflag (-T845) au démarrage de SQL Server pour pouvoir verrouiller les pages en mémoire cf http://support.microsoft.com/kb/970070/en-us
    David B.

  16. #16
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par chloeb Voir le message
    le pourcentage de mémoire physique utilisé augmente de jour en jour!
    Ceci est tout à fait normal. Lorsque SQL Server accède a des données sur le disque, il les place en RAM. Une fois la requête terminée, il laisse les données en RAM, afin qu'elle soit plus rapidement accessible pour les éventuelles requêtes suivantes qui aurait besoin de ces données.
    Si d'autres données sont nécessaires, SQL server utilisera plus de RAM.
    Ce n'est que lorsqu'il n'y a plus de RAM disponible que SQL server libérera la place utilisée par les données les plus anciennement utilisées...
    En d'autres termes, SQL Server utilise toute la RAM dont il peut disposer.

  17. #17
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Ok, j'ai fait tout ça.

    Du coup, j'ai mis en max server memory 2,5GB (mon serveur ayant une RAM de 4GB). Je sais pas si j'ai bien fait ou si je devrais mettre plus ou moins ??

  18. #18
    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
    Il faut mesurer si c'est suffisant ou non. Avec 4Gb seulement, il faut étudier la valeur du compteur 'SQLServer:BufferManager : Page life expectancy' (valeur (sec) sous les 300 secs, et variation)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select object_name, counter_name, cntr_value 
    from sys.dm_os_performance_counters 
    where counter_name = 'Page Life Expectancy'
    and object_name = 'SQLServer:Buffer Manager'
    Et pour éviter que la mémoire de SQL Server ne soit paginée, il faut la verrouiller en mémoire (d'où ma question Standard ou Enterprise Edition ?)
    David B.

  19. #19
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2012
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    J'obtient une valeur de 46217.

    J'ai une édition standard, j'ai verrouillé les pages en mémoire et j'ai mis le flag -T845 comme tu m'as dit.

  20. #20
    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
    Et tu as redémarré l'instance ? si oui est-ce que dans l'errorlog dans les premières lignes il y a écrit qq chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Using locked pages for buffer pool
    David B.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2012, 15h31
  2. [1.x] Ressources Memoire allucinante
    Par art2rue dans le forum Symfony
    Réponses: 4
    Dernier message: 15/11/2010, 16h57
  3. [C#]pb de ressources memoire ou fonctionnement normal ?
    Par zax-tfh dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/01/2007, 09h48
  4. Réponses: 25
    Dernier message: 24/05/2006, 14h35
  5. [TOMCAT][MEMOIRE] utilisation de toutes les ressources
    Par fabszn dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 19/12/2005, 14h04

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