aujourd'hui, j'ai utilisé l'objet système sys.dm_tran_active_transactions (pour être honnête pour la première fois). J'ai eu un problème avec des transactions distribuées (Microsoft DTC) et je suis allé la creuser là-bas après que je n'avais aucune idée de l'oputuffut sp_whoisactive uniquement. Ce problème est résolu mais maintenant je vois qu'il existe des transactions assez anciennes dans la table avec le type "Tableau". Voici la sortie pour la requête suivante
SELECT *,
case transaction_type
when 1 then 'Read/Write'
when 2 then 'Read-Only'
when 3 then 'System'
when 4 then 'Distributed'
else 'Unknown - ' + convert(varchar(20), transaction_type)
end as tranType,
case transaction_state
when 0 then 'Uninitialized'
when 1 then 'Not Yet Started'
when 2 then 'Active'
when 3 then 'Ended (Read-Only)'
when 4 then 'Committing'
when 5 then 'Prepared'
when 6 then 'Committed'
when 7 then 'Rolling Back'
when 8 then 'Rolled Back'
else 'Unknown - ' + convert(varchar(20), transaction_state)
end as tranState,
case dtc_state
when 0 then NULL
when 1 then 'Active'
when 2 then 'Prepared'
when 3 then 'Committed'
when 4 then 'Aborted'
when 5 then 'Recovered'
else 'Unknown - ' + convert(varchar(20), dtc_state)
end as dtcState
FROM sys.dm_tran_active_transactions
ORDER BY transaction_begin_time
Le transaction_begin_time se situe en corrélation avec l'heure du service SQL Server redémarré.
Devrais-je m'inquiéter de quelque manière que ce soit? J'ai consulté - https://www.sqlservergeeks.com/sys-dm_tran_active_transactions/ Pour en savoir plus sur le DMV. Cependant, il mentionne que les tables de travail sont utilisées pour stocker des résultats de requête temporaires dans TEMPDB. Cependant, ma compréhension est que si je démarre une requête dont le plan d'exécution décide de bobine à TEMPDB et d'utiliser une table de travail une nouvelle carte de travail est créée à chaque fois qu'il est nécessaire. Par conséquent, il semble étrange que ça reste 6 tables de travail si anciennes. Je pourrais supprimer que ce sont des tables réutilisées depuis le redémarrage de service pour la surveillance des requêtes qui fonctionnent constamment ou interne SQL Server. Quoi qu'il en soit, le type de transaction ne semble que semble être inoffensif et j'ai remarqué aucun signe de croissance du blocage ou de la version de la version.
Merci d'avance pour votre aide
Martin
Je vois la même chose sur mon 2016 instance - exactement 6 transactions de table de travail, qui ont commencé à seulement quelques secondes après le démarrage du serveur. Si je me joins à sys.dm_tran_database_transactions
, Je peux voir que ces transactions existent dans tempdb
(base de données_id = 2), comme on peut s'attendre à ce que l'on puisse s'attendre aux tables de travail:
SELECT
dtat.transaction_id,
dtat.[name],
dtat.transaction_begin_time,
dtdt.database_id
FROM sys.dm_tran_active_transactions dtat
INNER JOIN sys.dm_tran_database_transactions dtdt
ON dtat.transaction_id = dtdt.transaction_id;
Cela affirme également assez étroitement avec les messages du journal indiquant que Tempdb a été effacé et démarré en cours de démarrage:
Je ne trouve aucun moyen à travers les DMV de relier ces "transactions" à une session particulière, mais je pense qu'il est prudent de dire qu'ils sont un processus système et non quelque chose à craindre.
Depuis que vous avez mentionné que vous n'avez pas vu cela dans sp_WhoIsActive
, il convient de souligner que la session système est filtrée par défaut de ces procédures. Vous pouvez les voir en passant un paramètre supplémentaire:
EXEC sp_WhoIsActive @show_system_spids = 1;