Повышение производительности обновления при установке нулевого столбца - PullRequest
1 голос
/ 06 декабря 2011

Немного далеко, но у меня есть простой запрос ниже:

begin transaction       

update s
set s.SomeField = null
from someTable s (NOLOCK)

rollback transaction

Это выполняется за ~ 30 секунд, сидя рядом с полем SQL Server.Есть ли уловки, которые я могу использовать, чтобы улучшить скорость.Таблица содержит 144 306 строк.

спасибо.

Ответы [ 5 ]

2 голосов
/ 07 декабря 2011

Самым большим компонентом производительности большой команды UPDATE, подобной этой, будет скорость вашего журнала БД.

Для лучшей производительности:

  1. Убедитесь, что журнал БД (файл LDF) находится на отдельном физическом шпинделе от данных БД (файл MDF)
  2. Избегайте четности RAID для тома журнала, такого как RAID-5; RAID-1 или RAID-10 лучше
  3. Убедитесь, что файл журнала БД предварительно сформирован и физически непрерывен на диске
  4. Убедитесь, что на вашем сервере достаточно оперативной памяти - в идеале, по крайней мере, достаточно, чтобы вместить все страницы БД, содержащие измененные строки

Использование SSD для вашего диска с данными также может помочь, потому что команда создаст большое количество грязных буферов, которые позднее будут записаны на диск ленивым устройством записи; это может замедлить выполнение других операций с БД.

1 голос
/ 06 декабря 2011
1 голос
/ 06 декабря 2011

Вы могли бы немного изменить синтаксис вашего запроса, но я не имел разницы в моем тестировании, выполняя это.Я использовал STATISTICS IO и STATISTICS TIME.

Вы упоминаете, что столбец проиндексирован.Вы можете отключить / повторно включить его как часть вашей транзакции.T-sql для этого прост, посмотрите это - http://blog.sqlauthority.com/2007/05/17/sql-server-disable-index-enable-index-alter-index/

В прошлом мне приходилось делать это для аналогичных работ, и у меня это получалось хорошо.

1 голос
/ 06 декабря 2011

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

Не уверен, что это будет быстрееили нет, но я бы расследовал это.

0 голосов
/ 06 декабря 2011

Попробуйте реализовать вот так

Disable Index

Drop the column
Create the column

Rebuild index

Могу догадаться, что это улучшит производительность.

...