2012-05-21 6 views
0

Недавно я перевел мою .NET-разработку с более старого ПК Core2Duo 2,93 ГГц на новый процессор Core i7-3820 с частотой 3,6 ГГц. Никакие изменения не были внесены в код проекта или макет базы данных. Обе машины используют один и тот же SQL Server 2012 Express с расширенными службами (а не LocalDB).SQL Server 2012 slow

Я наблюдаю значительное замедление команд INSERT INTO: то, что раньше использовалось на старом компьютере, составляло 1-2 миллисекунды в секунду, теперь оно занимает 8-9 миллисекунд на новом. Единственное исправление, которое я смог найти, заключалось в том, чтобы использовать несколько строк в одной команде, что, по-видимому, увеличивает накладные расходы команды на многие строки. Как и в SQL Server 2008 R2, в SQL Server 2012 ограничение на количество строк в одной такой команде равно 1000: http://msdn.microsoft.com/en-us/library/dd776382.aspx

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

У кого-нибудь возникла эта проблема? Как я могу это решить?

+0

Вы обновили статистику после обновления? Вы установили уровень совместимости на 110? –

+0

Также, как подсказывает @buckley, вы должны посмотреть на использование табличных параметров вместо табличных адаптеров. http://www.sommarskog.se/arrays-in-sql-2008.html#TVP_in_TSQL –

+0

Аарон: можете ли вы уточнить рекомендации по статистике? Я не на уровне экспертов с SQL Server. – user1408140

ответ

0

ЦПУ определенно лучше, но как насчет диска io? Вставки, очевидно, полагаются на эту подсистему.

Это произойдет, я просто читал эту статью http://www.altdevblogaday.com/2012/05/16/sql-server-high-performance-inserts/

Кажется, параметры табличного значения может увеличить производительность резко

Комментарии приводят к следующей странице, которая имеет некоторые впечатляющие цифры.

В комментариях http://florianreischl.blogspot.de/2012/03/performance-comparison-of-sql-server.html

Я еще использовать это сам, но TVP, кажется, куда идти, чтобы накачать данных от клиента к серверу SQL, если у вас есть 2008 или выше.

+0

Новая машина оснащена 2TB 7200 об/мин SATA-3 «обычным» жестким диском, а у старого есть 1TB 7200 об/мин SATA-2 «зеленый» жесткий диск. При копировании больших файлов на одном жестком диске я наблюдаю 60-70MBps на старом ПК и 100-110MBps на новом. Таким образом, дисковый ввод-вывод не должен быть проблемой здесь (во всяком случае, это доказуемо быстрее на новой машине). Может ли увеличенное время выполнения одной команды INSERT INTO быть результатом повышенной задержки в стеке TCP/IP, который используется для связи с SQL Server через внутренний кольцевой адрес? – user1408140

+0

Я думаю, что пришло время углубиться в SQL Server и сравнить планы выполнения между старым и новым сервером. Вы можете использовать профилировщик SQL Server для захвата всего трафика и анализа их в SSMS (студия управления сервером sql), поэтому нет сомнений в том, что вы смотрите на запросы, представленные на сервер sql. – buckley

0

, если честно, записывать записи по одному ВСЕГДА медленно .. CONSIDER - если он соответствует вашей архитектуре - писать строки в текстовый файл, а затем BULK INSERT, и ваша производительность будет расти чрезвычайно.