Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Concorrência é a capacidade de duas transações utilizarem os mesmos dados simultaneamente, e com o aumento do isolamento das transações, geralmente ocorre uma redução na concorrência. Isso ocorre porque o isolamento da transação geralmente é implementado com o bloqueio de linhas e, à medida que mais linhas são bloqueadas, menos transações podem ser concluídas sem serem bloqueadas pelo menos temporariamente por uma linha bloqueada. Embora a simultaneidade reduzida seja geralmente aceita como uma compensação para os níveis de isolamento de transação mais altos necessários para manter a integridade do banco de dados, ele pode se tornar um problema em aplicativos interativos com atividade de leitura/gravação alta que usam cursores.
Por exemplo, suponha que um aplicativo execute a instrução SQL SELECT * FROM Orders. Ele chama SQLFetchScroll para rolar ao redor do conjunto de resultados e permite que o usuário atualize, exclua ou insira pedidos. Depois que o usuário atualiza, exclui ou insere um pedido, o aplicativo confirma a transação.
Se o nível de isolamento for Leitura Repetível, a transação poderá - dependendo de como ela é implementada - bloquear cada linha retornada por SQLFetchScroll. Se o nível de isolamento for Serializável, a transação pode trancar toda a tabela Pedidos. Em ambos os casos, a transação libera seus bloqueios somente quando é confirmada ou revertida. Portanto, se o usuário gastar muito tempo lendo pedidos e muito pouco tempo atualizando, excluindo ou inserindo-os, a transação poderá bloquear facilmente um grande número de linhas, tornando-as indisponíveis para outros usuários.
Esse é um problema mesmo se o cursor for de leitura somente e o aplicativo permitir que o usuário leia apenas os pedidos existentes. Nesse caso, o aplicativo confirma a transação e libera bloqueios quando chama SQLCloseCursor (no modo de confirmação automática) ou SQLEndTran (no modo de confirmação manual).
Esta seção contém os seguintes tópicos.