Table sys (Id transaction Duplicate Key)
Bonjour,
Actuellement je m'exerce sur SQL server avec les tables systèmes. Alors,... Comment dire? Il y en a énormément.
Je suis un peu perdu.
Nous avons une erreur avec une DUPLICATE KEY.
Le problème est assez simple. Lorsque l’exception est levée, nous voulons connaître les Transaction_Id des requêtes qui ont amené à cette exception.
Je pense que ces requêtes de suffisent pas.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
// Connaître les dernières transactions.
SELECT QS.creation_time Creation, QS.last_execution_time LastExec, QS.plan_generation_num NbComp, QS.execution_count NbExec,
QS.total_worker_time/QS.execution_count AvgCPUTime, OBJECT_NAME(SQL.objectid) Procedures,
SUBSTRING
(
SQL.text,
QS.statement_start_offset / 2 + 1,
(
CASE
WHEN QS.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), SQL.text)) * 2
ELSE QS.statement_end_offset
END - QS.statement_start_offset
) / 2 + 1
) AS Instruction
FROM sys.dm_exec_query_stats QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) SQL
Order by Creation desc;
// En attente
SELECT
s.host_name,
t.text,
r.start_time,
r.status,
r.total_elapsed_time,
r.logical_reads,
r.granted_query_memory
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t; |
Le problème est que je n'ai pas vraiment la table dans laquelle le INSERT est fait (sauf si je bricole la colonne Instruction, mais compliqué à faire)...
De plus, on a parfois un soucis de TIMEOUT (j'ai vu qu'avec l'outil SQL_Profiler on pouvait avoir plus de détails).
Mais peut-on affiner cette exception encore une fois avec une requête (savoir si c'est un DEADLOCK par ex).
Désolé, cela semble être un pb de débutant mais j'apprends au fur et à mesure et le monde des tables systèmes est très vaste... Si vous avez de la littérature assez concise dessus, je suis preneur. (J'ai récemment acheté le livre SQL Server 2014, mais manque de temps en ce moment...).
Je vous remercie par avance (encore...).
Julien