SQL Server 2005: дисковое пространство занято удаленными столбцами - PullRequest
3 голосов
/ 05 июня 2009

У меня есть большая таблица в SQL Server 2005, которая занимает около 3,5 ГБ пространства (согласно sp_spaceused). У него 10 миллионов записей и несколько индексов.

Я просто отбросил из нее несколько столбцов, так что длина записи сократилась до половины, и, к моему удивлению, это заняло нулевое время. Очевидно, что sp_spaceused все еще сообщал о том же занятом пространстве, SQL-сервер ничего не делал, когда отбрасывал столбцы, кроме того, что помечал их как «отброшенные».

Итак, я переместил все данные из этой таблицы в другую новую таблицу, обрезал ее и переместил все данные обратно, чтобы восстановить все данные.

Теперь, после этого, данные занимают 2,8 ГБ, что меньше, чем раньше, но я ожидал большего падения.

Возможно ли, что тот факт, что эта таблица изначально имела эти столбцы, все еще что-то там оставляет?

Было ли этого недостаточно? Должен ли я удалить его и создать его снова с меньшим набором столбцов?

Или данные действительно занимают 2,8 ГБ?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 06 июня 2009

Вам потребуется перестроить кластеризованный индекс (при условии, что он у вас есть - по умолчанию ваш первичный ключ - это кластеризованный ключ).

ALTER INDEX (your clustered index) ON TABLE (your table) REBUILD

Данные на самом деле являются конечным уровнем вашего кластерного индекса - после его перестроения они будут «сжаты», и строки должны храниться на гораздо меньшем количестве страниц данных, что также уменьшит размер базы данных.

Если это не поможет, вам также может понадобиться запустить DBCC SHRINKDATABASE в вашей базе данных, чтобы действительно освободить место. Эти два шага вместе должны получить небольшой файл базы данных!

Марк

2 голосов
/ 06 июня 2009

Как вы рассчитали, что "ожидалось большее падение"? Обратите внимание, что данные поступают на страницах 8K, что означает, что даже если отдельные строки меньше, это не всегда означает, что вам нужно меньше страниц для их хранения. Например (крайний пример), если бы ваши строки имели размер 7,5 КБ каждая, подойдет только одна строка на страницу. Вы отбрасываете некоторые столбцы, ваша строка 5 КБ, но все равно это одна строка на страницу.

...