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?
Respostas:
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.
fonte
sys.dm_db_file_space_usage
no seu servidor de produção. Seversion_store_reserved_page_count
for diferente de zero, você já está usando o versionstore .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.
fonte