Question

Je voudrais poser quelques questions concernant le mécanisme de verrouillage SQL Server

  1. Si je ne suis pas en utilisant l'indice de verrouillage avec l'instruction SQL, SQL Server utilise indice PageLock par défaut. ai-je raison??? Si oui, alors pourquoi? peut être son dû au facteur de gestion trop de verrous c'est la seule chose que je pris comme inconvénient, mais s'il vous plaît laissez-moi savoir s'il y en a d'autres. et aussi me dire si nous pouvons changer ce comportement par défaut si son raisonnable de le faire.

  2. Je suis en train d'écrire une application côté serveur, un serveur de synchronisation (ne pas utiliser Sync Framework) et j'ai des requêtes de base de données écrite dans le fichier de code C # et en utilisant une connexion ODBC pour les exécuter. Maintenant, la question est quelle est la meilleure façon de changer le verrouillage par défaut de la page à la rangée en gardant à l'esprit les inconvénients (par exemple l'ajout indice de verrouillage dans les requêtes c'est ce que je prévois pour).

  3. Que faire si une requête SQL (SELECT / DML) est en cours d'exécution sans la portée de la transaction et la déclaration contient indice verrou alors quel genre de verrouillage sera acquis (par exemple partagé, mise à jour, exclusive)? Et tandis que dans la portée transaction ne niveau d'isolement de la transaction a un impact sur le type de verrouillage si soupçon ROWLOCK est utilisé.

  4. Enfin, si certains pourraient me fournir un échantillon pour que je puisse tester et de l'expérience tout au-dessus de scénarios moi-même (par exemple le code dot net ou d'un script SQL)

Merci Mubashar

Était-ce utile?

La solution

  1. Non. Il se verrouille comme il l'entend et dégénère serrures au besoin

  2. Laissez le moteur DB gérer

  3. Voir point 2

  4. Voir point 2

Je n'utilise des notes de blocage si vous voulez des comportements spécifiques et certains par exemple files d'attente ou non-blocage (sale) se lit comme suit.

De manière plus générale, pourquoi pensez-vous que le moteur DB ne peut pas faire ce que vous voulez par défaut?

Autres conseils

Le verrouillage par défaut est de verrous de ligne non verrous de page, bien que la manière dont le mécanisme de verrouillage fonctionne signifie que vous allez placer des verrous sur tous les objets dans la hiérarchie par exemple la lecture d'une seule ligne placera un verrou partagé sur la table, un verrou partagé sur la page, puis un verrou partagé sur la ligne.

Cela permet une action demandant un verrou exclusif sur la table pour le savoir ne peut pas prendre encore, car il est un cadeau de verrou partagé (sinon il faudrait vérifier chaque page / ligne pour les serrures.)

Si vous émettez trop de verrous pour une requête individuelle cependant, il effectue l'escalade de verrous qui réduit la granularité de la serrure - de sorte que la gestion est-il moins serrures. Cela peut être désactivé à l'aide d'un indicateur de trace, mais je ne le considérer.

Jusqu'à ce que vous savez que vous avez réellement un problème d'escalade de verrouillage / verrouillage, vous risquez d'optimiser prématurément un problème non existant.

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