В последнее время, вместо того, чтобы просто увеличивать файлы, когда их использование почти достигает 80%, я стал более активно восстанавливать пространство с помощью обычных приемов, таких как дефрагментация кучи, добавление и удаление кластеризованных индексов, реализация сжатия строк или страниц и т. Д.
Однако есть несколько случаев, когда мне удалось освободить еще больше места, выполнив DBCC CLEANTABLE . С сотнями баз данных в моей среде невозможно узнать, что пользователи делают в каждой из них, и вполне приемлемо, что будут изменения, включающие удаление столбцов фиксированной длины. Обычно я обнаруживал эти возможности, глядя на количество строк и количество страниц в некоторых написанных мной сценариях использования пространства объектов. Я хотел бы сделать еще один шаг, пытаясь автоматизировать обнаружение подобных сценариев.
Что я хотел бы знать, так это то, что кто-то там активно отслеживает подобные возможности, и если да, то на что конкретно вы обращаете внимание?
Мои мысли заключались в том, чтобы написать что-то вроде сбора максимального и минимального размера строки, количества строк в таблице, количества выделенных страниц и количества используемых страниц, а затем выполнить некоторые основные математические операции для регистрации результатов, которые находятся далеко за пределами того, что было бы "ожидаемым".
источник
Ответы:
Решение этой проблемы, о котором я думаю, заключается в том, чтобы еженедельно запускать задание, которое будет запускать sp_spaceused для всех таблиц в базе данных, и сохранять эти данные в таблице. Если есть различия в размере для каждой таблицы больше, чем, скажем, на 10%, я бы запустил команду dbcc cleantable.
Мой код для циклического перебора размеров таблицы выглядит так:
Теперь вам нужно только построить логику, которая будет проверять, как будет изменяться размер в течение недели, и планировать ее.
источник