log de transações na RAM ou arquivo físico?

9

Sou iniciante em transações, apenas uma pergunta no log de transações. Sabemos que, quando confirmamos uma transação, as alterações são gravadas no log de transações, mas o log de transações está na RAM ou nos arquivos físicos? Se estiver na RAM e quando ocorrer uma falha do sistema, obviamente, a RAM será apagada, de modo que perdemos as informações da transação, então como podemos recuperar a confirmação?


fonte

Respostas:

15

Você pode encontrar um guia bastante abrangente para essa pergunta aqui , mas, para resumir, o SQL Server não retornará o controle ao aplicativo que confirmou uma transação até que essa transação tenha sido protegida em disco. Especificamente, depois de endurecido no arquivo de log de transações, o controle pode ser retornado.

Os dados, neste momento, podem não estar protegidos no arquivo de dados, ainda podem estar no cache do buffer de dados, mas, como foram protegidos no log de transações, a recuperação do banco de dados, no caso de uma falha, pode recuperar isso. transação e persista as alterações com segurança.

Há um cache do buffer de log na memória usado para reduzir os impactos no desempenho das gravações sequenciais nos logs de transações. O buffer é liberado para o disco em várias condições, mas uma delas é uma confirmação de transação. Até que esses dados sejam protegidos, o controle não será retornado ao responsável pela chamada, portanto, mesmo se houver uma falha durante a liberação do buffer, a consistência transacional será mantida, porque essa transação ainda não foi considerada confirmada. Você perderá as alterações de dados nessa transação, mas como não foi confirmada, seu aplicativo já consideraria essas alterações perdidas, pois a confirmação nunca foi concluída.

HandyD
fonte
2
Documentado aqui: docs.microsoft.com/en-us/sql/relational-databases/…
David Browne - Microsoft
4

Um banco de dados é composto por dois arquivos, um arquivo de dados e um arquivo de log de transações. Estes são armazenados no disco.

Cada banco de dados possui um cache de log na RAM. Quando uma transação é confirmada, ela é movida para o cache de log aguardando a liberação para o disco. Portanto, temporariamente, quando uma transformação foi confirmada e aguarda a liberação para o disco, ela fica na memória; no entanto, no final, ela é armazenada no disco do arquivo, não na RAM.

Estou simplificando demais aqui, sugiro que você leia os logs de transações, recomendo uma das palestras de Paul Randals aqui

https://youtu.be/LvlFgxZZOj4

kevinnwhat
fonte
@kevinwhat Obrigado pela sua resposta. Portanto, se confirmarmos uma transação e ela for atualizada no cache de log, o sistema falhará antes que o cache do log seja liberado no disco, como podemos recuperar a transação?
11
@slowjams nesse caso, as alterações feitas pela transação seriam revertidas, pois não estavam estáveis ​​no disco no log no momento em que ocorreu a falha.
Sean Gallardy - Usuário aposentado
3
slowjamsm o que você descreve não acontece. A confirmação é síncrona - não termina até que todo o registro de log até esse momento tenha sido gravado no disco ("reforçado").
Tibor Karaszi 14/05/19
0

Conforme gravado pelas outras pessoas, o log de transações sempre será gravado no disco, antes que um COMMITcontrole retorne ao seu aplicativo. Por esse motivo, o arquivo de log deve sempre ser colocado em um SSD rápido.

Mas por uma questão de integridade: com pelo menos o Windows Server 2016 mais o SQL Server 2016, você pode adicionar NVDIMMs (DIMM não volátil = RAM suportada por bateria ou Flash) ao servidor. Nesse caso, o SQL Server usaria esses NVDIMMs para colocar a cauda do log de transações "quente" nos NVDIMMs, pois eles sobrevivem a um evento de desligamento por definição.

Isso aumentaria drasticamente a velocidade das gravações (já que a RAM é muito mais rápida do que um SSD), mas você a mencionará apenas em um banco de dados com muitas pequenas gravações / confirmações (por exemplo, o banco de dados atrás de uma loja on-line movimentada ou um jogo on-line com muitos concorrentes).

Thomas Franz
fonte
3
Esta não é realmente uma resposta para a pergunta, é um plug para discos mais rápidos. Os logs nem sempre precisam estar em armazenamento rápido; há muitas razões comerciais para que não estejam. Se você quer rapidamente comprar rápido, se você não precisa de velocidade ....
James Jenkins