Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 19946|Resposta: 3

[Fonte] Bloqueios de banco de dados NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Copiar link]
Publicado em 14/01/2021 15:23:14 | | | |
SEM TRAVA
Quando essa opção é selecionada, o SQL Server lê ou modifica os dados sem nenhum bloqueio. Nesse caso, o usuário pode ler dados de uma Transação Não Comprometida ou Reverter, conhecido como "dados sujos".

TRAVA DE CONTENÇÃO
Quando essa opção é selecionada, o SQL Server mantém esse bloqueio compartilhado até o final de toda a transação, sem liberá-lo no caminho.

ATUALIZAÇÃO
Quando essa opção é selecionada, o SQL Server usa um bloqueio de modificação em vez de um bloqueio compartilhado ao ler dados e mantém esse bloqueio até o final de toda a transação ou comando. Essa opção garante que múltiplos processos possam ler dados ao mesmo tempo, mas apenas esse processo pode modificar os dados.

TABLOCK
Quando essa opção é selecionada, o SQL Server colocará um bloqueio compartilhado em toda a tabela até o término do comando. Essa opção garante que outros processos só possam ler e não modificar os dados.

PAGLOCK
Essa opção é a padrão e, quando selecionada, o SQL Server usa um bloqueio de página compartilhado.

TABLOCKX (Bloqueio de Mesa Exclusivo)
Quando essa opção é selecionada, o SQL Server colocará um bloqueio em toda a tabela até que o comando ou transação termine. Isso impedirá que outros processos leiam ou modifiquem os dados na tabela.

O HOLDLOCK mantém o bloqueio compartilhado até que toda a transação seja concluída e deve ser liberado assim que o objeto travado não for necessário, igual ao nível de isolamento da transação SERIALIZÁVEL

A instrução NOLOCK é executada sem emitir um bloqueio compartilhado, permitindo leituras sujas, que é igual ao nível de isolamento da transação READ UNCOMMITTED

O PAGLOCK usa múltiplos bloqueios de página onde um bloqueio de tabela é usado

O READPAST permite que o SQL Server pule linhas bloqueadas e execute transações, e para níveis de isolamento de transações READ UNCOMMITTED, pula apenas bloqueios RID, não travamentos de página, zona e tabela

O ROWLOCK impõe o uso de rowlocks

O TABLOCKX impõe o uso de um lock exclusivo em nível de tabela, que impede que qualquer outra transação utilize a tabela durante a transação

O UPLOCK força o uso de atualizações ao ler uma tabela sem um bloqueio compartilhado

Nota: A diferença entre bloquear uma tabela em um banco de dados
SELECT * FROM table WITH (HOLDLOCK) Outras transações podem ler a tabela, mas não podem atualizar ou excluir
SELECT * FROM tabela COM (TABLOCKX) Outras transações não podem ler, atualizar e excluir tabelas




Anterior:Display de Desktop Remoto Win10 com tela dupla
Próximo:.NET/C# Criar conta de carteira ETH e senha de verificação baseada no Nethereum [com código-fonte]
 Senhorio| Publicado em 14/01/2021 16:53:24 |
Teste a trava TABLOCKX

O SQL de teste é o seguinte:


Testando o Código C#:


Descoberta,Toda a tabela é bloqueada, e os dados só podem ser consultados quando a transação for executada, como mostrado na figura abaixo:



Exclua WITH(TABLOCKX) e atualize apenas os dados com ID 1, o teste é o seguinte:



Como as Tarefas 2 e 4 não envolvem dados com id 1, a consulta é muito rápida, e as tarefas 3 e 4 precisam esperar a transação ser concluída antes de consultar.

Comportamento ao modificar dados

Em uma transação de leitura comprometida que utiliza versionamento de linha, selecione as linhas a serem atualizadas usando uma varredura bloqueadora, onde um bloqueio de atualização (U-lock) é aplicado à linha de dados quando o valor dos dados é lido. Isso é o mesmo que uma transação de leitura comprometida que não usa versionamento de linha. Se uma linha de dados não atender aos critérios de atualização, um bloqueio de atualização é liberado nessa linha e a próxima linha é travada e escaneada.

Lock de Atualização (U): Um modo de bloqueio que previne deadlocks, onde duas transações leem um recurso de dados primeiro. No caso de modificação, o uso de bloqueios compartilhados e exclusivos às vezes causa bloqueios, enquanto o uso de bloqueios de atualização pode evitar a ocorrência de bloqueios. O lock de atualização do recurso só pode ser atribuído a uma transação por vez, e se o recurso precisar ser modificado, o bloqueio de atualização se torna um bloqueio exclusivo, caso contrário, ele se torna um bloqueio compartilhado.

O login do hiperlink está visível.

 Senhorio| Publicado em 28/01/2021 17:30:51 |
Questão:

udpate a
conjunto colunha1 = 1
onde idx = 1
Quando o sqlserver executa a instrução update, ele trava toda a tabela

Análise:

Estrutura do relógio,Sem uma chave primária, você não pode trancar apenas as fileiras
 Senhorio| Publicado em 02/05/2023 11:47:24 |
Otimização de Consultas do Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com