SQL Server вставляет медленный

У меня есть два сервера, где я установил SQL Server 2008

  • Производство: RAID 1 на дисках SCSI
  • Тест: диск IDE

Когда я пытаюсь выполниться, сценарий приблизительно с 35 000 вставляет на тестовом сервере, мне требуются 30 секунд и вместо этого на рабочем сервере больше чем 2 минуты! Кто-либо знает почему такое различие? Я имею в виду, DB настроены таким же образом, и рабочий сервер имеет также конфигурацию RAID, лучший процессор и память...

Спасибо!

6
задан andrew0007 15 March 2010 в 12:59
поделиться

7 ответов

Имейте в виду, что RAID 1 предназначен для избыточности, а скорость зависит от сценария. Вставка 35k может вызвать большие накладные расходы на произвольную запись, снижая производительность.

Как вы вставляете эти строки, заключены ли они в транзакцию SQL? Если вы еще не сделали этого, то знайте, что кэш транзакций запрашивает и выполняет пакетные обновления диска, что значительно увеличивает скорость.

Если это через файл сценария SQL, оберните вставки в BEGIN TRANSACTION / END TRANSACTION. Для такого количества записей , вероятно, лучше импортировать из файла .

3
ответ дан 10 December 2019 в 00:36
поделиться

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

Также на производственном сервере время, когда вы выполняете сценарии, в то же время, когда выполняются операции с БД и выполняются некоторые запросы.

2
ответ дан 10 December 2019 в 00:36
поделиться

Необходимо рассмотреть три (высокоуровневых) проблемы:

  1. Активность на сервере по сравнению с доступными ресурсами: похоже (судя по вашим ответам), что это не проблема
  2. Конфигурация ваших индексов : опять же, похоже, это не проблема, если среда разработки действительно идентична по конфигурации (как и должно быть)
  3. Объем данных и насколько точны ваши индексы

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

Сравните объем данных в двух средах; если в производственной среде их значительно больше (или если ваша таблица сильно проиндексирована), то это вполне может быть вашей проблемой.

2
ответ дан 10 December 2019 в 00:36
поделиться

Если вы одновременно делаете выборки в базе данных, убедитесь, что они выполняются с помощью "with (nolock)"

{{1} }
0
ответ дан 10 December 2019 в 00:36
поделиться

Каков объем существующих данных в два сервера?

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

0
ответ дан 10 December 2019 в 00:36
поделиться

Трудно сказать.

Во-первых - да, у производства может быть больше ресурсов, но ДОСТУПНЫ ли они? Или производство уже работает на пределе возможностей, когда вы его достигаете? В конце концов, это производство.

Это была бы моя первая идея.

0
ответ дан 10 December 2019 в 00:36
поделиться

Каковы индексы и отступы на сервере? Возможно, вам придется перестроить индексы, чтобы на ваших страницах было больше места, и / или подумайте, какие индексы вам действительно нужны. Если вам нужен быстрый тест, попробуйте ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.

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

Если оба из них не работают, запустите некоторый мониторинг на производственном сервере и посмотрите, не блокируется ли он другими процессами.

3
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: