Mam kawałek kodu, który wykonuje wstawki do wysoce zdenormalizowanych tabel. Tabele zawierają liczby kolumn od ~ 100 do 300+. To jest SQL Server 2008 R2, działający w systemie Windows Server 2008.
Każda wstawka polega na wstawieniu do wielu tabel w ramach tej samej transakcji. Niektóre wstawki są grupowane przez NHibernate, ale niektóre nie mogą, ale wszystkie są objęte tą samą transakcją.
Kiedy wykonuję wstawki, powiedzmy 500 razy, wielokrotnie wywołując fragment kodu, który wykonuje wstawienie, otrzymuję średnio ~ 360 ms.
Dziwne jest to, że kiedy uruchamiam kod testowy jednocześnie przy użyciu 4 procesów (ten sam exe uruchamiany z 4 różnych poleceń w Windows Server 2008), wydajność wstawiania dla każdego połączenia staje się znacznie lepsza. Widzę serie, które idą tak szybko, jak 90 ms (prawie X4 szybciej). Mierzę czas wstawiania z kodu.
Ponieważ 4 procesy nic nie wiedzą o sobie, zakładam, że ma to coś wspólnego z SQL Server, ale nie mam pojęcia, dlaczego. Chciałbym wiedzieć, dlaczego tak się dzieje i czy istnieje jakakolwiek konfiguracja, która pozwoliłaby mi uzyskać taką samą wydajność, gdy wkładki nie są tak częste.
Sugestie dotyczące metod monitorowania programu SQL Server w celu zrozumienia, co dzieje się na poziomie db są równie mile widziane.