Justifique NÃO usando a dica (nolock) em todas as consultas

23

Você já teve que justificar NÃO usar uma dica de consulta?

Estou vendo WITH (NOLOCK)em cada consulta que atinge um servidor muito ocupado. É o ponto que os desenvolvedores pensam que deveria estar ativado por padrão, porque odeiam vê-lo em seu código milhares de vezes.

Tentei explicar que isso permite leituras sujas e, eventualmente, eles acabam com dados ruins, mas eles acreditam que a troca de desempenho vale a pena. (O banco de dados deles está uma bagunça; não admira que eles tenham problemas de desempenho.)

Se você tiver um exemplo claro de como apresentar o caso contra esse abuso da NOLOCKdica, isso seria apreciado.

datagod
fonte

Respostas:

17

Você escolhe suas batalhas e batalhas como essa não podem ser vencidas facilmente. Temos um sistema em que cada DML é sugerida com a dica ROWLOCK (independentemente de modificar uma linha ou vários milhares de linhas). Eu mostrei vários exemplos de por que isso prejudica o desempenho, mas como o sistema já está funcionando, há resistência à mudança. Observe que eu os convenci o suficiente para NÃO usar isso daqui para frente.

O NOLOCK possui, mas eu posso recomendar algumas boas referências mostrando os problemas de usá-lo:

Sankar Reddy
fonte
9

Você precisa explicar aos colegas a importância de entender os níveis de isolamento. Mostre-lhes exemplos. A explicação mais agradável e fácil que encontrei no pôster dos níveis de isolamento de Little Kendra . Pergunte a eles por que eles acham que precisam de dicas nolock. Por que eles não usam as instruções "definir nível de isolamento de transação ..."? Pergunte qual é exatamente a situação que eles querem consertar, talvez tenham impasses, bloqueios ... etc. Se eles não quiserem reter bloqueios, eles podem considerar o nível de isolamento de captura instantânea.

Somente perguntando a eles você pode ter uma imagem clara.

Marian
fonte