Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quand est-il approprié d'utiliser NOLOCK ?

Notez que vous pouvez spécifier nolock table par table.

J'utilisais généralement nolock dans les requêtes SELECT complexes, mais uniquement pour les petites tables de recherche qui ne changeaient presque jamais et pour les données en affichage uniquement. Vous connaissez les tableaux qui répertorient les prix pour le semestre en cours, ou les recherches d'identifiants sur des chaînes, etc. Des éléments qui ne changent qu'avec des mises à jour majeures, après quoi les serveurs sont généralement redémarrés régulièrement de toute façon.

Cette performance améliorée de manière significative, a réduit le risque de blocage dans les périodes les plus chargées, et plus important encore, c'était vraiment perceptible pendant les pires moments pour les requêtes qui touchaient beaucoup de tables (ce qui est logique, elles doivent obtenir moins de verrous, et ces tables secondaires sont souvent utilisés presque partout, passant souvent de 7-8 à 4 tables qui doivent être verrouillées)

Mais soyez très prudent en l'ajoutant, ne vous précipitez pas et ne le faites pas systématiquement. Il ne fera pas mal s'il est utilisé correctement, mais il fera horriblement mal s'il est mal utilisé.

Ne l'utilisez pas pour des choses très critiques, des choses qui calculent, etc., car cela deviendra incohérent, tout ce qui mènera tôt ou tard à une écriture.

Une autre optimisation de ce type est ROWLOCK, qui ne se verrouille qu'au niveau de la ligne. Ceci est principalement utile lors de la mise à jour (ou de la suppression) de tables où les lignes ne sont pas liées les unes aux autres, comme les tables où vous ne mettez que des enregistrements de journal (et l'ordre dans lequel ils sont insérés n'a pas d'importance). Si vous avez un schéma selon lequel, quelque part à la fin d'une transaction, un enregistrement de journal est écrit dans une table, cela peut également considérablement accélérer.

Si votre base de données a un pourcentage d'écritures relativement faible, cela n'en vaut peut-être pas la peine. J'avais un ratio lecture/écriture inférieur à 2:1.

Certaines URL que j'ai enregistrées en travaillant dessus :

http://www.developerfusion.com/article/1688/ sql-server-locks/4/