Рекомендації по настройці регламентних і допоміжних процедур

Головна | Про нас | Зворотній зв'язок
В даному розділі буде наведено перелік процедур, які необхідно виконувати при експлуатації системи. На жаль, дана інформація корисна тільки при використанні СУБД MS SQL Server.
Оновлення статистик. MS SQL Server будує план запиту на підставі статистичної інформації про розподіл значень в індексах і таблицях. Статистична інформація збирається на підставі частини (зразка) даних і автоматично оновлюється при зміні цих даних. Іноді цього виявляється недостатньо для того, що MS SQL Server стабільно будував найбільш оптимальний план виконання всіх запитів.
exec sp_msforeachtable N'UPDATE STATISTICS. WITH FULLSCAN '
Оновлення статистик не призводить до блокування таблиць, і не буде заважати роботі інших користувачів. Рекомендується оновлювати статистики не рідше одного разу в день.
Очищення процедурного КЕШ-а. Оптимізатор MS SQL Server кешируєт плани запитів для їх повторного виконання. Це робиться для того, щоб економити час, що витрачається на компіляцію запиту в тому випадку, якщо такий самий запит вже виконувався і його план відомий.
Цей запит слід виконувати безпосередньо після поновлення статистики. Відповідно, частота його виконання повинна збігатися з частотою оновлення статистики.
Дефрагментація індексів. При інтенсивній роботі з таблицями бази даних виникає ефект фрагментації індексів, який може привести до зниження ефективності роботи запитів.
sp_msforeachtable N'DBCC INDEXDEFRAG (<имя базы данных>, ''? '') '
Дефрагментація індексів не блокує таблиці, і не буде заважати роботі інших користувачів, однак створює додаткове навантаження на SQL Server. Рекомендується виконувати дефрагментацію індексів кілька разів в день. Якщо дефрагментацію виконувати 1 раз в день, то вона має сенс втрачається, тому що її замінить процедура реіндексація.
Реіндексація таблиць бази даних. Реіндексація таблиць включає повне перестроювання індексів таблиць бази даних, що призводить до суттєвої оптимізації їх роботи. Рекомендується виконувати регулярну переіндексацію таблиць бази даних. Для реіндексація всіх таблиць бази даних необхідно виконати наступний SQL запит:
sp_msforeachtable N'DBCC DBREINDEX ( ''? '') '
Реіндексація таблиць блокує їх на весь час своєї роботи, що може істотно позначитися на роботі користувачів. У зв'язку з цим реіндексацію рекомендується виконувати під час мінімального завантаження системи.
Зменшення розміру файлу транзакцій. Іноді буває, що необхідно зменшити розмір журналу транзакцій негайно. Це робиться в такий спосіб:
ALTER DATABASE <Имя базы данных> SET RECOVERY SIMPLE
DBCC SHRINKFILE ( 'Логічне ім'я файлу',<оставляемый размер лога в мегабайтах>)
ALTER DATABASE <Имя базы данных> SET RECOVERY FULL
BACKUP LOG <Имя базы данных> WITH TRUNCATE_ONLY
DBCC SHRINKFILE ( 'Логічне ім'я файлу',<оставляемый размер лога в мегабайтах>)
«Логічне ім'я файлу» журналу транзакцій можна дізнатися, виконавши команду
sp_helpdb 'Ім'я бази даних'. У колонці «name» і буде це ім'я.
ALTER DATABASE [TRADE_COMPLEX_BASE] SET RECOVERY SIMPLE
DBCC SHRINKFILE (N'TRADE_COMPLEX_BASE_log '. 128, TRUNCATEONLY)
ALTER DATABASE [TRADE_COMPLEX_BASE] SET RECOVERY FULL
BACKUP DATABASE [TRADE_COMPLEX_BASE]
TO DISK = N'K: \ BACKUPS \ TRADE_COMPLEX_BASE_backup.bak '
WITH NOFORMAT, NOINIT, NAME = N'TRADE_COMPLEX_BASE_full_backup ',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
Після виконання даного запиту розмір файлу журналу залишиться рівним 128 Мб.
Найпростіший приклад розкладу виконання регламентних завдань: щодня о 03:00 послідовно виконати наступні процедури:
Налаштування процедур можна зробити за допомогою SQL Server Management Studio в розділі «Управління» (Management) -> «Плани обслуговування» (Maintenance Plans).