SQL Server не используется, но зарезервировано табличное пространство

У меня есть базы данных ms sql, которые становятся очень большими. При осмотре я обнаружил, что в некоторых таблицах есть много неиспользуемого места. Я не выполняю много операций физического удаления, поэтому не думаю, что это просто удаленные записи. DBCC SHRINK не уменьшает размер файла. Но если я перенесу таблицу в новую пустую базу данных, размер уменьшится примерно на 80%. Вместо 7 ГБ, которые у меня есть в этой таблице в текущей базе данных, я получаю около 1,5 ГБ в новой базе данных. Как будто sql-сервер выделяет слишком много памяти. Кто-нибудь сталкивался с этим раньше? Я хотел бы иметь возможность уменьшить таблицу, удалив неиспользуемое выделенное пространство, без необходимости создавать целую новую базу данных.

Дополнительная информация:

Использована модель полного восстановления. Попробую перестроить индексы, думаю, давно прошло. ldf ежедневно сжимаются с использованием какой-то дурацкой хранимой процедуры, которая их усекает.

Абсолютно БЕЗ ВОПРОСА в использовании модели полного восстановления, если все, что вы делаете с LDF, - это их усечение! Правильный способ уменьшить их размер - сделать резервную копию файлов журнала, после чего они автоматически уменьшатся. Кто-то, кто понимает цепочки журналов и правильную стратегию резервного копирования, отчаянно нужен, чтобы вмешаться и помочь вам разобраться в этом. Что-то меньшее ставит вас на страшный риск потери данных.

ErikE 31.01.2012 23:37

Взгляните на эту статью базы знаний и посмотрите, применима ли она: support.microsoft.com/kb/913399

Kevin Dente 05.09.2008 22:49

вы пробовали перестроить индекс?

SQLMenace 05.09.2008 22:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
4
16 900
6

Ответы 6

В опциях вы можете указать, на сколько хотите вырасти. По умолчанию я считаю, что это 10%, поэтому, учитывая базу данных 200 МБ, когда вы заполняете свою последнюю страницу, она выделяет еще 20 МБ пространства страницы. При 7 ГБ будет выделено 700 МБ.

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

ПРИМЕЧАНИЕ: мой ответ заключается не в том, как это исправить, а в том, как предотвратить / объяснить, почему вы можете увидеть все это нераспределенное пространство.

Я обнаружил, что если вы не позаботитесь о резервном копировании файла журнала переходов (LDF), вы получите что-то вроде этого поведения. Я не могу не подчеркнуть важность наличия хорошей резервной «гигиены». Это не только спасет ваш бекон, если что-то пойдет не так, но я также помогу поддерживать хорошую и надежную базу данных.

Согласны, никогда не забывайте делать резервные копии журналов транзакций, а также резервных копий базы данных. Журнал будет расти, пока не съест весь ваш жесткий диск.

HLGEM 31.01.2012 23:39

I don't do many physical deletes

насчет обновлений таблицы, каков уровень фрагментации. запустите DBCC SHOWCONTIG, затем перестройте индекс, если он сильно фрагментирован. После этого сделайте РЕЗЕРВНОЕ КОПИРОВАНИЕ ЖУРНАЛА С TRUNCATE_ONLY, за которым следует команда SHRINK.

Это сработало для меня в прошлом

USE [DBNAME]
GO

DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY)

GO

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

Возможно, таблица была построена с включенным заполнением для индекса. Причина, по которой люди создают индекс с заполнением, состоит в том, чтобы предотвратить разделение страниц.

Щелкните правой кнопкой мыши таблицу в диспетчере SQL и выберите ТАБЛИЦА СКРИПТА. Тогда посмотрите, есть ли PAD_INDEX=OFF. Если используется PAD_INDEX, вероятно, там таблица занимает место.

Другие вопросы по теме