2014-01-30 3 views
0

У меня возникла проблема с непрерывным процессом, который работает каждый час и ежедневно вставляет около 3-4 миллионов строк в базу данных SQL Server 2008.Установки ускорения SQL Вставка

Схема состоит из большой таблицы, содержащей все вышеперечисленные данные, и имеет кластерный индекс в поле даты и времени (по дням), уникальный индекс в комбинации полей, чтобы исключить дубликаты вставок, и пару больше индексов на 2 поля varchar.

Типичное поведение в последнее время заключается в том, что инструкции вставки временно приостанавливаются до их завершения. Общий процесс, используемый для 4-5 минут, и теперь это обычно более 40 минут.

Вставки выполняются службой .net, которая анализирует серию xml-файлов, выполняет некоторые преобразования данных и затем вставляет данные в БД. Служба не изменилась вообще, просто вставки занимают больше времени, чем они используют.

На данный момент я готов попробовать все. Пожалуйста, дайте мне знать, нужна ли вам дополнительная информация и вы можете ничего не предлагать.

Заранее спасибо.

+0

На вставке, вы имели в виду «добавить» и нет абсолютно никакого обновления происходит. И я полагаю, вы имеете в виду, что 3-4 миллиона строк были стандартной вставкой и не изменились. –

+0

Также, если это добавляет 3-4 миллиона строк в день. Разве что-то очищается или размер данных только растет? –

+1

Это не кажется удивительным, чем больше данных у вас есть в таблице, тем больше будет индекс вашего уникального индекса, поэтому дольше потребуется чтение и проверка, чтобы убедиться, что в вставленных данных нет дубликатов. Вы также должны обновить все индексы после завершения вставки, которые будут занимать больше времени, чем больше данных. – GarethD

ответ

1

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

Это, вероятно, означает, что тонны дисков ищут вставки.

Обязательно вставьте все строки в один оператор. Используйте объемную вставку или ТВП. Это позволяет SQL Server оптимизировать план запроса, сортируя вставки по ключевым значениям, делая IO более эффективным.

Это будет, однако, не реализовать большой ускорение (я видел 5x в подобных ситуациях). Чтобы восстановить первоначальную производительность, вы должны вернуть рабочий набор в память. Добавьте RAM, очистите старые данные или раздел, чтобы вам нужно было всего лишь несколько разделов.

+0

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

+0

Как вы оценили использование ОЗУ? (Я честно не доверяю вашему наблюдению здесь и хочу убедиться, что это правильно.) Насколько велика таблица кластеризованного индекса в GB и сколько памяти вы настроили для SQL Server? Не используйте значения Taskmanager, они вводят в заблуждение. – usr

+0

У меня есть только значения диспетчера задач. Выделенная оперативная память - 10 ГБ. – Ted

1

индекса капли перед тем вкладышем и установить их по завершению

+3

Через 3 года у него будет 900 м строк. Обычно вы не отбрасываете такие индексы для вставок 3-4 м. Слишком дорого. Кроме того, этот процесс отключается. – usr

+0

это не вариант. воссоздание индексов будет просто довести до конца. – Ted

+0

Процесс отбрасывания/создания индексов приводит к тому, что на порядок увеличивается скорость для очень больших вставок, включая восстановление индекса. Также вам может не понадобиться удалить все индексы, а некоторые из них могут иметь резкий результат. – David

Смежные вопросы