none
Dúvida com cláusula SELECT usando (XLOCK) e (NOLOCK) RRS feed

  • Pergunta

  • Boa tarde a todos,

    Alguém poderia me explicar qual a função ou objetivo do XLOCK e NOLOCK em consultas?

    Peguei um código semelhantes a este e não sei o que significa:

    BEGIN TRANSACTION
    
    SELECT * FROM ##T2 WITH (XLOCK)
    
    e
    
    BEGIN TRANSACTION
    
    SELECT * FROM ##T2 WITH (NOLOCK)

    Eu sei que o ## usamos para tabelas temporárias, até aí tudo bem, mas não entendi o porquê desses dois predicados diferentes dentro dessas transação XLOCK e NOLOCK.

    Grato

    quinta-feira, 14 de janeiro de 2016 16:14

Respostas

  • LWMN,

    Estas duas cláusulas são chamadas de hints (dicas) de tabela.

    Existem várias hints de tabela e essas duas tem funções específicas:

    NOLOCK: É equivalente ao nível de isolamento READ UNCOMMITTED permitindo DIRTY READS (Leituras de registros ainda não commitados)

    XLOCK: Bloqueios exclusivos serão utilizados e mantidos até o final da transação.

    Dê uma olhada no link abaixo:

    https://msdn.microsoft.com/pt-br/library/ms187373%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396


    Felipe Lauffer MCSA: SQL Server | MCP


    • Editado FLauffer quinta-feira, 14 de janeiro de 2016 16:26
    • Sugerido como Resposta Tiago_Neves quinta-feira, 14 de janeiro de 2016 16:53
    • Marcado como Resposta LWMN terça-feira, 19 de janeiro de 2016 01:23
    quinta-feira, 14 de janeiro de 2016 16:23
  • LWMN,

    Importante destacar que este tipo de Hint Table pode ocasionar em algumas situações junções forçadas de tabelas, o que obrigará o SQL Server a mudar totalmente a forma de processamento e execução da sua query, em muitos casos impactando totalmente na performance da sua query.

    Veja este link: http://www.sqlservercentral.com/Questions/Tags/Query+Optimization/


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta LWMN terça-feira, 19 de janeiro de 2016 21:13
    terça-feira, 19 de janeiro de 2016 13:54
  • LWMN,

    Não deve ser adotada como padrão em todas as consultas, mas em casos específicos dependendo da necessidade pode ser utilizado sim sem nenhum problema, desde que antes passe por um procedimento de testes.


    Felipe Lauffer MCSA: SQL Server | MCP

    • Marcado como Resposta LWMN terça-feira, 19 de janeiro de 2016 21:12
    terça-feira, 19 de janeiro de 2016 10:32

Todas as Respostas

  • LWMN,

    Estas duas cláusulas são chamadas de hints (dicas) de tabela.

    Existem várias hints de tabela e essas duas tem funções específicas:

    NOLOCK: É equivalente ao nível de isolamento READ UNCOMMITTED permitindo DIRTY READS (Leituras de registros ainda não commitados)

    XLOCK: Bloqueios exclusivos serão utilizados e mantidos até o final da transação.

    Dê uma olhada no link abaixo:

    https://msdn.microsoft.com/pt-br/library/ms187373%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396


    Felipe Lauffer MCSA: SQL Server | MCP


    • Editado FLauffer quinta-feira, 14 de janeiro de 2016 16:26
    • Sugerido como Resposta Tiago_Neves quinta-feira, 14 de janeiro de 2016 16:53
    • Marcado como Resposta LWMN terça-feira, 19 de janeiro de 2016 01:23
    quinta-feira, 14 de janeiro de 2016 16:23
  • LWMN,

    Estas duas cláusulas são chamadas de hints (dicas) de tabela.

    Existem várias hints de tabela e essas duas tem funções específicas:

    NOLOCK: É equivalente ao nível de isolamento READ UNCOMMITTED permitindo DIRTY READS (Leituras de registros ainda não commitados)

    XLOCK: Bloqueios exclusivos serão utilizados e mantidos até o final da transação.

    Dê uma olhada no link abaixo:

    https://msdn.microsoft.com/pt-br/library/ms187373%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396


    Felipe Lauffer MCSA: SQL Server | MCP


    Obrigado FLauffer pela ajuda. Deu para entender bem melhor o funcionamento.

    Esta forma é muito utilizada?

    terça-feira, 19 de janeiro de 2016 01:22
  • LWMN,

    Não deve ser adotada como padrão em todas as consultas, mas em casos específicos dependendo da necessidade pode ser utilizado sim sem nenhum problema, desde que antes passe por um procedimento de testes.


    Felipe Lauffer MCSA: SQL Server | MCP

    • Marcado como Resposta LWMN terça-feira, 19 de janeiro de 2016 21:12
    terça-feira, 19 de janeiro de 2016 10:32
  • LWMN,

    Importante destacar que este tipo de Hint Table pode ocasionar em algumas situações junções forçadas de tabelas, o que obrigará o SQL Server a mudar totalmente a forma de processamento e execução da sua query, em muitos casos impactando totalmente na performance da sua query.

    Veja este link: http://www.sqlservercentral.com/Questions/Tags/Query+Optimization/


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta LWMN terça-feira, 19 de janeiro de 2016 21:13
    terça-feira, 19 de janeiro de 2016 13:54
  • LWMN,

    Importante destacar que este tipo de Hint Table pode ocasionar em algumas situações junções forçadas de tabelas, o que obrigará o SQL Server a mudar totalmente a forma de processamento e execução da sua query, em muitos casos impactando totalmente na performance da sua query.

    Veja este link: http://www.sqlservercentral.com/Questions/Tags/Query+Optimization/


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Junior, obrigado pelas informações. Já vão me ajudar bastante.
    terça-feira, 19 de janeiro de 2016 21:14
  • LWMN,

    Não deve ser adotada como padrão em todas as consultas, mas em casos específicos dependendo da necessidade pode ser utilizado sim sem nenhum problema, desde que antes passe por um procedimento de testes.


    Felipe Lauffer MCSA: SQL Server | MCP

    Obrigado FLauffer, vou seguir os seus conselhos.
    terça-feira, 19 de janeiro de 2016 21:16