Лучший способ подготовить базу данных только для чтения - PullRequest
3 голосов
/ 12 февраля 2009

Мы берем одну из наших производственных баз данных и создаем копию на другом сервере только для чтения. База данных только для чтения находится на SQL Server 2008. Как только база данных будет на новом сервере, мы хотели бы оптимизировать ее для использования только для чтения.

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

Какие проблемы связаны с этим и как лучше всего это сделать? Существуют ли хранимые процедуры, включенные в SQL Server, которые помогут? Я попытался запустить DBCC SHRINKDATABASE, но это не освободило неиспользуемое пространство.

РЕДАКТИРОВАТЬ: точная команда, которую я использовал для сжатия базы данных была

DBCC SHRINKDATABASE (dbname, 0)
GO

Бежал пару часов. Когда я проверил табличное пространство с помощью sp_spaceused, ни одно из неиспользованного пространства не было освобождено.

Ответы [ 4 ]

1 голос
/ 12 февраля 2009

Есть несколько вещей, которые вы можете сделать:

Во-первых - не беспокойтесь об абсолютном размере выделенной БД, если только у вас не хватает места на диске.

Второе. У Idera есть много классных инструментов SQL Server, один из которых дефрагментирует БД. http://www.idera.com/Content/Show27.aspx

В-третьих, удаление и повторное создание кластеризованного индекса также по существу дефрагментирует таблицы - и это заново создает все некластеризованные индексы (также дефрагментируя их). Обратите внимание, что это, вероятно, РАСШИРЯЕТ выделенный размер вашей базы данных (опять же, не беспокойтесь об этом) и займет много времени (перестроения кластерного индекса стоят дорого).

1 голос
/ 12 февраля 2009

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

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

Некоторые вещи, которые следует учитывать при использовании DBCC SHRINKDATABASE, вы не можете сжать сверх минимального размера вашей базы данных.

Попробуйте ввести выписку в следующей форме.

DBCC SHRINKDATABASE (DBName, TRUNCATEONLY);

Ура, Джон

0 голосов
/ 12 февраля 2009

В MSSQL Server есть инструмент для сжатия или усечения базы данных. Я думаю, что вы выбираете свойства базы данных, и вы найдете ее. Это можно сделать до или после копирования резервной копии.

Некоторые формы репликации могут делать то, что вы хотите.

0 голосов
/ 12 февраля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...