J'utilise SQL Server 2008 Enterprise. J'ai essayé que si je place le journal de transactions de SQL Server pour augmenter pour la base de données connexe (sans paramètres de sauvegarde), une seule instruction de suppression de cette procédure stockée provoquera un blocage si elle est exécutée par plusieurs threads en même temps? Des idées pourquoi? Pour l'instruction delete, Param1 est une colonne de la table FooTable, Param1 est une clé étrangère d'une autre table (se réfère à une autre colonne d'index clusterisée de clé primaire de l'autre table). Il n'y a pas d'index sur Param1 lui-même pour la table FooTable. FooTable a une autre colonne qui est utilisée comme clé primaire en cluster, mais pas la colonne Param1.blocage lorsque le journal des transactions SQL Server jamais augmenter?
create PROCEDURE [dbo].[FooProc]
(
@Param1 int
,@Param2 int
,@Param3 int
)
AS
DELETE FooTable WHERE Param1 = @Param1
INSERT INTO FooTable
(
Param1
,Param2
,Param3
)
VALUES
(
@Param1
,@Param2
,@Param3
)
DECLARE @ID bigint
SET @ID = ISNULL(@@Identity,-1)
IF @ID > 0
BEGIN
SELECT IdentityStr FROM FooTable WHERE ID = @ID
END
Est-ce vraiment un interblocage (avec un thread abandonné en tant que victime de blocage), ou est-ce juste un " retarder "jusqu'à ce que le premier fil finit ?? –
George, c'est la troisième fois que vous posez des questions sur la même impasse et que vous n'avez jamais fourni les infos sur l'impasse. Sans l'info de blocage, vous perdez votre temps. Attachez le profileur, surveillez la classe d'événements du graphe interblocable * uniquement *, attendez que le blocage se produise, joignez le fichier .xdl enregistré à votre message. –
@ Marc, c'est l'impasse. Je l'attrape dans le journal. Toute relation entre le journal des transactions augmente-t-elle et l'impasse? – George2