web-dev-qa-db-fra.com

Journal de transaction tempdb ne libère pas d'espace

Chaque fois que je termine une transaction dans TEMPDB, le journal TEMP augmente, mais le journal ne semble pas libérer l'espace une fois la transaction terminée. Le pourcentage d'utilisation du journal est de 43,4%, mais semble augmenter d'environ 4% d'incréments.

Quand je cherche des transactions ouvertes (sys.dm_exec_sessions), il n'y en a pas. Pourtant le log_reuse_wait_desc dans sys.databases montre 'active_transaction'. Quand j'exette la sys.dm_tran_active_transactions DMV, il ne montre que la table de travail.

Je ne suis pas sûr de la façon dont je puisse libérer cet espace du journal de transaction tempdb.

Je viens de courir un point de contrôle manuel et qui semble libérer de l'espace, donc je ne suis pas sûr de la raison pour laquelle l'espace n'est pas libéré de sa propre place.

1
Krishnp92

Les log_reuse_wait_desc est uniquement mis à jour lorsque SQL Server tente d'effacer le journal. En d'autres termes, ce n'est pas nécessairement une vue "en direct" de savoir si le journal peut être nettoyé ou non. Paul Randal explique que dans son blog post " pourquoi log_reuse_wait_desc disait log_backup après avoir effectué une sauvegarde de journal? ".

Dans le cas de tempdb, qui utilise le modèle de récupération SIMPLE, SQL Server tente d'effacer le journal chaque fois qu'un CHECKPOINT est émis. C'est pourquoi faire un manuel CHECKPOINT libère l'espace, comme vous l'avez mentionné.

SQL Server est beaucoup moins agressif à propos de faire automatique CHECKPOINTs sur tempdb, les deux, car il utilise le modèle de récupération SIMPLE, et parce que c'est par définition des informations "temporaires". Donc, il n'y a pas besoin de le persister constamment au disque. Ceci est une optimisation des performances spécifique à tempdb.

Par - n autre blog post de Paul Randal , les détails sont les suivants:

  • automatique CHECKPOINT Opérations sur tempdb ne sont effectuées que lorsque l'utilisation du journal atteint 70%
  • les pages sales ne sont pas écrites sur disque sur automatique CHECKPOINT (son objectif principal pour effacer le journal)

La "table de travail" dans dm_tran_active_transactions Sont un comportement normal et ne devrait pas empêcher le journal. Vous pouvez en savoir plus à ce sujet dans ce Q & A:

SQL Server SyS.dm_Tran_Active_Transactions Table de travail de transaction longue en cours d'exécution

2
Josh Darnell