2008-11-27 2 views
2

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

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

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

Выходных едва ли достаточно для работы.

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

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

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

EDIT:

Обновления схемы выполняются с помощью сценариев TSQL анализатор запросов (один скрипт на обновление версии)

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

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

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

ответ

0

В чем именно состоит эта «обычная программа»? то есть как он разговаривает с данными? Сведение к минимуму количества сетевых IO (от сервера db до приложения) было бы хорошим началом ... обычно это может означать большую работу в TSQL, но даже просто запуск приложения на сервере db может немного помочь. ..

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

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

2

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

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

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

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

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

Смежные вопросы