SQL Server вставляет медленно - PullRequest
6 голосов
/ 15 марта 2010

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

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

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

СПАСИБО!

Ответы [ 7 ]

3 голосов
/ 15 марта 2010

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

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

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

3 голосов
/ 15 марта 2010

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

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

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

2 голосов
/ 15 марта 2010

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

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

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

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

2 голосов
/ 15 марта 2010

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

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

0 голосов
/ 15 марта 2010

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

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

0 голосов
/ 15 марта 2010

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

0 голосов
/ 15 марта 2010

Действительно трудно сказать.

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

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

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