Производительность базы данных (SQL Server 2005) снижается, если я ее уменьшаю - PullRequest
4 голосов
/ 12 июля 2009

Уменьшится ли производительность базы данных (SQL Server 2005), если я уменьшу ее?

Что именно происходит с файлами mdf и ldf при применении сжатия (Internals ???)

Ответы [ 3 ]

10 голосов
/ 12 июля 2009

При сжатии базы данных она будет использовать ресурсы для сжатия базы данных. При возникновении проблем возникает необходимость повторного роста БД, и, если у вас настроен автоматический рост, он будет потреблять больше ресурсов для автоматического роста. Постоянное автоматическое сжатие (или сокращение в рамках плана обслуживания) приведет к фрагментации физического диска.

Если у вас включено автоматическое увеличение, и для него установлено значение по умолчанию 1 МБ, то постоянное автоматическое увеличение потребляет много ресурсов.

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

Вам также следует установить автоматическое увеличение на МБ (а не на% базы данных, поскольку при автоматическом увеличении сначала необходимо рассчитать%, а затем увеличить базу). Вы также должны установить автоматическое увеличение до разумного уровня, чтобы гарантировать, что оно не будет расти каждые 10 минут, попробуйте нацелиться на 1 или 2 роста в день.

Вам также следует обратить внимание на настройку мгновенной инициализации для вашего SQL Server.

Удачи,

Мэтт

1 голос
/ 08 октября 2013

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

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

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

0 голосов
/ 12 июля 2009

Да, это может немного повлиять на производительность. Когда база данных находится в работе, ее мало заботит использование дискового пространства, больше об эффективном извлечении / сохранении данных.

...