Existe-t-il un moyen de faire en sorte que WITH (NOLOCK) soit appliqué à n'importe quelle instruction SELECT exécutée sur une base de données particulière?Puis-je appliquer NOLOCK avec un paramètre à l'échelle de la base de données?
Répondre
Non, mais vous pouvez utiliser le niveau de base de données SNAPSHOT ISOLATION sur SQL Server 2005 et plus, il devrait aider beaucoup avec les interblocages
SQL Server 2005 introduit des extensions aux niveaux d'isolation SQL-92 avec l'introduction de l'isolement SNAPSHOT niveau et une implémentation supplémentaire de READ COMMITTED. Le nouveau niveau d'isolation READ_COMMITTED_SNAPSHOT peut remplacer de manière transparente READ COMMITTED pour toutes les transactions. SNAPSHOT isolation spécifie que les données lues dans une transaction ne refléteront jamais les modifications apportées par d'autres transactions simultanées. La transaction utilise les versions de ligne de données qui existent au début de la transaction. Aucun verrou n'est placé sur les données lors de leur lecture, ainsi les transactions SNAPSHOT ne bloquent pas les autres transactions d'écriture de données. Les transactions qui écrivent des données ne bloquent pas les transactions d'instantanés de la lecture des données. Vous devez activer l'isolation des clichés en définissant l'option de base de données ALLOW_SNAPSHOT_ISOLATION pour pouvoir l'utiliser. L'option de base de données READ_COMMITTED_SNAPSHOT détermine le comportement du niveau d'isolation READ COMMITTED par défaut lorsque l'isolation de capture instantanée est activée dans une base de données. Si vous ne spécifiez pas explicitement READ_COMMITTED_SNAPSHOT, READ COMMITTED est appliqué à toutes les transactions implicites. Cela produit le même comportement que la définition de READ_COMMITTED_SNAPSHOT OFF (par défaut). Lorsque READ_COMMITTED_SNAPSHOT OFF est en vigueur, le moteur de base de données utilise des verrous partagés pour appliquer le niveau d'isolation par défaut. Si vous définissez l'option de base de données READ_COMMITTED_SNAPSHOT sur ON, le moteur de base de données utilise le contrôle des versions et l'isolation des instantanés de ligne comme valeur par défaut, au lieu d'utiliser des verrous pour protéger les données.
Dépend de votre base de données. Certains moteurs de base de données vous permettent de définir par défaut des lectures incorrectes ou des comportements similaires. Par exemple, certaines versions de MSSQL Server vous permettent de configurer la base de données en tant qu'isolation d'image instantanée, ce qui est décrit dans la publication de SQLMenace.
L'isolation d'instantané n'est pas une lecture incorrecte, l'isolation d'instantané est une lecture des données comme c'était le cas lorsque vous avez démarré votre lot. Une lecture incorrecte lit des données qui n'ont jamais été validées mais qui auraient pu être annulées (nolock, lecture non-validée) – SQLMenace
Merci d'avoir signalé cela, j'espère que ma réponse est moins trompeuse maintenant. Cependant, le demandeur n'a toujours pas spécifié sa base de données, et probablement ne le fera pas. – marr75