Sql Server 2008 R2 DC вносит изменения в производительность - PullRequest
7 голосов
/ 13 сентября 2011

Я заметил интересное изменение производительности, которое происходит около 1,5 миллиона введенных значений.Может кто-нибудь дать мне хорошее объяснение, почему это происходит?

Таблица очень проста.Он состоит из (bigint, bigint, bigint, bool, varbinary (max)). У меня есть индекс pk clusered для первых трех bigints.Я добавляю только логическое «true» в качестве данных varbinary (max).

С этого момента производительность кажется довольно постоянной.

Обозначения: Y (Время в мс) |X (вставки 10K)

enter image description here

Меня также интересуют постоянные относительно небольшие (иногда очень большие) всплески, которые есть на графике.

ФактическиеПлан выполнения до пиков.

Actual Execution Plan from before spikes

Условные обозначения:Таблица, которую я вставляю в: TSMDataTable1. BigInt DataNodeID - фк2. BigInt TS - основная отметка времени3. BigInt CTS - модификация метки времени4. Бит: ICT - ведет запись последнего введенного значения (увеличивает производительность чтения)5. Данные: данныеЗначение Bool Текущее время сохраняет

Enviorment Это местный.Он не делится никакими ресурсами.Это база данных фиксированного размера (достаточно, чтобы она не расширялась).(Компьютер, 4 ядра, 8 ГБ, 7200rps, Win 7).(Sql Server 2008 R2 DC, сходство процессора (ядро 1,2), 3 ГБ,)

1 Ответ

1 голос
/ 03 октября 2011

Проверяли ли вы план выполнения, когда время идет?План может меняться в зависимости от статистики.Поскольку ваши данные быстро растут, статистика изменится, и это может вызвать другой план выполнения.

Вложенные циклы хороши для небольших объемов данных, но, как вы можете видеть, время увеличивается с увеличением объема.Оптимизатор SQL-запросов затем, вероятно, переключается на план хеширования или слияния, который подходит для больших объемов данных.

Чтобы быстро подтвердить эту теорию, попробуйте отключить автоматическое обновление статистики и снова запустить тест.Тогда вы не должны видеть «удар».

РЕДАКТИРОВАТЬ: Так как Falcon подтвердил, что производительность изменилась из-за статистики, мы можем выполнить следующие шаги.

Я полагаю, вы делаете одну за другой вставку, правильный?В этом случае (если вы не можете вставлять массовые данные), вам будет гораздо лучше вставлять их в рабочую таблицу кучи, а затем через равные промежутки времени перемещать массовые строки в целевую таблицу.Это связано с тем, что для каждой вставленной строки SQL должен проверять дубликаты ключей, внешние ключи и другие проверки, а также сортировать и разбивать страницы все время.Если вы можете позволить себе отложить эти проверки чуть позже, я думаю, вы получите превосходную производительность вставки.

Я использовал этот метод для регистрации метрик.Ведение журнала будет происходить в виде простой таблицы кучи без индексов, внешних ключей и проверок.Каждые десять минут я создаю новую таблицу такого рода, затем с двумя sp_rename внутри транзакции (swift swap) я делаю полную таблицу доступной для обработки, и новая таблица принимает запись в журнал.Тогда вы можете спокойно выполнять всю проверку, сортировку, разбиение только один раз.

Кроме этого, я не уверен, как улучшить вашу ситуацию.Вам, безусловно, необходимо регулярно обновлять статистику, поскольку это является ключом к хорошей производительности в целом.

Можно попробовать использовать кластерный ключ с идентификатором одного столбца и дополнительный уникальный индекс для этих трех столбцов, но я сомневаюсь, что это сильно поможет.

Возможно, попробуйте заполнить индексы - если вы вставилиданные не являются последовательными.Это устранит чрезмерное разбиение страницы, перетасовку и фрагментацию.Вам нужно будет регулярно поддерживать заполнение, что может потребовать перерыва.

Возможно, попытайтесь обновить его HW.Вам необходимо выяснить, какой компонент является узким местом.Это может быть процессор или диск - мой любимый в данном случае.Память вряд ли имхо если у вас по одной вставки.Тогда это должно быть легко, если это не процессор (линия, висящая сверху графика), то, скорее всего, ваш ввод-вывод сдерживает вас.Попробуйте лучший контроллер, лучше кэшированный и более быстрый диск ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...