problema de bloqueio do shard do servidor sql

2

no meu aplicativo de rastreamento de veículos, eu estou usando o banco de dados sqlServer, que tem uma tabela altamente povoada e altamente acessada "VehilcePosition", que armazena todas as localizações de veículos. para mostrar as localizações mais recentes do veículo, tenho de consultar a tabela por auto-associação e a função de grupo MAX em dateTime. Eu já tinha colocado índices em colunas, mas a consulta de leitura leva algum tempo e adquire o bloqueio compartilhado, que bloqueia Inserção na tabela. Como esta tabela está sendo atualizada (INSERÇÃO de linhas) e Leia com mais freqüência. A maioria das aplicações pára devido a uma exceção de tempo limite devido ao bloqueio compartilhado durante o bloqueio de LEITURA e Exclusiva durante a gravação. Eu preciso de uma sugestão de como eu poderia otimizar meu banco de dados para evitar essa situação. Eu estou usando Core i7 PC (não máquina do servidor), existe apenas solução para atualizar o hardware para algumas máquinas servidor.

    
por abdul q 12.10.2012 / 08:20

2 respostas

3

O problema com o NOLOCK é que você receberá respostas erradas de vez em quando.

O hardware também não é o problema.

A melhor solução é usar o "Read Commited Snapshot Isolation" do SQL Server. Essa é uma configuração no nível do banco de dados que retorna ao leitor a versão mais recente de uma linha enquanto as linhas estão sendo atualizadas. Muitas vezes é a solução para esse tipo de problema.

Outra solução é usar o particionamento de tabela, mas esse é um recurso do Enterprise Edition (e Developer Edition). Com o particionamento de tabela no SQL 2008, você pode especificar o Auto de bloqueio de bloqueio, que escalará os bloqueios somente no nível da partição. Se você tiver partições suficientes (15.000 permitidas), a maioria das consultas não será bloqueada.

Mas o isolamento de instantâneo confirmado de leitura é a melhor solução.

    
por 15.10.2012 / 15:57
0

but reading query takes some time and acquires shared lock, which blocks Insertion in the table

Você não deseja os bloqueios, diga ao SQL Server para não colocar bloqueios lá. Há uma sugestão para isso.

I am using Core i7 PC (not server machine), is there only solution to upgrade hardware to some
server machines.

Aliás, trata-se mais de "aprender a usar o sql server apropriadamente lendo a documentação" que você está atualizando um novo hardware. NOLOCK, por exemplo, vem à minha mente como uma forma de dizer à consulta de leitura para não bloquear as linhas.

    
por 12.10.2012 / 09:42

Tags