У меня есть два сервера, где я установил SQL Server 2008
Когда я пытаюсь выполниться, сценарий приблизительно с 35 000 вставляет на тестовом сервере, мне требуются 30 секунд и вместо этого на рабочем сервере больше чем 2 минуты! Кто-либо знает почему такое различие? Я имею в виду, DB настроены таким же образом, и рабочий сервер имеет также конфигурацию RAID, лучший процессор и память...
Спасибо!
Имейте в виду, что RAID 1 предназначен для избыточности, а скорость зависит от сценария. Вставка 35k может вызвать большие накладные расходы на произвольную запись, снижая производительность.
Как вы вставляете эти строки, заключены ли они в транзакцию SQL? Если вы еще не сделали этого, то знайте, что кэш транзакций запрашивает и выполняет пакетные обновления диска, что значительно увеличивает скорость.
Если это через файл сценария SQL, оберните вставки в BEGIN TRANSACTION / END TRANSACTION. Для такого количества записей , вероятно, лучше импортировать из файла .
Возможно, на рабочем сервере запущены другие программы, которые потребляют такие ресурсы, как жесткий диск и процессор.
Также на производственном сервере время, когда вы выполняете сценарии, в то же время, когда выполняются операции с БД и выполняются некоторые запросы.
Необходимо рассмотреть три (высокоуровневых) проблемы:
Я думаю, что третий пункт может быть вашей проблемой. Поймите, что чем больше (некластеризованных) индексов вы разместите в своей таблице (и чем они сложнее), тем медленнее будет ваше манипулирование данными. Индексы - это (в общем) компромисс между скоростью запроса и скоростью модификации. Очевидно, что это обобщение, и настройка требуется всегда, но в целом это правда.
Сравните объем данных в двух средах; если в производственной среде их значительно больше (или если ваша таблица сильно проиндексирована), то это вполне может быть вашей проблемой.
Если вы одновременно делаете выборки в базе данных, убедитесь, что они выполняются с помощью "with (nolock)"
{{1} }Каков объем существующих данных в два сервера?
Время до INSERT будет увеличиваться в зависимости от количества строк уже в таблице и количества индексов. Если ваша таблица тестового сервера содержит меньше строк до INSERT, чем производственный сервер, ожидается, что INSERT будет выполняться там быстрее.
Трудно сказать.
Во-первых - да, у производства может быть больше ресурсов, но ДОСТУПНЫ ли они? Или производство уже работает на пределе возможностей, когда вы его достигаете? В конце концов, это производство.
Это была бы моя первая идея.
Каковы индексы и отступы на сервере? Возможно, вам придется перестроить индексы, чтобы на ваших страницах было больше места, и / или подумайте, какие индексы вам действительно нужны. Если вам нужен быстрый тест, попробуйте ALTER INDEX ALL ON dbname.dbo.tablename REORGANIZE.
Также рассмотрите возможность использования на рабочем сервере. В вашем тесте, вероятно, вы (или очень немногие) единственный, кто читает / пишет. Получите представление о том, что еще происходит в базе данных, пока вы делаете эту вставку.
Если оба из них не работают, запустите некоторый мониторинг на производственном сервере и посмотрите, не блокируется ли он другими процессами.