Регламентные операции с индексами в MS SQL Server (Скрипты для SQL-Server — Часть 2)

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

 

Видео в формате вебинара по данной теме:

 

 

Ну и, непосредственно, сами разобранные в вебинаре скрипты под спойлерами ниже. Все переменные собраны в соответствующем блоке в начале скриптов. Для отправки электронной почты используется предварительно настроенный профиль электронной почты компоненты DataBase Mail. О настройке компоненты можно прочитать, например, здесь. Все скрипты много раз опробованы в бою и протестированы на версиях MS SQL 2008, 2012, 2024.

 

Скрипт, показывающий фрагментированные индексы указанной базы данных:

 

 

Скрипт для обслуживания индексов указанной базы данных:

 

 

Скрипт для обслуживания индексов нескольких баз данных (по определенному условию):

 

 

Эти и другие скрипты доступны также в репозитории: https://github.com/Tavalik/SQL_TScripts

Полезные ссылки из вебинара:

  1. Про индексы на its.1c.ru: https://its.1c.ru/db/metod8dev/content/1590/hdoc
  2. Про индексы на msdn.microsoft.com: https://msdn.microsoft.com/ru-ru/library/ms189858.aspx
  3. Регламентные операции на kb.1c.ru: https://kb.1c.ru/articleView.jsp?id=13
  4. Полезные скрипты с индексами на infostart.ru: //infostart.ru/public/308762/

Все вебинары по скриптам для SQL:

  1. Автоматизируем перезаливку баз (Часть 1): //infostart.ru/public/799857/
  2. Регламентные операции с индексами в MS SQL Server (Часть 2): //infostart.ru/public/803209/
  3. Еще немного полезных SQL-скриптов (Часть 3): //infostart.ru/public/807843/

 

7 Comments

  1. ADirks

    Для обслуживания индексов первым делом следует ознакомиться с https://blogs.msdn.microsoft.com/blogdoezequiel/2011/07/03/adaptive-index-defrag/

    ну и так, вообще полезно:

    https://blogs.msdn.microsoft.com/blogdoezequiel/tag/swiss-army-knife/

    http://FirstResponderKit.org

    Reply
  2. Silenser

    (1) Скрипты Ola Hallengren использую уже несколько лет, крайне доволен.

    Reply
  3. lecsysadmin

    MS SQL Server R2 заработало только вот так:

    ——————————————-

    — НАСТРАИВАЕМЫЕ ПЕРЕМЕННЫЕ

    — База данных для анализа

    USE WorkBase

    ——————————————-

    — ТЕЛО СКРИПТА

    DECLARE @db_id smallint;

    SET @db_id = DB_ID();

    — Отбираем объекты, которые:

    — являются индексами (index_id > 0)

    — фрагментация которых более 5%

    — количество страниц в индексе более 128

    SELECT

    OBJECT_NAME(object_id) AS TableName,

    object_id,

    index_id,

    partition_number,

    page_count,

    partition_number,

    index_type_desc,

    avg_fragmentation_in_percent

    FROM sys.dm_db_index_physical_stats(@db_id, NULL, NULL , NULL, ‘LIMITED’)

    WHERE index_id > 0

    AND avg_fragmentation_in_percent > 5.0

    AND page_count > 128

    ORDER BY avg_fragmentation_in_percent DESC

    GO

    Reply
  4. IvSchekin

    (0)

    (3)

    (0)Еще надо определится в какой последовательности выполнять процедуры обслуживания БД, в частности сжатие и обслуживание индексов, да и создания резервной копии.

    Резервная копия, сжатие, перестройка индексов.

    Reply
  5. sorb

    (1) имхо ezequel бедноват и не столь удобен по сравнению с ola

    Reply
  6. ADirks

    (2), (4) Годная штука.

    Reply
  7. Milanick

    Коллеги, можете подскажите советом , куда капнуть?

    Задача «Проверка целостности базы данных» (W2008R2) Проверить целостность базы данных Соединение с локальным сервером Базы данных TEMP_FG Включить индексы Начало задачи: 2018-03-25T19:00:01.

    Конец задачи: 2018-03-25T19:07:52.

    Ошибка:(-1073548784) Сбой выполнения запроса «DBCC CHECKDB(N’TEMP_FG’) WITH NO_INFOMSGS » со следующей ошибкой: «Экстент (1:8488) в базе данных с идентификатором 7 размещен несколькими объектами размещения.

    Экстент (1:8528) в базе данных с идентификатором 7 размещен несколькими объектами размещения.

    Экстент (1:8488) размещен в «Unknown» и по крайней мере еще одном объекте.

    Экстент (1:8528) размещен в «Unknown» и по крайней мере еще одном объекте.

    На страницу карты распределения индекса (IAM) (1:64493) указывает предыдущий указатель IAM-страницы (1:6378) в объекте с идентификатором 0, идентификатор индекса -1, идентификатор секции 0, идентификатор единицы размещения 72060067471556608 (тип Unknown), но это не было обнаружено в ходе просмотра.

    Экстент (1:8488) размещен в «dbo.Config, PK__ConfigNG__589E6EED4499BB57» и по крайней мере еще одном объекте.

    Экстент (1:8528) размещен в «dbo.Config, PK__ConfigNG__589E6EED4499BB57» и по крайней мере еще одном объекте.

    CHECKDB обнаружил 5 ошибок размещения и 0 ошибок согласованности, не связанных ни с одним объектом.

    CHECKDB обнаружил 2 ошибок размещения и 0 ошибок согласованности в таблице «Config» (идентификатор объекта 1118925541).

    CHECKDB обнаружил 7 ошибок размещения и 0 ошибок согласованности в базе данных

    repair_allow_data_loss — это минимальный уровень исправления для ошибок, найденных DBCC CHECKDB (TEMP_FG).». Возможные причины сбоя: проблемы с этим запросом, свойство «ResultSet» установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *