web-dev-qa-db-fra.com

Les verrous SQL Server et leur indication des problèmes de performances

J'essaie de comprendre un problème de performance potentiel avec notre base de données (SQL 2008) et en particulier un compteur de performance, SQLServer: Temps d'attente total du délai d'attente du verrou total (ms). Nous constatons un ralentissement des temps de réponse de la base de données et le seul pic en corrélation auquel je puisse faire correspondre est un pic du temps total d'attente et des temps d'attente par seconde. Je ne vois pas de goulot d'étranglement particulier dans les E/S du disque, l'utilisation du processeur ou la mémoire.

L’explication courante d’un verrou SQLServer est qu’il s’agit d’un verrou léger, mais j’essaie d’obtenir une compréhension plus détaillée de ce qu’est un verrou, de la différence entre un verrou et de ce qu’il pourrait en être de très haut. un indicateur pour.

14
duckworth

Je vous recommande de regarder dans sys.dm_os_latch_stats et de voir quels types de verrous ont augmenté les types de contention et d'attente, par rapport à la ligne de base précédente.

Si vous remarquez un pic dans les verrous de type BUFFER, cela signifie que des mises à jour sont en conflit pour modifier la même page. D'autres types de verrous ont également une explication courte dans le MSDN et peuvent vous guider vers la cause première du problème. Pour ceux marqués «à usage interne uniquement», vous allez devoir ouvrir un dossier d'assistance avec MS, car une explication détaillée de ce qu'ils signifient est sur le point de NDA.

Vous devriez également regarder dans sys.dm_os_wait_stats . Si vous constatez une augmentation de PAGELATCH_*, le problème est le même que celui du verrou de type BUFFER ci-dessus: contention d'essayer de modifier la même page, aka. en tant que update hot-spot . Si vous constatez une augmentation PAGEIOLATCH_* alors que votre problème est lié au sous-système E/S, le chargement des pages en mémoire s’avère trop long. 

9
Remus Rusanu

C’est peut-être une erreur fondamentale du DBA professionnel ... mais c’est ce que j’ai trouvé avec notre problème de verrouillage élevé et ce fil occupe une place très importante dans les résultats de recherche. Je pensais partager notre point que cela pourrait aider quelqu'un d'autre.

sur les nouveaux serveurs à deux/plusieurs processeurs utilisant une architecture de mémoire NUMA, le degré maximal de parallélisme doit être défini sur le nombre de cœurs réel par processeur. Dans notre exemple, nous avions le xénon double avec 4 cœurs chacun. En hyper-threading, il apparaît sous la forme de 16 processeurs logiques pour SQL.

Le verrouillage de cette valeur entre 0 et 4 par défaut réduit immédiatement le seuil haut de certaines requêtes.

Notre verrou a fonctionné plus de 1000 ms jusqu'à 30 000 ms à certaines occasions.

11
michael x

Référence extraite de ce blog:

Utilisation de sys.dm_db_index_operational_stats:

SELECT 
    OBJECT_NAME(object_id)
    ,page_latch_wait_count
    ,page_latch_wait_in_ms
    ,tree_page_latch_wait_count
    ,tree_page_latch_wait_in_ms  
    ,Page_io_latch_wait_count
    ,Page_io_latch_wait_in_ms
FROM sys.dm_db_index_operational_stats (DB_ID(), NULL, NULL, NULL)

Utilisation de sys.dm_os_latch_stats:

SELECT * FROM sys.dm_os_latch_stats  
WHERE latch_class = 'buffer'
0
Anvesh