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
.
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;
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.