Профилактика БД в ручном режиме

Данные, хранящиеся в таблицах БД, считываются, изменяются и удаляются. Со временем это приводит к тому, что данные физически в файле БД располагаются не по порядку, увеличивается время выполнения запросов на выборку этих данных. Это называется фрагментацией данных.
Можно средствами MS SQL Server настроить профилактику БД, можно непосредственно из oktell запустить соответствующую функцию.
Здесь же рассмотрим другой способ, а именно профилактику БД в ручном режиме.

У MS SQL Server имеется несколько служебных процедур для анализа фрагментрированности данных и дефрагментации индексов.
Для проведения профилактики необходимо запустить либо Query Analyzer, либо MS SQL Server Management Studio Express или какое-либо стороннее приложение, позволяющее выполнять SQL-запросы к БД.
Для получения информации о текущем сосотоянии данных в БД необходимо выполнить запрос:
use oktell
dbcc showcontig WITH ALL_INDEXES
В результате выполнения получим подробный отчет. Рассмотрим для примера часть такого отчета:
DBCC SHOWCONTIG scanning 'A_Stat_Connections_1x1' table...
Table: 'A_Stat_Connections_1x1' (149575571); index ID: 1, database ID: 5
TABLE level scan performed.
— Pages Scanned................................: 3844
— Extents Scanned..............................: 487
— Extent Switches..............................: 3827
— Avg. Pages per Extent........................: 7.9
— Scan Density [Best Count:Actual Count].......: 12.57% [481:3828]
— Logical Scan Fragmentation ..................: 98.83%
— Extent Scan Fragmentation ...................: 8.62%
— Avg. Bytes Free per Page.....................: 3238.7
— Avg. Page Density (full).....................: 59.99%
Обращать внимание нужно на следующие параметры:
Scan Density — идеальным считается значение в 100%,
Logical Scan Fragmentation и Extent Scan Fragmentation — чем меньше, тем лучше.
В остальных случаях желательно произвести дефрагментацию индексов этой таблицы.
Делается это с помощью команды:
dbcc dbreindex ('A_Stat_Connections_1x1'), куда в качестве параметра передается имя таблицы.
Проверить, что дефрагментация прошла успешно, можно выполнив запрос:
dbcc showcontig('A_Stat_Connections_1x1') WITH ALL_INDEXES
Результат:
DBCC SHOWCONTIG scanning 'A_Stat_Connections_1x1' table...
Table: 'A_Stat_Connections_1x1' (149575571); index ID: 1, database ID: 5
TABLE level scan performed.
— Pages Scanned................................: 2348
— Extents Scanned..............................: 294
— Extent Switches..............................: 293
— Avg. Pages per Extent........................: 8.0
— Scan Density [Best Count:Actual Count].......: 100.00% [294:294]
— Logical Scan Fragmentation ..................: 0.00%
— Extent Scan Fragmentation ...................: 0.68%
— Avg. Bytes Free per Page.....................: 143.9
Avg. Page Density (full).....................: 98.22%
Аналогичную процедуру проделать с базой oktell_cc_temp.
Такой метод желательно применять, если есть необходимость оптимизировать самостоятельно несколько таблиц и проследить за результатом оптимизации.
В БД oktell существует хранимая процерура, которая автоматически выполнит все эти действия с тем набором таблиц, которые более всего подвержены фрагментации индксов. Для запуска этого режима можно выполнить такой запрос:
USE oktell
exec A_DB_Optimize
Выполнять дефрагментацию рекомендуется при выключенном сервере октелл или при отсутствии рабочей активности.

    Профилактика БД, фрагментация индексов, ручной режим

    Комментарии

    56

    ООО "Перспектива"


    9 ноября 201013:17

    Можно "причесать" визуальный вид статьи ? и проверить синтаксис, например oktelldbcc стоит раздельно написать

      Новое сообщение

      Прикрепить файлы

      Написать