2010-08-01 15 views
2

Cette page indique que "pour la méthode d'accès Hash, vous n'avez besoin que d'un seul objet lock".Berkeley DB: nombre d'objets de verrouillage pour la méthode d'accès au hachage

http://www.oracle.com/technology/documentation/berkeley-db/db/programmer_reference/lock_max.html

Est-ce que cela signifie que tous les processus/threads qui ont accès à la base de données va essayer de verrouiller le même objet de verrouillage? Cela ne provoque-t-il pas un conflit de verrous très élevé?

Merci!

--Michi

Répondre

2

Ce qu'il est décrit ici est de savoir comment calculer le nombre d'objets de verrouillage requis par votre application, bien que la configuration de l'objet de verrouillage par défaut (1000) est généralement suffisant. Il décrit le nombre d'objets de verrou requis pour une opération donnée d'accès aux données, de sorte que vous puissiez multiplier ce nombre par le nombre d'opérations d'accès aux données simultanées et configurer le nombre d'objets de verrouillage de façon appropriée. Il ne s'agit pas vraiment de conflits de verrous.

Pour la méthode d'accès HASH, une valeur de clé donnée est mappée directement à un compartiment de hachage. Il n'y a qu'une seule page qui doit être regardée (et verrouillée) afin d'atteindre les données. Ceci est différent de Btree (qui doit traverser les nœuds d'index internes pour accéder aux données) et Queue (qui doit verrouiller chaque enregistrement et la page sur laquelle l'enregistrement réside).

Ces dernières versions que nous avons effectivement éliminé certains verrous qui ne sont pas nécessaires, de sorte que d'une manière plus simple de mettre ce serait:

Chaque opération de base de données va exiger

  • Un verrou objet de la page (Btree, Hash ou rECNO) ou l'enregistrement (file d'attente) qui est en cours d'accès,
  • , plus un objet de verrouillage pour la page de méta-données,
  • , plus un objet de verrouillage si un Btree pa ge division est nécessaire,
  • ainsi un objet de verrouillage par page si file d'attente est utilisé

Fondamentalement, typiquement 2-3 objets de verrouillage par accès aux données. Les transactions accumulent des objets de verrouillage jusqu'à ce que la transaction soit terminée, donc si une transaction dans votre application accède généralement à 10 enregistrements, cette transaction nécessitera 20-30 objets de verrouillage. Si vous pouvez avoir jusqu'à 10 threads simultanés dans votre application, alors vous devrez configurer votre système pour avoir environ 300 objets de verrouillage. Il est toujours préférable de configurer plus que ce dont vous avez besoin pour ne pas vous épuiser et le surcoût de mémoire lié à la superposition des objets de verrouillage est minime (ce sont de petites structures).

J'espère que cela aide.

Dave