Bonjour,
J'ai un serveur SQL2005 32 bits qui consomme beaucoup de cpu depuis qq semaines. 80% en journée.
Les deux principales attentes sont dans l'ordre:
LCK_M_SCH_M: 50% attente pour poser un verrou de modification de schema
SOS_SCHEDULER_YIELD: 25% du à la pression CPU
J'ai mis une trace qq minutes: les requêtes sont très courtes (<30ms) mais très nombreuses. difficile d'isoler une requête fautive.
J'ai remarqué qu'il y avait beaucoup de compilations/sec (par des requêtes adhoc car pas de proc stock dans la base)
Ratio requêtes exécutées/sec (moyenne : 800), requêtes compilées/sec (moyenne :300) est trop élevé.
Ces deux problèmes peuvent être liés, une table qui est modifiée (alter, reindex…) provoque une compilation des requêtes utilisées par cette table.
J'essaie d'isoler les requêtes responsables des LCK_M_SCH_M
avec la requete:
voici les wait de type Sch-M que je retrouve:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT resource_type, resource_associated_entity_id, request_status, request_mode,request_session_id, resource_description FROM sys.dm_tran_locks WHERE resource_database_id = 9
A priori, c'est sur les metadata. Par contre, je ne comprends pas la ressource description ($hash =0x9:0x0 ). Pouvez-vous m'aider à ce sujet ?
MerciMETADATA 0 GRANT Sch-M 70 $hash = 0x9:0x0
METADATA 0 WAIT Sch-M 91 $hash = 0x9:0x0
METADATA 0 WAIT Sch-M 67 $hash = 0x9:0x0
METADATA 0 WAIT Sch-M 107 $hash = 0x9:0x0
METADATA 0 WAIT Sch-M 61 $hash = 0x9:0x0
METADATA 0 WAIT Sch-M 54 $hash = 0x9:0x0
Sebastien
Partager