Como posso provar que o NOLOCK é a fonte de problemas de conflito?


8

Não estou tentando iniciar uma discussão do tipo windows / mac.

Pessoalmente, não preciso de convencimento de que NOLOCKnão seja uma boa ideia como prática reflexiva. Parece que quando você está desenvolvendo tudo deve ter um propósito, não reacionário (/ amém)

Então ... o programador encarregado insiste NOLOCKé o caminho a percorrer. Recomenda com todas as consultas ad-hoc e sempre que consultar a produção. Eu não vi um procedimento armazenado sem dicas de nolock em todas as tabelas.

Não quero ser aquele cara que entra e diz a todos que uma crença central está errada sem algo para sustentar isso.

Basta olhar para as sessões de comentários nas várias postagens do blog, o envio de um link pode não ser suficiente. Crenças antigas etc ... Algumas pessoas não estão convencidas de que é um problema. Veja: Seção de comentários em todas as postagens do blog nolock que eu li.

Atualmente, alguns outros DBAs estão lutando com um impasse misterioso. Como se determina se NOLOCKs são a fonte?

Foi sugerido examinar XML de rastreamentos etc., mas isso não indica explicitamente que os impasses estão causando o problema, certo? Eu nunca vi mensagens de erro tão simples. isso é verdade?

De que outra forma esses impasses poderiam ser fixados nisso?

Instruções DDL como CREATEseria uma pista. Existe alguma saída que eu possa apontar ou algum dado que eu possa encontrar que ajude a corroborar minha teoria antes de eu acionar o alarme?

Ou estou executando sinalizadores de rastreamento ou eventos estendidos para identificar o que está executando quando ocorrem os conflitos e deduzindo das instruções DDL?

Observando todas as diferentes maneiras pelas quais os dados podem ser confundidos com dicas nolock, parece um problema difícil de definir de maneira decisiva.

Respostas:


16

O arquiteto responsável como insiste NOLOCKé o caminho a percorrer. Recomenda com todas as consultas ad-hoc e sempre que consultar a produção. Eu não vi um broche sem dicas nolock em todas as mesas.

Desculpe ouvir isso. Isso é muito bem considerado universalmente como um antipadrão entre os especialistas em SQL Server, mas pode não haver nada que você possa fazer para mudar os fatos no local se a prática for realmente arraigada e com base nas crenças sinceras e profundas de uma pessoa .

A pergunta diz que "enviar um link pode não ser suficiente", mas não está claro o que você deseja. Poderíamos escrever o argumento mais convincente do mundo em uma resposta aqui, e você ainda ficaria "enviando um link" para ele. Por fim, ninguém aqui pode saber qual conjunto de argumentos será bem-sucedido em sua situação específica (se houver).

No entanto, os itens a seguir abrangem a maioria dos pontos que algumas pessoas consideram persuasivas o suficiente para mudar uma prática anteriormente comum:

Mesmo assim, talvez você não consiga 'vencer' essa batalha. Eu trabalhei em um ambiente que fez isso, entendi os riscos e as razões para não fazê-lo, mas continuei assim mesmo. Eram pessoas inteligentes e lógicas, mas no final era um ambiente em que não podia ser feliz trabalhando.

Atualmente, alguns outros DBAs estão lutando com um impasse misterioso. Como se determina que NOLOCKssão a fonte?

O padrão mais usual (talvez mais prevalente no passado) em que as NOLOCKdicas são introduzidas na tentativa de reduzir a incidência de impasses. Isso pode 'funcionar', pois reduzir o número de bloqueios compartilhados realizados naturalmente reduz as chances de bloqueios incompatíveis serem executados, mas não é uma boa solução para o problema subjacente e vem com todas as advertências observadas na seção anterior.

No entanto, as NOLOCKdicas podem introduzir novas maneiras de entrar em conflito. O uso de isolamento não confirmado de leitura pode remover uma condição de bloqueio transitório (resolvida quando o recurso contencioso se torna disponível) em um conflito não resolvível (onde nenhum garçom pode progredir) simplesmente porque a contenção agora acontece em um ponto diferente, onde, por exemplo, operações de gravação em uma ordem diferente sobreposição. Dave Ballantyne tem um exemplo aqui:

Para obter conselhos mais gerais sobre como lidar com conflitos, recomendo o seguinte como ponto de partida:

Você também deve se familiarizar com a documentação:

  • Impasse (e todos os três subtópicos)

Outros recursos úteis:


5
"Mesmo assim, talvez você não consiga 'vencer' essa batalha. Eu trabalhei em um ambiente que fez isso, entendi os riscos e as razões para não fazê-lo, mas continuei assim mesmo assim. Eram pessoas brilhantes e lógicas, mas no final, era um ambiente em que não podia ser feliz trabalhando ". Esta provou ser a resposta correta.
user238855
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.