Обновления базы данных SpeedUp - PullRequest
2 голосов
/ 27 ноября 2008

Существует база данных SqlServer2000, которую мы должны обновить в выходные дни.

Это размер почти 10G.

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

Выходных вряд ли хватит на работу.

Мы создали выделенный сервер для работы, превратил базу данных SINGLE_USER сделал любые оптимизации, которые мы могли придумать: удалить / воссоздать индексы, отношения и т. д.

Можете ли вы предложить что-нибудь для ускорения процесса?

SQL SERVER 2000 не является неотъемлемым (не мое решение). Обновления выполняются через пользовательскую программу, а не через BULK INSERT.

EDIT:

Обновления схемы выполняются сценариями QuQL анализатора запросов (по одному сценарию на обновление версии)

Обновление данных выполняется приложением C # .net 3.5.

Данные поступают из набора текстовых файлов (со многими проблемами) и записываются в локальную БД.

Компьютер не подключен к какой-либо сети.

Ответы [ 2 ]

2 голосов
/ 27 ноября 2008

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

В противном случае убедитесь, что у вас достаточно памяти на сервере (хотя SQL Server 2000 Standard ограничен 2 ГБ), и при необходимости предварительно увеличьте размер файлов MDF и LDF, чтобы справиться с любым ростом.

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

EDIT: В идеале попытайтесь определить, какая операция вызывает низкую производительность. Если схема меняется, это может быть вызвано тем, что вы увеличиваете столбец и вызываете много разбиений страниц. Однако при вставке и обновлении также может произойти разбиение страницы - строка больше не помещается на странице.

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

0 голосов
/ 27 ноября 2008

Как именно выглядит эта "программа на заказ"? то есть как это говорит с данными? Минимизация количества сетевых операций ввода-вывода (от сервера базы данных до приложения) была бы хорошим началом ... обычно это может означать выполнение большой работы в TSQL, но даже простое выполнение приложения на сервере базы данных может помочь ..

Если приложение перезаписывает большие порции данных, оно все равно может использовать массовую вставку для отправки новых данных таблицы. Либо через командную строку (bcp и т. Д.), Либо через код (SqlBulkCopy в .NET). Обычно это происходит быстрее, чем отдельные вставки и т. Д.

Но это действительно зависит от этой "заказной программы".

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