Commit vs Fast Commit vs Commit Cleanout dans la base de données Oracle


12

Je me demandais si quelqu'un pouvait vérifier ma compréhension des différences entre ces 3 termes concernant les bases de données Oracle.

De nombreuses sources confondent ces termes et ne les expliquent pas en détail, il était donc un peu difficile de trouver des informations.

À partir de ce que je rassemble:

  1. La validation et la validation rapide sont exactement la même chose, toutes les validations sont des validations rapides.
  2. Une validation rapide met à jour essentiellement l'indicateur dans la table de transactions de l'en-tête de segment d'annulation / annulation pour indiquer que la transaction a été validée. Cependant, le bloc réel n'est pas revu, ce qui signifie que l'adresse d'octet d'annulation (UBA) dans la liste de transactions intéressée (ITL) qui se trouve dans l'en-tête du bloc de données pointe toujours vers la table de transactions du segment d'annulation correspondant. De plus, les octets de verrouillage des lignes correspondantes ne sont pas libérés et le nombre de verrous dans l'ITL est inchangé (lignes toujours verrouillées).
  3. Dans un nettoyage de validation, le bloc est revisité et l'ITL est mis à jour avec le SCN de validation. Cependant, le nombre de verrous dans l'ITL et l'octet de verrouillage stocké avec chaque ligne ne sont toujours pas mis à jour (ligne toujours verrouillée comme dans la validation rapide), cela ne génère pas de rétablissement même si le bloc est modifié.
  4. Les blocs qui ont été validés normalement (== validés rapidement) subiront un nettoyage de bloc différé lors de leur prochain contact (et généreront un rétablissement).
  5. Les blocs qui ont été soumis à un nettoyage de validation subiront un nettoyage de bloc de journalisation différé lors de leur prochain contact (et générer un rétablissement).

J'espère que quelqu'un pourra vérifier ces points! Merci!

Réponses:


6

Vous avez les bases. Il n'y a qu'un seul type de commit (pas normal , rapide ...).

du doc concepts :

Lorsqu'une transaction est validée, les actions suivantes se produisent:

  • Un numéro de modification du système (SCN) est généré pour le COMMIT.

    La table de transaction interne pour les enregistrements d'espace de table d'annulation associés que la transaction a validés. Le SCN unique correspondant de la transaction est affecté et enregistré dans la table des transactions. Voir "Niveau d'isolement sérialisable".

  • Le processus d'écriture de journal (LGWR) écrit les entrées de journal de rétablissement restantes dans les tampons de journal de rétablissement dans le journal de rétablissement en ligne et écrit le SCN de transaction dans le journal de rétablissement en ligne. Cet événement atomique constitue le commit de la transaction.

  • Oracle Database libère les verrous détenus sur les lignes et les tables.

    Les utilisateurs mis en file d'attente en attente de verrous détenus par la transaction non validée sont autorisés à poursuivre leur travail.

  • Oracle Database supprime les points de sauvegarde.

  • Oracle Database effectue un nettoyage de validation.

    Si des blocs modifiés contenant des données de la transaction validée sont toujours dans le SGA et si aucune autre session ne les modifie, la base de données supprime les informations de transaction liées au verrouillage des blocs. Idéalement, le COMMIT nettoie les blocs afin qu'un SELECT ultérieur n'ait pas à effectuer cette tâche.

Le nettoyage (complet avec redo) sera donc effectué lors de la validation si les blocs sont toujours dans le SGA.

Dans les systèmes actifs, il est courant que les blocs avec des transactions non validées soient écrits sur le disque et vidés de la SGA. Dans ce cas, le bloc est laissé tel quel et la prochaine requête qui touche le bloc effectuera un nettoyage de bloc retardé (votre point 5 ne se produit pas dans tous les cas).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.