У мене є фрагмент коду, який виконує вставки в сильно денормалізовані таблиці. У таблицях розміщено кількість стовпців від ~ 100 до 300+. Це SQL Server 2008 R2, який працює на Windows Server 2008.
Кожна вставка складається з вставки до декількох таблиць в рамках однієї транзакції. Деякі вставки збираються NHibernate, але деякі не можуть бути, але все ж вони під однією транзакцією.
Коли я виконую вставки, скажімо, 500 разів, повторно викликаючи фрагмент коду, який виконує вставку, я отримую в середньому ~ 360 мс.
Дивним бітом є те, що коли я запускаю тестовий код одночасно за допомогою 4-х процесів (той самий exe запускається з чотирьох різних командних підказок під Windows Server 2008), ефективність вставки за виклик стає набагато кращою. Я бачу сплески, які проходять так само швидко, як 90 мс (майже на X4 швидше). Я вимірюю час вставки з коду.
Оскільки 4 процеси нічого не знають один про одного, я припускаю, що це має щось спільне з SQL Server, але я абсолютно не маю поняття, чому. Мені хотілося б знати, чому це відбувається, і якщо є якась конфігурація, яка дозволила б мені отримати таку ж продуктивність, коли вставки не такі часті.
Пропозиції щодо методів моніторингу SQL Server для розуміння того, що відбувається на рівні db, так само вітаються.