У меня есть кусок кода, который выполняет вставки в сильно денормализованные таблицы. Таблицы имеют количество столбцов в диапазоне от ~ 100 до 300+. Это SQL Server 2008 R2, работающий на Windows Server 2008.
Каждая вставка состоит из вставки в несколько таблиц в рамках одной транзакции. Некоторые вставки пакетируются NHibernate, но некоторые не могут, но тем не менее все они находятся в одной транзакции.
Когда я выполняю вставки, скажем, 500 раз, неоднократно вызывая фрагмент кода, который выполняет вставку, я получаю в среднем ~ 360 мс.
Странно то, что когда я запускаю тестовый код одновременно, используя 4 процесса (один и тот же exe-файл запускается из 4 разных командных строк в Windows Server 2008), производительность вставки для вызова становится намного выше. Я вижу всплески, которые идут со скоростью 90 мс (почти X4 быстрее). Я измеряю время вставки из кода.
Поскольку 4 процесса ничего не знают друг о друге, я предполагаю, что это как-то связано с SQL Server, но я понятия не имею, почему. Я хотел бы знать, почему это происходит, и если есть какая-либо конфигурация, которая позволила бы мне получить такую же производительность, когда вставки не так часто.
Предложения, касающиеся методов мониторинга SQL Server, чтобы понять, что происходит на уровне БД, также приветствуются.