Назад | Перейти на главную страницу

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

У меня есть база данных Sql Server, в которой есть несколько таблиц с нулевым количеством строк, но они занимают в совокупности 10 ГБ места. Я могу увидеть это, щелкнув правой кнопкой мыши / свойства в соответствующих таблицах (пространство данных огромно, от 1 до 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

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

ОБНОВЛЕНИЕ: я использовал в прошлом 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]

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

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

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

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

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

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

alter table table_name rebuild;