Sql Server огромные таблицы без строк

У меня есть база данных Sql Server, в которой есть несколько таблиц с нулевым числом строк, но занимающих в совокупности 10 ГБ пространства. Я могу убедиться в этом, щелкнув правой кнопкой мыши на свойствах соответствующих таблиц (объем данных огромен, от 1 до 6 ГБ, а количество строк в этих таблицах равно нулю). Я понятия не имею, что может быть причиной этого, так как я предполагаю, что нулевые строки означали бы почти нулевое занимаемое пространство.

Есть идеи?

6 ответов

Перестройте все индексы в таблицах, включая кластерный индекс. Из книг онлайн:

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

Что-то вроде:

ALTER INDEX ALL ON [lc_db_user].[JMS_MESSAGES] REBUILD

DBCC SHRINKDATABASE или (более предпочтительно) DBCC SHRINKFILE будет что-то делать, только если пространство фактически было освобождено из самой таблицы. Также, пожалуйста, убедитесь, что вы знакомы с проблемами, связанными с сокращением файлов базы данных. Резюме: НИКОГДА не используйте автоматическое сжатие, сокращайте файлы только при необходимости и всегда выполняйте полный переиндекс для дефрагментации всех только что фрагментированных индексов.

Другой способ справиться с такой проблемой - использовать инструкцию TRUNCATE TABLE:

TRUNCATE TABLE [lc_db_usr].[JMS_MESSAGES]

Это, однако, будет работать только с таблицами, на которые не ссылается ограничение FOREIGN KEY.

Для получения более подробной информации: http://msdn.microsoft.com/en-us/library/ms177570.aspx

Это немного странно, но работает:

Вставьте фиктивный столбец в качестве первого столбца таблицы, затем сохраните таблицу.

Наконец, удалите новый столбец и снова сохраните таблицу.

Теперь вы наверняка будете использовать 0 байтов.

Ноэль Париколло

Попробуй это:

alter table table_name rebuild;

Если база данных содержала много строк данных, то эти данные были удалены из таблиц, ядро ​​базы данных не будет сокращать файлы. Для этого есть команды, мне придется их искать.

ОБНОВЛЕНИЕ: В прошлом я использовал DBCC SHRINKDATABASE, подробности TechNet можно найти здесь.

Я не могу опубликовать снимок экрана, но я делаю щелчок правой кнопкой мыши по таблице, захожу в свойства и в разделе "Хранилище":

Data space: 2,152.883 MB
FileGroup: PRIMARY
Index space: 0.063 MB
Partition scheme: 
Row count: 0
Table is partitioned: False
Text filegroup: PRIMARY

Когда я делаю SELECT * на столе, я не получаю никаких результатов.

Вот скрипт CREATE (там есть поле изображения):

CREATE TABLE [lc_db_usr].[JMS_MESSAGES](
 [MESSAGEID] [int] NOT NULL,
 [DESTINATION] [varchar](150) NOT NULL,
 [TXID] [int] NULL,
 [TXOP] [char](1) NULL,
 [MESSAGEBLOB] [image] NULL,
PRIMARY KEY CLUSTERED 
(
 [MESSAGEID] ASC,
 [DESTINATION] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Другие вопросы по тегам