Подтвердить что ты не робот

Как часто вы должны уплотнять базу данных SQL CE?

Есть ли необходимость периодически уплотнять базы данных SQL CE? Будет ли автоматическая усадка достаточной? Наш средний размер базы данных составляет около 100 МБ, при этом крупные пользователи поражают 400-500 МБ (но это очень редко). Если нам нужно вручную сжимать, как мы можем сказать, когда мы должны? Есть ли способ программно определить уровень фрагментации или процент потраченного впустую пространства? Если нет, то какой другой порог мы можем использовать?

Предыдущая версия продукта была построена на базе базы данных MS Access (gasp), поэтому нам пришлось периодически сжимать ее, чтобы она работала.

4b9b3361

Ответ 1

Я бы предположил, что если вы можете настроить базу данных так, чтобы она автоматически сжималась и ремонтировалась по мере необходимости, это довольно чертовски тщательно. Именно поэтому существует нехватка литературы о лучших методах; существует преобладающее предположение, что оно "просто работает". Поэтому любое руководство, которое вы получаете в этой области, будет неопределенным.

Вот (частичная) цитата из веб-трансляции на http://www.microsoft.com/web/library/Details.aspx?id=sql-server-2008-compact-express-depoly-manage

Поддержка SQL Server Express Издания довольно похожи на управление любая другая многопользовательская база данных, что означает что у нас есть возможность войти и иметь дело с файловыми группами, мы можем с резервными опциями и восстановлением моделей, а что нет. [Но] когда мы имеем дело с компактными изданиями или службой SQL CE, мы не имеем почти столько же опции. Действительно, единственные варианты, которые мы есть, как мы хотим иметь дело с усадки и ремонта.

Вот еще один из MSDN: http://msdn.microsoft.com/en-us/library/ms838028.aspx#youcantakeitwithyou_sqlserverce_topic4

Обратите внимание, что они дают подробные сведения об архитектуре базы данных, но все же не дают график обслуживания. Их советы: сделайте это, когда база данных начнет замедляться. Также обратите внимание, что этот совет относится к 2005 году, и с тех пор ситуация улучшилась; то есть процедуры обслуживания теперь автоматизированы.

Держите свой дом (или базу данных) в порядке
Еще один большой фактор в производительность больших баз данных в SQL Сервер CE 2.0 - это организация самой структуры базы данных. Как ваш приложение изменяет содержимое база данных, записи становятся больше случайным образом распределены в пределах файловая структура базы данных. Этот фактор особенно верно после большого количество вставок и удалений. к обеспечить оптимальный доступ к базе данных, компактность базы данных после любого существенное изменение содержимого.

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

Заказ записей по первичному ключу может улучшить первичный ключ доступ. Это связано с тем, что page-ориентированный характер SQL Server CE (и большинство других баз данных). Скорее чем загрузка отдельных записей из база данных в память, SQL Server CE загружает блоки записей страницы. Когда записи базы данных сгруппированы в порядке первичного ключа, загрузка страницы, содержащей одну запись автоматически загружает эти записи с помощью аналогичные значения первичного ключа. Для большинства приложений, это приводит к тому, что называемый хорошей "скоростью попадания", это означает, что когда ваша заявка идет доступ к последовательной базе данных записей, существует большая вероятность что страница, содержащая эти записи уже находится в памяти и может быть напрямую доступ. Когда записи более случайным образом распределены, как часто происходит после большого количества вставляет и удаляет, есть скорость доступа, требующая SQL Server CE извлекать больше страниц из базы данных файла для доступа к тому же числу записи.

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

Я сочувствую вашему опыту с базами данных Access. Однако, я думаю, вы обнаружите, что ваш опыт работы с SQL Server CE мало похож.