Compartilhar via


Configurar o nível de isolamento da transação

Para definir o nível de isolamento da transação, um aplicativo usa o atributo de conexão SQL_ATTR_TXN_ISOLATION. Se a fonte de dados não der suporte ao nível de isolamento solicitado, o driver ou a fonte de dados poderá definir um nível mais alto. Para determinar a quais níveis de isolamento de transação uma fonte de dados dá suporte e qual é o nível de isolamento padrão, um aplicativo chama SQLGetInfo com as opções SQL_TXN_ISOLATION_OPTION e SQL_DEFAULT_TXN_ISOLATION, respectivamente.

Níveis mais altos de isolamento de transações oferecem a maior proteção à integridade dos dados do banco de dados. As transações serializáveis com certeza não são afetadas por outras transações, portanto, com certeza mantêm a integridade do banco de dados.

Porém, um nível mais alto de isolamento de transações pode causar um desempenho mais lento, pois aumenta as chances de que o aplicativo precise esperar a liberar de bloqueios de dados. Um aplicativo pode especificar um nível menor de isolamento para aumentar o desempenho nos seguintes casos:

  • Quando é possível garantir que não há outras transações que possam interferir nas transações de um aplicativo. Essa situação acontece apenas em circunstâncias limitadas, como quando uma pessoa em uma pequena empresa mantém arquivos dBASE que contêm dados pessoais em um computador e não compartilha esses arquivos.

  • Quando a velocidade é mais crítica do que a precisão e qualquer erro provavelmente é pequeno. Por exemplo, suponha que uma empresa faça diversas vendas pequenas e que vendas grandes sejam raras. Uma transação que estima o valor total de todas as vendas em aberto pode usar com segurança o nível de isolamento Leitura não confirmada. Embora a transação inclua ordens que estão sendo abertas ou fechadas e que depois são revertidas, elas geralmente se cancelariam e a transação seria muito mais rápida porque não é bloqueada toda vez que encontra tal ordem.

Confira Simultaneidade otimista para obter mais informações.