Articles

Usando COM (NOLOCK)

Posted by admin
  • Postado em novembro 30, 2012 por Derek Dieter
  • 20

WITH (nolock) dica é uma explícita de comando direcionado a uma determinada tabela ou modo de exibição utilizado para definir o nível de isolamento de transação com a tabela ou tabelas em um modo de exibição para uma consulta. Uma vez emitidos, os bloqueios não serão usados contra os dados dentro da tabela. A vantagem disso é que não há nenhuma chance de um impasse ocorrerá contra quaisquer outras consultas correndo contra a mesa., A outra vantagem indireta é que menos memória será usada, a fim de manter bloqueios contra esses dados.

exemplo:

a configuração de nocaute acima é explícita para a tabela que está sendo colocada contra.,s não irá ocorrer em relação a outras consultas em execução contra os mesmos dados

  • Menos memória é utilizada devido à falta de linha, uma página ou um intervalo de nível de fecho
  • Normalmente permite muito maior concorrência devido à menor pegada
  • Desvantagens:

    • não consolidados os dados podem ser lidos, levando a leituras sujas
    • Explícito dicas contra uma tabela são geralmente uma má prática

    de Uso

    Na maioria dos lugares que eu tenho trabalhado com a (nolock) tem sido uma prática geralmente aceite, nas áreas específicas do sistema que não são sensíveis a dados, sendo um pouco fora de sincronia., No entanto, é importante saber onde as coisas podem correr mal. A maior bandeira vermelha que eu posso pensar para não usar NOLOCK seria um sistema que usa transações explícitas (BEGIN TRAN ..Fim TRAN) ou uso pesado de gatilhos. Várias declarações executadas dentro de uma transação experimentam um atraso de tempo de suas operações de inserção / atualização / DELETE, no entanto, as alterações são cometidas imediatamente após o COMMIT., As declarações que consultam os dados alterados usando o nível de isolamento de compromisso lido serão bloqueadas de ver essas alterações até o commit, enquanto que a leitura sem compromisso (NOLOCK) verá as alterações imediatamente independentemente de quando o commit ocorre. A suposição aqui é que se seu sistema usa transações explícitas ou se baseia em gatilhos pesadamente, pode ser plausível assumir nolock não é uma boa idéia.,

    não use COM (NOLOCK) sem compreender totalmente as implicações de uma leitura suja

    Exemplo de uma Leitura Suja

    O exemplo a seguir vai abrir uma transação, a fim de atualizar a coluna nome em nossa tabela temporária global: ##meu_nome

    SE OBJECT_ID(‘tempdb..,##meu_nome’) NÃO É NULO
    BEGIN
    DROP TABLE ##meu_nome;
    END;

    CREATE TABLE ##meu_nome
    (
    id int,
    nome varchar(20)
    );

    INSERT INTO ##meu_nome (id, nome)
    values (1, ‘dexter’);

    BEGIN TRAN

    a ACTUALIZAÇÃO ##meu_nome
    SET nome = ‘derek’
    WHERE id = 1;

    Aqui temos deixou uma transação aberta em ##meu_nome, de modo que a linha é bloqueada exclusivamente e não pode ser lido por qualquer transação utilizando o nível de isolamento read committed ou superior.,

    Aqui você verá que a primeira consulta irá mostrar o valor atualizado ‘derek’, enquanto que a consulta sem o nolock irá ficar à espera que a transação seja lançada. Os dados que foram lidos com sucesso são considerados dados Sujos. Isto porque pode haver outras tabelas que precisam ser atualizadas que se relacionam com o registro “derek” (id=1), a fim de mostrar uma visão consistente de todos os dados relacionados com “derek”.

    finalmente vamos enviar a nossa transacção dentro da nossa janela original e você verá que agora é capaz de consultar os dados sem usar (nolock).,

    COMMIT TRAN
    SELECT * FROM #my_name;

    Filed under TSQL

    Leave A Comment