Il existe une procédure stockée :
CREATE PROCEDURE [dbo].[TestProc]
AS
BEGIN
SET NOCOUNT ON;
create table #thistable (rid char(32))
insert into #thistable(rid)
select A0RID from tblCdbA0 with (nolock)
END
Lorsque la procédure est exécutée seule, elle prend 400-500 ms, mais lorsque 10 threads exécutent la même procédure en parallèle, le premier thread se termine en 1300 ms, le dernier en 6000 ms et la moyenne est de 4800 ms. Comme vous pouvez le constater, il n'y a pas de verrouillage où les threads attendent que les autres terminent leur exécution. De plus, le processeur du serveur est chargé à moins de 100 %, c'est-à-dire qu'il y a suffisamment de ressources pour les exécuter en même temps. Comment cela est-il possible ?
EDIT : J'ai trouvé un bon article sur les inserts concurrents : Résolution de la contestation PAGELATCH dans les charges de travail INSERT hautement concurrentes