/ / como aumentar as operações de atualização para uma tabela de servidor sql? - sql-server, escalabilidade, impasse, atualizações

como escalar as operações de atualização para uma tabela do SQL Server? - sql-server, escalabilidade, impasse, atualizações

Como projetar seu banco de dados para este requisito?

Os dados estão em uma única tabela. É muito alto também. Meu aplicativo inicia muitos threads, todos os quais se conectam ao banco de dados e atualizam a mesma tabela; cada tópico tentaria atualizar uma linha diferente ...

No entanto, a observação foi que a operação de atualização não foi concluída porque entrou em um cenário de conflito. Mais tarde descobri que isso provavelmente se devia ao mecanismo de escalonamento de bloqueios do sql server.

Portanto, meu requisito em resumo é que meu banco de dados deve lidar com um grande número de operações de atualização em uma única tabela. Quais são as estratégias para lidar com isso?

Grandes operações de atualização, imagino, tambémcausar um gargalo devido a E / S. Porque um disco rígido clássico tem uma única cabeça que busca os dados armazenados em um disco magnético que gira em altas rotações por segundo. Não está ciente do avanço tecnológico nesta área, mas um designer de banco de dados não se preocuparia também com essas questões?

Respostas:

0 para resposta № 1

Seria bom se você fornecesse números enormese enorme. Contanto que a proporção do total de linhas e atualizações seja grande e as atualizações sejam distribuídas de maneira bastante uniforme para todos os seus índices, deve haver muito pouca contenção.

A razão pela qual a indexação ajuda é que você podeencontre a linha exata que você precisa atualizar sem bloquear todas as outras. Portanto, cada uma de suas milhares de atualizações simultâneas adquiriria exatamente um bloqueio exclusivo, alguns intents exclusivos e um monte de bloqueios compartilhados. O outro motivo pelo qual a indexação ajuda é que o tempo gasto em cada consulta é minúsculo, reduzindo o número de transações ativas e a chance de conflito.

Como suas atualizações atualizam apenas uma única linha, érealmente difícil tê-los em um deadlock se você tiver o índice perfeito: atualize tudo, exceto a chave clusterizada e apenas ter o índice clusterizado na tabela. Se você tiver vários índices, as atualizações podem pegar partes de diferentes índices e bloquear umas às outras.

Se você realmente está tendo problemas de disco, então vocêprecisa obter mais RAM. A menos que sua carga seja realmente aleatória, sem qualquer localidade temporal, a maioria de suas atualizações serão servidas a partir da RAM, e o único acesso ao disco que você precisa é escrever o log de transações, que é um log somente de anexos que não exige que o disco busque aleatoriamente.

Então, se você está falando de uma estratégia geral parafazendo isso de forma ideal, eu teria uma chave de cluster substituta, certificaria-me de que as atualizações buscassem apenas nesta chave, não atualizariam esta chave, não teriam outros wueires e teriam apenas este índice na tabela. Então, cada atualização tem exatamente um bloqueio de linha exclusivo e nenhum bloqueio de página / extensão. Nunca haverá um impasse.


1 para resposta № 2

Alguém me disse que a indexação ajuda ... mas acho difícil de acreditar ...

http://www.mssqltips.com/sqlservertip/2517/using-a-clustered-index-to-solve-a-sql-server-deadlock-issue/


0 para resposta № 3

Existem algumas maneiras de lidar com esse problema

1) Se suas atualizações não precisam ser refletidasimediatamente na mesa, então você pode abandonar o sql server e usar a tecnologia de big data, como Hadoop ou green plum, que cuidará disso de forma eficaz para você.

2) Se um não satisfizer, tente atualizar com (ROWLOCK), em geral o bloqueio de página ou bloqueio de tabela será assumido pelo servidor sql, ao fazer uma atualização, a dica acima pode reduzir os bloqueios mortos.

3) Certifique-se de que sua atualização pode ser feita rapidamente (ajuste de desempenho).

4) Particione sua tabela com base em bons critérios, de modo que sua tabela única se comporte como várias tabelas e reduza a contenção.