Рекомендуется также выполнять следующие регламентные операции:
Обновление статистики базы данных
(один или несколько раз в день)
Если вручную, то выполняем процедуры:
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
DBCC UPDATEUSAGE (dbname)
Через графический интерфейс:
![Обновление статистики мастером](images/update.png)
Очистка процедураного кэша СУБД
(после обновления статистики)
Выполняем процедуру
DBCC FREEPROCCACHE
Реиндексация базы данных
(раз в сутки в не рабочее время)
Если вручную, то
sp_msforeachtable N'DBCC DBREINDEX (''?'')'
или смотрите скрипт
Через графический интерфейс:
![Перестройка индексов мастером](images/dbreindex.png)
Используйте анализа фрагментированности для снижения нагрузки
Для больших баз данных нужно уменьшать ненужные операции по дефрагментации тех индексов, для которых это не требуется.
Функция таблицы динамического управления sys.dm_db_index_physical_stats возвращает процент фрагментации в столбце avg_fragmentation_in_percent. Если значение в этом столбце превышает 25%, то для восстановления исходных параметров производительности рекомендуется выполнить дефрагментацию/реиндексацию этого индекса.
Еще проще, воспользовшись отчетом:
![Отчет о необходимости обновления индексов](images/recom.png)
Настройте резервное копирование
Не забудьте настроить автоматический бэкап для вашей базы данных. Это существенно дешевле, чем не делать бэкап и без нервов :)
. Хотя бы раз в неделю проверяйте, что не закончилось место
и восстанавливайте бэкап в копию базы для проверки а спасет ли бэкап, "если что"...
Уменьшение размера базы (лога) данных
Уменьшить базу данных можно или с помощью графического интерфейса приложения SQL Server Management Studio.
Первый случай выполняется посредством вызова контекстного меню на необходимой базе и выбора Tasks - Shrink - Database.
Второй случай опишем несколько подробнее. Ниже приведен скрипт уменьшения лога:
DBCC shrinkdatabase(N'base1c', TRUNCATE_ONLY); /*усечение всей базы*/
use [base1c] DBCC SHRINKFILE (N'base1c_Data', 101); /*усечение только файла данных до размера 101 мб*/
use [base1c] DBCC SHRINKFILE (N'base1c_Log', 0); /*усечение только файла транзакций до размера 0 мб*/
CHECKPOINT; /*Записывает все данных из буферного кэша в текущей базе данных на диск*/
BACKUP LOG [base1c] TO DISK = N'F:\log\base1c.bak' WITH TRUNCATE_ONLY /*очистка журнала транзакций */
где:
base1c - имя базы данных
F:\log\base1c.bak - путь к файлу бэкапа лога
Рекомендую также настроить регламент "Автоматического тестирования и исправления". |