Question

Je lis l'escalade de verrouillage SQL Server à partir MSDN page à propos de l'escalade de verrouillage SQL Server

Ma question est, semble la principale raison pour laquelle il y a une escalade de verrouillage est de réduire les frais généraux afin de maintenir plus de verrous (par exemple lorsque plus de verrous de ligne sont acquis pour une table, puis rangée de verrouillage de niveau est escaladée au niveau de la table). Ma question est de maintenir plus de verrous va améliorer la concurrence, il est un avantage, pourquoi il est une surcharge? Dans mon idée humble, verrouillage doit être aussi petit que suffisant pour rendre la performance db mieux en améliorant la concurrence. Quelqu'un pourrait-il expliquer de manière simple pourquoi l'escalade de verrous est nécessaire et quelle est la tête de verrouillage soi-disant s'il vous plaît?

Merci d'avance, George

Était-ce utile?

La solution

  

Quelqu'un pourrait-il expliquer de manière simple pourquoi l'escalade de verrous est nécessaire et quelle est la tête de verrouillage soi-disant s'il vous plaît?

Lorsque vous mettez à jour une table et verrouillage d'une ligne, vous devez enregistrer ce fait en quelque sorte: c'est une ligne, il a été mis à jour et verrouillée

.

Lorsque vous mettez à jour un million de lignes, vous devez faire ce million de fois, et ont donc peu d'espace pour garder millions serrures.

SQL Server conserve une liste des verrous en mémoire, alors que Oracle fait dans les tablespaces.

Ceci est probablement parce que Oracle est vieux (plus que moi), et SQL Server est jeune par rapport à Oracle.

Garder les ressources temporaires (comme serrures) dans un stockage permanent n'est pas la solution si évidente du point de vue du concepteur. Juste une chose à mentionner:. Vous devrez peut-être une écriture sur disque pour effectuer une SELECT FOR UPDATE

Les caractéristiques de base d'Oracle ont été développés au début des années 80, quand les choses en gardant en mémoire n'a pas été une option du tout. Ils ont juste HAD pour utiliser l'espace disque en quelque sorte.

Si l'espace disque devait être utilisé de toute façon, il fallait placer un verrou quelque part sur le disque.

Et où garder un verrou pour une ligne sinon dans la ligne elle-même?

Les développeurs du système de verrouillage de SQL Server, lors d'inventer la conception de leur SGBDR appelé Sybase, a décidé de stocker les choses temporaires (i. Serrures e.) Dans le stockage temporaire (i. E. RAM).

Mais la conception d'Oracle est toujours équilibré. Si vous avez un 1.000.000 lignes dans votre base de données, vous disposez d'un espace de stockage pour 1.000.000 serrures, si vous avez un milliard de lignes, vous pouvez stocker milliards serrures, etc

conception de SQL Server est flawy dans ce sens, parce que votre RAM et d'espace disque dur peut être déséquilibré. Vous pouvez facilement avoir 16 Mo de RAM et plusieurs téraoctets d'espace disque. Et vous la mémoire ne peut pas contenir toutes les serrures.

Voilà pourquoi lorsque le nombre de verrouillage atteint une certaine limite, SQL Server décide d'intensifier les verrous: au lieu de garder les verrous pour, disons, 10 lignes individuelles dans une page de données (ce qui nécessite 10 dossiers), il verrouille toute la page de données (qui nécessite 1 enregistrement).

Oracle, d'autre part, lors de la mise à jour d'une ligne, juste écrit le verrou à droite dans la page de données.

Voilà pourquoi les serrures d'Oracle sont de niveau ligne.

Oracle n'a pas « gérer » les serrures dans un bon sens de la parole:. Vous ne pouvez pas, par exemple, obtenir une liste des pages verrouillées dans Oracle

Lorsqu'une transaction doit mettre à jour une ligne, il va juste à la ligne et voit si elle est verrouillée.

Dans ce cas, il semble que la transaction détient un verrou (cette information est contenue dans le descripteur de verrouillage dans la page de données) et s'ajoute à la file d'attente de notification de cette transaction: lorsque les opérations de verrouillage meurt, l'original est notifié et serrures les données.

Du point de vue de la concurrence, l'escalade de verrous est totalement la solution d'un pauvre homme: il ajoute rien à la concurrence. Vous pouvez, par exemple, obtenir un verrou sur une ligne que vous ne touche même pas.

Du point de vue de la performance, de faire les choses en mémoire est, bien sûr, plus rapide que de les faire sur le disque.

Mais depuis Oracle met en cache les blocs de données et les opérations réelles décrites ci-dessus sont effectuées en mémoire de toute façon, la performance est la même ou à peu près.

Autres conseils

Si les estimations de l'Optimiseur SQL Server / décide qu'une requête « visite » toutes les lignes dans une certaine gamme, il sera plus efficace de tenir une seule serrure sur cette plage plutôt que d'avoir à négocier plusieurs serrures (serrures doivent être testé pour le type). Ceci est en plus de consommer moins de ressources de blocage (un système large des ressources).

Si vous avez un schéma bien conçu, et les index appropriés à votre charge de travail de recherche, qui sont régulièrement entretenus, vous ne devriez pas avoir à vous soucier de l'escalade qui se produit. Dans de nombreux cas, les verrous de table de blocage peuvent être éliminés par les indices de couverture appropriés.

MISE À JOUR: Un indice de couverture pour une requête signifie qu'une recherche dans le cluster ne doivent être effectuées, ce qui réduit les chances de bloquer les insertions dans la table

.

les moyens généraux de verrouillage que la gestion de verrouillage d'une table est mieux sage que de gérer perf beaucoup de verrous de ligne. puisque chaque verrou prend un peu de mémoire, un grand nombre de verrous de ligne peut consommer beaucoup plus de mémoire que d'un verrou de table. si l'escalade de verrouillage va de ligne-> page-> verrou de table.

La définition de « efficace » est complexe. Parfois, il est plus efficace d'optimiser pour si beaucoup de concurrence processus peuvent y faire chose sans collisions. Parfois, il est plus efficace de prendre un temporaire frapper à la concurrence obtenir un processus plus rapidement. Le verrou escaladé gardera d'autres processus de telle sorte ce processus peut obtenir son travail et fait sortir du chemin.

Pour des informations spécifiques sur la façon dont les verrous sont maintenus, vous pouvez voir le chapitre 8 de Microsoft SQL Server 2005: Le moteur de stockage (je ne suis pas affilié, c'est juste la première info internals je suis tombé). Si vous avez un compte Books24x7, il est là-bas. Il montre sur un> Machine de mémoire à 16GB il y a 2 ^ 25 (33554432) fentes de la table de hachage de verrouillage, avec une limite supérieure de 2 ^ 31 fentes.

Pour une application donnée vous pouvez très bien trouver le débit total à être plus élevé en utilisant uniquement des serrures à grains fins. Comme vous pouvez probablement le deviner, tout dépend de la façon dont les frais généraux de gestion de verrouillage se compare au potentiel de verrouillage excessif.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top