journal des transactions en RAM ou fichier physique?

9

Je suis un débutant en transaction, juste une question sur le journal des transactions. Nous savons que lorsque nous validons une transaction, les modifications sont écrites dans le journal des transactions, mais le journal des transactions est-il en RAM ou dans des fichiers physiques? Si elle se trouve dans la RAM et lorsque la défaillance du système se produit, la RAM sera évidemment effacée afin que nous perdions les informations de transaction, alors comment récupérer le commit?


la source

Réponses:

15

Vous pouvez trouver un guide assez complet sur cette question ici , mais pour résumer, SQL Server ne rendra pas le contrôle à l'application qui a validé une transaction tant que cette transaction n'a pas été durcie sur le disque. Plus précisément, une fois qu'il a été durci dans le fichier journal des transactions, le contrôle peut être retourné.

À ce stade, les données peuvent ne pas être renforcées dans le fichier de données, elles peuvent toujours se trouver dans le cache du tampon de données, mais parce qu'elles ont été renforcées dans le journal des transactions, la récupération de la base de données, en cas d'échec, peut récupérer ce transaction et de conserver les modifications en toute sécurité.

Il existe un cache de tampon de journal en mémoire utilisé pour réduire les impacts sur les performances des écritures séquentielles dans les journaux de transactions. Le tampon est vidé sur le disque sous plusieurs conditions, mais l'une d'elles est une validation de transaction. Tant que ces données n'ont pas été renforcées, le contrôle n'est pas retourné à l'appelant, donc même si vous avez un échec lors de ce vidage de tampon, la cohérence transactionnelle est maintenue car cette transaction n'est pas encore considérée comme validée. Vous perdrez les modifications de données dans cette transaction, mais comme elle n'a pas été validée, votre application considérera déjà ces modifications comme perdues car la validation n'a jamais été terminée.

HandyD
la source
2
Documenté ici: docs.microsoft.com/en-us/sql/relational-databases/…
David Browne - Microsoft
4

Une base de données est constituée de deux fichiers, un fichier de données et un fichier journal des transactions. Ceux-ci sont stockés sur disque.

Chaque base de données possède un cache de journaux en RAM, lorsqu'une transaction est validée, elle est déplacée vers le cache de journaux en attendant d'être vidée sur le disque. Par conséquent, temporairement, lorsqu'une transformation a été validée et attend d'être nettoyée sur le disque, elle est en mémoire, mais elle est finalement stockée sur disque dans le fichier, pas en RAM.

Je simplifie trop ici, je vous suggère de lire les journaux de transactions, je recommande ici une des conférences de Paul Randals

https://youtu.be/LvlFgxZZOj4

Kevin
la source
@kevinwhat Merci pour votre réponse. Donc, si nous validons une transaction et qu'elle est mise à jour dans le cache de journaux, le système échoue avant que le cache de journaux ne soit vidé sur le disque, alors comment pouvons-nous récupérer la transaction?
1
@slowjams dans ce cas, les modifications apportées à la transaction seraient annulées, car elles n'étaient pas stables sur le disque dans le journal au moment où le crash s'est produit.
Sean Gallardy - Utilisateur retraité
3
slowjamsm ce que vous décrivez ne se produit pas. La validation est synchrone - elle ne se termine que lorsque tous les enregistrements du journal jusqu'à ce moment ont été écrits sur le disque ("durci").
Tibor Karaszi
0

Comme écrit par les autres personnes, le journal des transactions sera toujours écrit sur le disque, avant un COMMITretour de contrôle à votre application. Pour cette raison, le fichier journal doit toujours être placé sur un SSD rapide.

Mais par souci d'exhaustivité: avec au moins Windows Server 2016 plus SQL Server 2016, vous pouvez ajouter des NVDIMM (DIMM non volatile = Flash ou RAM sauvegardée par batterie) à votre serveur. Dans ce cas, SQL Server utiliserait ces NVDIMM pour placer la queue du journal des transactions "à chaud" sur les NVDIMM, car ils survivent à un événement de mise hors tension par définition.

Cela augmenterait considérablement la vitesse d'écriture (car la RAM est beaucoup plus rapide que même un SSD), mais vous ne le mentionnerez que sur une base de données avec de nombreuses petites écritures / validations (par exemple, la base de données derrière une boutique en ligne occupée ou un jeu en ligne avec de nombreux joueurs concurrents).

Thomas Franz
la source
3
Ce n'est pas vraiment une réponse à la question, c'est une prise pour des disques plus rapides. Les journaux n'ont pas toujours besoin d'être stockés rapidement, il y a de nombreuses raisons commerciales pour qu'ils ne le soient pas. Si vous voulez acheter rapidement, si vous n'avez pas besoin de vitesse ....
James Jenkins