Практика SQL Server

Рост файлов базы: планирование свободного места

Различайте выделенный размер, свободное место внутри файла и ёмкость тома, выбирая предсказуемые приращения и оповещения.

База может исчерпать место при ещё небольшом файле или вызвать дисковый сигнал при большом объёме повторно используемого места внутри файла. Выделенный размер, внутреннее использование и ёмкость файловой системы отвечают на разные вопросы. Планирование должно учитывать все три.

Правильное чтение размеров

Запрос показывает размер файлов данных и распределённые страницы текущей базы. FILEPROPERTY SpaceUsed относится к страницам внутри файла, а не свободному диску и не логическому размеру строк. Журнал требует отдельного измерения и анализа повторного использования.

SELECT name,type_desc,size/128.0 AS AllocatedMB,
 CASE WHEN type=0 THEN FILEPROPERTY(name,'SpaceUsed')/128.0 END AS UsedMB,
 CASE WHEN type=0 THEN (size-FILEPROPERTY(name,'SpaceUsed'))/128.0 END AS InternalFreeMB,
 is_percent_growth,growth,
 CASE WHEN is_percent_growth=0 THEN growth/128.0 END AS FixedGrowthMB,
 max_size
FROM sys.database_files;

Процентное приращение зависит от текущего размера. Десять процентов маленького файла и нескольких терабайтов являются разными операционными событиями. Фиксированный шаг делает следующую заявку понятнее, но универсального количества мегабайтов для любой нагрузки нет.

Физическую ёмкость проверяйте отдельно. Один том может повторяться для нескольких файлов; нельзя суммировать его свободные байты несколько раз. Том также может обслуживать другие базы и приложения. При виртуализации свободное место файловой системы описывает только один слой хранения.

SELECT f.name,v.volume_mount_point,
 v.total_bytes/1073741824.0 AS VolumeGB,
 v.available_bytes/1073741824.0 AS AvailableGB
FROM sys.database_files AS f
CROSS APPLY sys.dm_os_volume_stats(DB_ID(),f.file_id) AS v;

Автоматический рост как страховка

Заранее выделяйте ближайший ожидаемый объём, оставляя autogrowth для ошибки прогноза. Частые маленькие расширения создают накладную работу и могут прерывать запросы. Огромные шаги способны выполняться дольше и занимать резерв других файлов. Выбирайте по скорости роста, длительности выделения и доступной ёмкости.

Файлы данных и журнал ведут себя по-разному. Свободные внутренние страницы позволяют не расширять файл данных. Журнал может не освобождаться из-за долгой транзакции, отсутствующих необходимых резервных копий или другого ожидания повторного использования. Добавление места даёт время, но не исправляет эту причину.

Мгновенная инициализация может уменьшить время подготовки данных при подходящих условиях. Она не создаёт ёмкость и не устраняет всю работу. Не переносите её поведение на журнал без учёта версии и размера операции. Измеряйте сопоставимый сценарий.

Предупреждение до исчерпания

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

Учитывайте плановые операции. Создание и перестроение индексов, массовая загрузка и промежуточные таблицы требуют дополнительного пространства. Данные, журнал и tempdb могут потребовать его одновременно. Проверка только целевого файла упускает совместный спрос.

Избегайте регулярного сжатия с последующим ростом. Возвращённое после обслуживания место часто сразу требуется снова. Это добавляет работу и разрушает стабильный план выделения. Рассматривайте shrink только при обоснованном устойчивом сокращении данных.

Сравнивайте прогноз с фактическим выделением во времени. Записывайте длительность и влияние расширений, а не один успешный статус. Полезный сигнал называет ограниченный файл или том, следующее приращение и оставшееся время реакции. Проверяйте MAXSIZE: ограничение файла может остановить рост при свободном диске. Также учитывайте одновременное обслуживание нескольких баз на общем томе. Их отдельные прогнозы не доказывают достаточность общего резерва. Назначьте ответственного за ёмкость и процедуру расширения до инцидента. Для тонко выделяемого хранилища дополнительно согласуйте физический резерв с командой платформы. Успешное увеличение файла сегодня не гарантирует, что следующий шаг будет обеспечен реальными ресурсами.

Нулевое приращение означает отключённое автоматическое расширение. Проверяйте этот параметр явно: свободный диск сам по себе не разрешает увеличение файла.

Техническая документация: Microsoft Learn: Database files · Microsoft Learn: Volume statistics.

Вопрос по статье

Есть вопрос по этой теме?

Расскажите, что вы оцениваете или с какой проблемой столкнулись. Мы ответим с практической рекомендацией.

Inquiries are not enabled in this preview.

Задать вопрос по этой статье