Как часто вы должны сжимать базу данных SQL CE? - PullRequest
11 голосов
/ 21 июля 2009

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

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

1 Ответ

8 голосов
/ 21 июля 2009

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

Вот (частичная) цитата из веб-трансляции на 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 - это организация сама структура базы данных. Как твой приложение изменяет содержимое база данных, записи становятся более случайным образом распределены в пределах файловая структура базы данных. Этот фактор особенно актуально после большого количество вставок и удалений. к обеспечить оптимальный доступ к базе данных, сжать базу данных после любого существенное изменение содержания.

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

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

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

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

...