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

Данный материал предназначен для продвинутых пользователей. Если у вас есть вопросы по применению, обратитесь в Техническую поддержку BPMSoft.

Если производительность запросов на уровне базы данных BPMSoft снижается, то необходимо проверить состояние индексов. Частые операции с данными могут привести к фрагментации индексов и устареванию статистики, что влечет формирование неоптимальных планов запросов.

Регулярное обслуживание индексов — перестроение, реорганизация и обновление статистики — помогает поддерживать высокую производительность базы данных. Ниже приведены скрипты для анализа состояния индексов.

Скрипты для Microsoft SQL Server

Статистика по индексам
SELECT
     TableName = t.name,
     ColumnName = col.name,
     IndexId = ind.index_id,
     IndexName = ind.name,
     ColumnId = ic.index_column_id,
     s.LastStatsUpdate
FROM
     sys.indexes ind
INNER JOIN
     sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN
     sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN
     sys.tables t ON ind.object_id = t.object_id
Left JOIN
     (
       select [object_id], MAX(STATS_DATE([object_id], stats_id)) AS LastStatsUpdate
       from sys.stats
       group by [object_id]
     )  as s ON s.object_id = t.object_id
WHERE
     ind.is_primary_key = 0
     AND ind.is_unique = 0
     AND ind.is_unique_constraint = 0
     AND t.is_ms_shipped = 0
ORDER BY
     t.name, ind.name, ind.index_id, ic.is_included_column, ic.key_ordinal;
Список индексов в базе данных
declare @DB sysname = N'';
select s.name schema_name, t.name TableName, i.name IndexName, d.avg_fragmentation_in_percent Fragmentation, d.page_count
from   sys.dm_db_index_physical_stats( DB_ID(@DB), null, null, null, null) d
    inner join sys.tables  t on d.object_id = t.object_id
    inner join sys.schemas s on t.schema_id = s.schema_id
    inner join sys.indexes i on d.object_id = i.object_id AND d.index_id = i.index_id
--where  d.index_id > 0 and d.page_count > 8
order by t.name asc, i.name asc

Скрипты для PostgreSQL

Статистика по индексам
/*
indexrelname: Имя индекса.
idx_scan: Количество сканов индекса, использованных для поиска данных.
idx_tup_fetch: Количество взятых из индекса кортежей.
idx_tup_read: Количество прочитанных из индекса кортежей.
idx_bytes: Размер индекса в байтах.
indexrelpages: Количество страниц индекса.
indexrelpages/filereelpages: Процент заполненности страниц индекса (может указывать на фрагментацию).
*/
SELECT * FROM pg_stat_all_indexes
order by "indexrelname"
Список индексов в базе данных
SELECT
    tablename,
    indexname,
    indexdef
FROM
    pg_indexes
WHERE
    schemaname = 'public'
ORDER BY
    --tablename,
    indexname desc;

Обслуживание индексов

В зависимости от результатов анализа можно применить следующие методы обслуживания:

  1. Перестроение индексов (Rebuild).

Перестроение индекса создает его заново, устраняя фрагментацию. Этот метод подходит для индексов с высокой фрагментацией (>30%).

Индексы содержающие Guid всегда будут иметь высокую фрагментацию.

  1. Реорганизация индексов (Reorganize).

Реорганизация исправляет фрагментацию без полного пересоздания индекса. Этот метод быстрее перестроения и подходит для умеренной фрагментации.

  1. Обновление статистики.

Обновление статистики делает ее актуальной, что улучшает планы запросов и оптимизирует доступ к данным.

Рекомендуем изучить

Общие принципы диагностики проблем с производительностью

Материал был полезен для вас?
Вебинар: 22 апреля в 11:00
Приглашаем вас на вебинар «BPMSoft – от выбора к реальным процессам», где покажем, как компании на практике сокращают time-to-market и масштабируют бизнес с помощью решений BPMSoft.
Регистрация на мероприятие
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Оставить заявку
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Рассчитать стоимость
Задать вопрос
Карта сценариев использования ИИ для управления маркетингом, продажами и сервисом
Заполните форму и мы отправим исследование на E-mail
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Стать образовательным партнёром
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Проверьте вашу почту
Для завершения подписки перейдите по ссылке в письме, которое мы только что отправили. Если письма нет во «Входящих», проверьте папку «Спам».
Telegram Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее