Você já teve que justificar NÃO usando uma dica de consulta?
Estou vendo WITH (NOLOCK)
em cada consulta que atinge um servidor muito ocupado. É a ponto de os desenvolvedores acharem que deveria estar ativado por padrão, porque odeiam vê-lo em seu código milhares de vezes.
Tentei explicar que está permitindo leituras sujas e eles acabarão com dados ruins, mas eles acreditam que a compensação de desempenho vale a pena. (O banco de dados deles é uma bagunça; não é de admirar que eles tenham problemas de desempenho.)
Se você tiver um exemplo claro de como apresentar o caso contra esse abuso da NOLOCK
dica, isso seria apreciado.
Você escolhe suas batalhas e batalhas como essa não podem ser vencidas facilmente. Temos um sistema onde cada DML é sugerido com a dica ROWLOCK (independentemente de modificar uma linha ou vários milhares de linhas). Mostrei vários exemplos porque isso realmente 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.
NOLOCK tem seu lugar, mas posso recomendar algumas boas referências mostrando os problemas de usá-lo:
Já foi discutido no SO antes:
Defina muito ocupado. Temos grandes volumes (50 mil novas linhas por segundo, grandes agregações, etc.) e não vemos a necessidade de obter dados duvidosos também
Você tem que explicar aos seus 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 de níveis de isolamento de Little Kendra . Pergunte a eles por que eles acham que precisam da dica nolock. Por que eles não usam as instruções "definir nível de isolamento da transação ..."? Pergunte qual é exatamente a situação que eles desejam corrigir, talvez eles tenham impasses, bloqueios etc. Se eles simplesmente não quiserem manter bloqueios, podem considerar o nível de isolamento de instantâneo.
Somente perguntando a eles você pode ter uma imagem clara.