У нас есть несколько баз данных с фрагментацией индекса> 95%. Насколько я могу судить, индексы никогда не перестраивались, а тем более реорганизованы. Годами.
(Справедливости ради, в этих таблицах, по-видимому, разрешено автоматическое обновление статистики. Также, честно говоря, он старательно работает с резервными копиями: полными ежедневными и ежеквартальными журналами.)
Когда я спросил, администратор БД сказал, что он не хочет перестраивать или реорганизовать индексы. Когда я спросил, почему, он не смог сформулировать это. В конце концов он сказал, что обеспокоен возможной потерей данных. Например, одна из баз данных используется нашим бухгалтерским приложением в Great Plains Dynamics, и он, похоже, очень обеспокоен этим.
Я не администратор, но из того, что я прочитал, его беспокойство кажется ... трудным для меня.
Я не уверен, что делать дальше. Предложения, как мне поступить?
источник
Ответы:
Перестройка индекса базы данных не должна приводить к потере данных. Однако это, вероятно, приведет к существенному снижению производительности, поскольку перестраиваемые индексы обычно не будут доступны для использования до завершения перестроения. По этой причине это следует делать в нерабочее время, когда затронутые системы простаивают.
Паранойя - это хорошая вещь для администратора баз данных - если они беспокоятся о потере данных, я бы попросил их провести надлежащий тест резервных копий (восстановить их в отдельной системе и убедиться, что все данные там есть), и если они Тем не менее, разумная предосторожность - выполнение полного резервного копирования перед перестройкой индексов.
источник
WITH (ONLINE=ON)
если индекс не содержит столбцы BLOB.REINDEX
«профилактическое обслуживание» таблиц, в которых содержание индекса сильно меняется, довольно Распространенный в моем опыте (если индекс в основном статический, это менееНет риска потери данных при перестроении или дефрагментации индексов.
источник
Реорганизация индексов займет меньше времени и меньше усилий со стороны сервера SQL, поэтому их можно выполнять в экземплярах типа «еженедельная ночь». Если то, что вы говорите, верно, даже реорганизация индексов, которые никогда не были, может также оказать большее влияние на сервер. Перестройка индексов потребует значительных усилий со стороны сервера SQL, поскольку они отбрасываются и перестраиваются. Выполнение перестроения в рабочие дни не стоит того, чтобы сервер был занят индексами и не обслуживал людей, которые его используют.
Я согласен с voretaq7: если его беспокоит работа с индексами, сначала попробуйте его на серверах разработки или тестирования, чтобы увидеть, как на это отреагируют.
источник
DROP INDEX
и повторноCREATE INDEX
- я не уверен насчет SQL Server, но я знаю, что PostgreSQL иногда лучше сдувает индекс и начинает с нуля, а не пытается перестроить (REINDEX
) его.