Utilisez Node.js + sequelize.js + MSSQLDe nombreuses mises à jour de blocage se erreur
Je fais beaucoup de mises à jour ~ 30 (une table) à partir de 3 fils toutes les 5 secondes. L'interrogation du périphérique.
Get
SequelizeDatabaseError: Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
sequelize générer sql
sql:
SET IDENTITY_INSERT [DeviceCurrentData] ON;
MERGE INTO [DeviceCurrentData] WITH (HOLDLOCK) AS [DeviceCurrentData_target]
USING (
VALUES (
9,
N\ '28.300000\',
\ '2017-08-07 15:26:28.000\',
12
)
) AS [DeviceCurrentData_source]([Id], [Value], [DateStamp], [DevParamId])
ON [DeviceCurrentData_target].[Id] = [DeviceCurrentData_source].[Id]
WHEN MATCHED
THEN
UPDATE
SET [DeviceCurrentData_target].[Value] = N\ '28.300000\',
[DeviceCurrentData_target].[DateStamp] = \ '2017-08-07 15:26:28.000\',
[DeviceCurrentData_target].[DevParamId] = 12
WHEN NOT MATCHED
THEN
INSERT (
[Id],
[Value],
[DateStamp],
[DevParamId]
)
VALUES (
9,
N\ '28.300000\',
\ '2017-08-07 15:26:28.000\',
12
)
OUTPUT $ACTION,
INSERTED.*;
SET IDENTITY_INSERT [DeviceCurrentData] OFF;
'
[Cette réponse précédente] (https://stackoverflow.com/questions/7843733/confused-about-updlock-holdlock) peut vous aider. Votre utilisation de 'HOLDLOCK' bloquerait à la fois' INSERT' et 'UPDATE', alors que' UPDLOCK' bloquerait seulement 'UPDATE'. Vous devriez tracer ce spid et trouver si c'était un 'INSERT' ou' UPDATE' qui a échoué. – Phoenix
J'écris 'Model.update (item, {Id: item.Id})', mais sequelize.js geneterate 'HOLDLOCK'. J'ai écrit 'Model.upsert', également obtenir une erreur de blocage –