2013-07-13 3 views
0

Я написал приложение .Net, имеющее базу данных SQL Server 2008 R2 с относительно небольшим количеством таблиц, но в некоторых таблицах может быть около 100 000 000 записей! Для улучшения производительности SELECT я создал необходимые индексы, и он работает хорошо. Но, как известно, индексы необходимо перестраивать, когда они фрагментированы.Использование автономной индексации в SQL Server

Мы установили SQL Server 2008 R2 Express на одном из клиентских компьютеров плюс мое приложение Winforms. Еще три компьютера подключаются к этой базе данных по обычной локальной сети, и все кажется прекрасным.

Проблема в том, что я хочу перестроить индексы, например, каждый раз, когда пользователь начинает использовать мою программу на ЛЮБОЙ машине. Ну, я могу выполнить несколько ALTER INDEX, но, как указано в документах MS, индексирование OFFLINE блокирует таблицы для периода индексирования. Это означает, что другие пользователи теряют доступ к таблицам, когда пользователь запускает программу! Я знаю, что есть опция ONLINE, но она не работает в Express Edition SQL Server.

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

Как я могу решить эту проблему?

ответ

1

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

Я выбрал бы 2 варианта:

  • Настройка задания на «сервере», чтобы сделать восстановление на любом запуске сервера SQL или запуске компьютера. Это замедлит инициализацию этого ПК, когда пользователь сначала включит его, но как только это будет сделано, он должен работать нормально и, скорее всего, с аналогичными результатами для ночной работы.
  • Добавьте опцию в приложение для запуска задания переопределения вручную, когда пользователь захочет это сделать, предупреждая, что потребуется некоторое время, и во время процесса никто другой не сможет его использовать. Хотя это обеспечивает максимальную гибкость, он полагается на пользователя, когда он начинает замечать задержки.
+0

Поскольку пользователи моего приложения не имеют представления об индексировании вообще, я бы выбрал первый вариант. Как я могу запланировать работу при запуске компьютера? Я проверил параметры расписания в SQL Server, и я увидел «Автоматически запускаться при запуске агента». –

+0

Это правильный вариант, он запускается при запуске агента, который должен быть сразу после запуска основной службы SQL Server, что должно быть после загрузки Windows, если служба включена автоматически. Независимо от того, что, пока агент запускается, когда система становится доступной, она запускает задачу. – Alejandro

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