нам нужно удалять старые данные из огромной таблицы раз в год. Строки таблицы довольно компактны (около 40 байт), и в таблице есть только кластерный индекс.
Общая база данных составляет около 750 ГБ, а размер таблицы составляет 640 ГБ и содержит 8,7 миллиардов строк перед очисткой. После удаления остается только 3,7 миллиарда строк, размер данных уменьшается примерно до 500 ГБ.
Эти цифры выглядят странно, но они хороши: на каждой странице было удалено несколько строк. Некоторые страницы были освобождены и отброшены, некоторые остались неизменными и все еще заполнены на 100%, но большинство страниц теперь заполнены частично, и на каждой странице много свободного места.
Чтобы освободить это место, мне нужно перестроить индекс. У меня такой вопрос: как дефрагментировать индекс в базе данных, который имеет размер самого индекса?
Если я правильно помню, для INDEX DEFRAG REBUILD потребуется свободное пространство, в 1,3 раза превышающее размер, на котором оно работает, поскольку оно копирует данные отсортированным способом. БД вырастет почти на 1 ТБ, и это новое пространство не понадобится после завершения дефрагментации.
Сжатие после дефрагментации не помогает, поскольку оно приводит к новой (тяжелой) фрагментации.
Мне известно о настройке "SORT_IN_TEMPDB". Есть ли оценка того, сколько свободного места в БД потребуется с этим параметром?
В качестве альтернативы я мог бы удалить и заново создать кластеризованный индекс, но я не уверен, какова потребность в пространстве для этой операции.
Реорганизация индекса не освобождает место на каждой странице (?), Поэтому эта операция тоже не то, что я хочу.
Спасибо за любые идеи!
Ralf