Pergunta

Eu gostaria de fazer algumas perguntas sobre o mecanismo de travamento do servidor SQL

  1. Se eu não estiver usando a dica de bloqueio com a instrução SQL, o SQL Server usa a dica do Pagelock por padrão. Estou certo??? Se sim, então por quê? Pode ser devido ao fator de gerenciar muitas bloqueios, essa é a única coisa que eu tomei como desvantagem, mas por favor me avise se existem outros. E também me diga se podemos alterar esse comportamento padrão, se for razoável.

  2. Estou escrevendo um aplicativo do lado do servidor, um servidor de sincronização (não usando o Sync Framework) e escrevi consultas de banco de dados no arquivo C# e usando a conexão ODBC para executá -las. Agora, a pergunta é qual é a melhor maneira de alterar o bloqueio padrão de uma página para manter as desvantagens em mente (por exemplo, adicionando dica de bloqueio nas consultas, é isso que estou planejando).

  3. E se uma consulta SQL (select/dml) estiver sendo executada sem o escopo da transação e instrução contiver dica de bloqueio, então que tipo de bloqueio será adquirido (por exemplo, compartilhado, atualização, exclusivo)? E enquanto no escopo da transação o nível de transação de isolamento tem impacto no tipo de bloqueio se a dica de rowlock estiver sendo usada.

  4. Por fim, se alguns pudessem me dar uma amostra para que eu pudesse testar e experimentar todos os cenários acima de mim mesmo (por exemplo, código de rede ou script SQL)

Obrigado Mubashar

Foi útil?

Solução

  1. Não.

  2. Deixe o mecanismo de banco de dados gerenciá -lo

  3. Veja o ponto 2

  4. Veja o ponto 2

Eu só usaria dicas de bloqueio se você quiser determinados comportamentos específicos, por exemplo, filas ou lê não bloqueio (sujo).

De maneira mais geral, por que você acha que o mecanismo de banco de dados não pode fazer o que deseja por padrão?

Outras dicas

O bloqueio padrão é bloqueio de linha não trava de página, embora a maneira pela qual o mecanismo de travamento funcione signifique que você estará colocando bloqueios em todos os objetos dentro da hierarquia, por exemplo, uma única linha colocará uma trava compartilhada na mesa, uma trava compartilhada ligada ligada a página e, em seguida, um bloqueio compartilhado na linha.

Isso permite que uma ação solicitando um bloqueio exclusivo na tabela para saber que ainda não pode tomar, pois existe um bloqueio compartilhado presente (caso contrário, ele teria que verificar todas as páginas / linha quanto a bloqueios.)

No entanto, se você emitir muitas bloqueios para uma consulta individual, ele executa a escalada de trava, o que reduz a granularidade da fechadura - e é assim que ele gerencia menos bloqueios. Isso pode ser desligado usando uma bandeira de rastreamento, mas eu não o consideraria.

Até que você saiba que você realmente tem um problema de escalada de bloqueio / bloqueio, o risco de otimizar prematuramente um problema inexistente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top