As gravações do banco de dados do SQL Server são mais lentas com o isolamento de instantâneo?


8

Eu tenho muitos impasses acontecendo no meu sistema.

Eu gostaria de usar o isolamento de instantâneo para corrigi-los, mas meu DBA tem reservas.

Uma de suas preocupações é que o isolamento do instantâneo diminua a velocidade de gravação. Isso ocorre porque ele precisa gravar no cache e, em seguida, no TempDb (versão de linha) e, em seguida, pode retornar ao chamador.

Uma gravação "normal" pode simplesmente gravar no cache e depois ser concluída.

É assim que o controle de versão de linha funciona? Ou é mais complexo que isso? De alguma forma, faz isso em paralelo?

Ou as gravações são mais lentas com o isolamento de instantâneo?


2
Um problema a ser observado quando você ativar o isolamento de instantâneo: o tamanho da sua linha aumentará em 14 bytes. Certifique-se de ter planejado esse aumento de capacidade e todas as páginas resultantes divididas.
StanleyJohns

Respostas:


14

é porque ele precisa gravar no cache e no TempDb (versão de linha) e, em seguida, pode retornar ao chamador.

Não, isso está incorreto. De alguma forma, implica que gravações na presença de controle de versão têm maior latência, pois cada gravação precisa tocar no disco (para tempdb), o que não é verdade. A gravação no tempdb também é uma gravação no 'cache'. A única 'espera' ocorre no momento do COMMIT, quando o log precisa ser protegido. É verdade que, com o controle de versão, o log do banco de dados e o tempdb precisam ser reforçados, mas isso não implica necessariamente uma latência mais alta (a IO deve ser paralela em diferentes caminhos de armazenamento, o tempdb é armazenado em uma unidade separada do LDF usado com muita freqüência, direita?). Para obter uma explicação completa, leia Como funciona: apresentação de E / S do SQL Server de Bob Dorr. Espero realmente que o seu DBA entenda isso melhor do que você o está transmitindo aqui.

Como mencionei em seu outro post: o snapshot não tem custo para INSERTS e o custo de atualizações e exclusões pode ser facilmente mitigado. O uso do recurso de controle de versão de linha explica as compensações. Nesse momento, você provavelmente deve testar com uma carga de trabalho realista, que é a única maneira de avaliar adequadamente o impacto que ocorreria.


4
Aliás, considere o seguinte: você, ou seu DBA, já usou Triggers nos últimos 7 anos? Desde o SQL 2005, os gatilhos são implementados usando o instantâneo nos bastidores. O mesmo acontece se você já usou a reconstrução de índice online ou MARS . Que tal se você verificar agora sys.dm_db_file_space_usageno seu servidor de produção. Se version_store_reserved_page_countfor diferente de zero, você já está usando o versionstore .
Remus Rusanu

Eu não acho que o log tempdb precise ser reforçado porque a refazer nunca é executada no tempdb. Portanto, a sobrecarga é ainda menor.
usr

0

Acredito que existem outros problemas no aplicativo se você estiver obtendo impasses. O isolamento de instantâneo geralmente ajuda a reduzir os bloqueios de espera, mas a raiz dos conflitos geralmente são métodos de acesso diferentes no aplicativo, que devem ser evitados seguindo um padrão consistente. As discussões sobre impasses são complicadas e há muitos recursos dedicados a elas.

Seu DBA está certo em ter algumas preocupações sobre como alterar o nível de isolamento para captura instantânea, pois aumenta a carga no tempDB. Eu recomendo ir para o isolamento de snapshots em geral, mas acho que isso é apenas uma parte dos seus impasses. Você pode acabar com gravações sujas, em que uma transação atualiza a linha A e B e outra transação atualiza a linha B e A.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.