Проверяли ли вы план выполнения, когда время идет?План может меняться в зависимости от статистики.Поскольку ваши данные быстро растут, статистика изменится, и это может вызвать другой план выполнения.
Вложенные циклы хороши для небольших объемов данных, но, как вы можете видеть, время увеличивается с увеличением объема.Оптимизатор SQL-запросов затем, вероятно, переключается на план хеширования или слияния, который подходит для больших объемов данных.
Чтобы быстро подтвердить эту теорию, попробуйте отключить автоматическое обновление статистики и снова запустить тест.Тогда вы не должны видеть «удар».
РЕДАКТИРОВАТЬ: Так как Falcon подтвердил, что производительность изменилась из-за статистики, мы можем выполнить следующие шаги.
Я полагаю, вы делаете одну за другой вставку, правильный?В этом случае (если вы не можете вставлять массовые данные), вам будет гораздо лучше вставлять их в рабочую таблицу кучи, а затем через равные промежутки времени перемещать массовые строки в целевую таблицу.Это связано с тем, что для каждой вставленной строки SQL должен проверять дубликаты ключей, внешние ключи и другие проверки, а также сортировать и разбивать страницы все время.Если вы можете позволить себе отложить эти проверки чуть позже, я думаю, вы получите превосходную производительность вставки.
Я использовал этот метод для регистрации метрик.Ведение журнала будет происходить в виде простой таблицы кучи без индексов, внешних ключей и проверок.Каждые десять минут я создаю новую таблицу такого рода, затем с двумя sp_rename внутри транзакции (swift swap) я делаю полную таблицу доступной для обработки, и новая таблица принимает запись в журнал.Тогда вы можете спокойно выполнять всю проверку, сортировку, разбиение только один раз.
Кроме этого, я не уверен, как улучшить вашу ситуацию.Вам, безусловно, необходимо регулярно обновлять статистику, поскольку это является ключом к хорошей производительности в целом.
Можно попробовать использовать кластерный ключ с идентификатором одного столбца и дополнительный уникальный индекс для этих трех столбцов, но я сомневаюсь, что это сильно поможет.
Возможно, попробуйте заполнить индексы - если вы вставилиданные не являются последовательными.Это устранит чрезмерное разбиение страницы, перетасовку и фрагментацию.Вам нужно будет регулярно поддерживать заполнение, что может потребовать перерыва.
Возможно, попытайтесь обновить его HW.Вам необходимо выяснить, какой компонент является узким местом.Это может быть процессор или диск - мой любимый в данном случае.Память вряд ли имхо если у вас по одной вставки.Тогда это должно быть легко, если это не процессор (линия, висящая сверху графика), то, скорее всего, ваш ввод-вывод сдерживает вас.Попробуйте лучший контроллер, лучше кэшированный и более быстрый диск ...