web-dev-qa-db-fra.com

Comment trouver les transactions actives dans VLF?

Existe-t-il un moyen de trouver l'instruction T-SQL qui fait partie de la transaction active qui bloque la réutilisation du fichier journal de transaction VLFS?

J'effectue des sauvegardes TLog sur toutes les 15 minutes, mais parfois la requête suivante revient ACTIVE_TRANSACTION ou alors LOG_BACKUP (même telle est faite):

SELECT [name]
      ,[recovery_model_desc] 
      ,[log_reuse_wait_desc]
FROM [sys].[databases]

Si je cours DBCC Loginfo Je peux voir que les premières lignes et les dernières lignes ont statut 0.

4
gotqn

LOG_REUSE_WAIT_DESC montrera LOG_BACKUP À tout moment, au moins une transaction n'a pas été sauvegardée (lorsque la base de données est en mode de récupération complète).

Vous pouvez voir des sessions actives, des demandes et des transactions pour chaque session, en examinant les résultats de cette requête:

SELECT SessionID = s.session_id
    , HostName = s.Host_name
    , ProgramName = s.program_name
    , SessionElapsedTime = s.total_elapsed_time
    , RequestCommand = r.command
    , DatabaseName = d.name
    , StatementExecuting = case when r.statement_end_offset > 0 THEN 
            SUBSTRING(t.text, r.statement_start_offset, r.statement_end_offset - 
            r.statement_start_offset) 
            ELSE t.text END
    , tst.open_transaction_count
FROM sys.dm_exec_sessions s
    LEFT JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
    LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
    LEFT JOIN sys.databases d ON r.database_id = d.database_id
    LEFT JOIN sys.dm_tran_session_transactions tst ON s.session_id = tst.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t;

enter image description here

Si je enveloppe cette requête dans une transaction, vous pouvez voir le open_transaction_count champ montre 1, qui est attendu depuis que je n'ai aucune autre activité en cours sur ma tablette.

enter image description here

5
Max Vernon