«Индексы в 1С. Влияние на производительность»

22
Индексы в 1С. Влияние на производительность Индексы в 1С Влияние на производительность

Transcript of «Индексы в 1С. Влияние на производительность»

Индексы в 1С. Влияние на производительность

Индексы в 1С

Влияние на производительность

Индексы в 1С. Влияние на производительность

План вебинара:

Что такое ИНДЕКС

Кластерный и некластерный индексы

Составной и покрывающий индексы

Селективность индекса

Плюсы и минусы индексов

Вопросы для закрепления

Настройка индексов в 1С

Примеры использования индексов в 1С

Полезные ссылки

Индексы в 1С. Влияние на производительность

Таблица-куча - это неупорядоченный набор данных.

Что такое индекс

№ Город Улица Дом

1 Владимир Ленина 4

2 Москва Пушкина 57

3 Смоленск Ломоносова 16

4 Анапа Первая 3

№ Город Улица Дом

1 Абакан Левитана 1

2 Сургут Тургенева 76

3 Судогда Ломоносова 13

4 Кострома Первая 67

№ Город Улица Дом

1 Ярославль Платонова 67

2 Муром Тихонова 43

3 Суздаль Вторая 10

4 Тула Первая 90

№ Город Улица Дом

1 Краснодар Тургенева 34

2 Дзержинск Третья 109

3 Иваново Левая 16

4 Устюг Первая 3

Стр. 1

Стр. 2

Стр. 3

Стр. 4

Страница БД – основная единица, для осуществления операций обмена (ввода-вывода). То есть

минимальная частица данных, которой оперирует сервер СУБД при работе с базами. Физически размер

страницы составляет 8 кб.

Индексы в 1С. Влияние на производительность

Что такое индекс

№ Город

1 Абакан 11

2 Муром 12

№ Город

1 Абакан 111

2 Иваново 112

№ Город

1 Муром 121

2 Сургут 122

№ Город

1 Абакан 3-1

2 Анапа 1-4

3 Владимир 1-1

4 Дзержинск 4-2

№ Город

1 Иваново 4-3

2 Кострома 3-4

3 Краснодар 4-1

4 Москва 1-2

№ Город

1 Муром 2-2

2 Смоленск 1-3

3 Судогда 3-3

4 Суздаль 2-3

№ Город

1 Сургут 3-2

2 Тула 2-4

3 Устюг 4-4

4 Ярославль 2-1

Стр. 11 Стр. 12

Стр. 122Стр. 121Стр. 112Стр. 111

№ Город Улица Дом

1 Владимир Ленина 4

2 Москва Пушкина 57

3 Смоленск Ломоносова 16

4 Анапа Первая 3

{…}

Стр. 1

Корневой уровень

Промежуточный

уровень

Уровень

листьев

Страницы

основной

таблицы

№ Город Улица Дом

1 Краснодар Тургенева 34

2 Дзержинск Третья 109

3 Иваново Левая 16

4 Устюг Первая 3

Стр. 4

Индексы в 1С. Влияние на производительность

Таблица-куча:

Содержит все данные.

Хранит данные в неотсортированном виде

Для поиска требуется последовательно считывать все данные, пока не найдутся нужные.

Очень медленно работает поиск по таблице-куче

Индекс

Содержит данные только определенных полей таблицы.

Хранит данные полей в отсортированном виде в сбалансированном b-дереве поиска.

Для поиска нужных данных достаточно чтения нескольких страниц данных, а не всей таблицы.

Значительно ускоряет процедуру поиска нужных данных.

Для поиска по таблице-куче нужно по городу «Иваново» нужно «просканировать» 4 страницы

данных. При поиске по индексу – только одну нужную страницу данных.

Что такое индекс

Индексы в 1С. Влияние на производительность

Некластерный индекс:

«Листья» содержат ссылки на страницы основной таблицы.

Требуется дополнительное чтение страниц основной таблицы, если нужных полей выборки не

содержится в индексе.

Кластерный индекс:

«Листья» уже содержат страницы основной таблицы.

Не требует дополнительного чтения страниц основной таблицы.

Использование кластерного индекса ускоряет процедуру чтения данных, но усложняет

обслуживание такой таблицы, так как основная таблица записывается в отсортированном

виде.

Большая часть данных в платформе 1С хранится в виде кластеризованной таблицы

Кластерный и некластерный индекс

Индексы в 1С. Влияние на производительность

Некластерный индекс Кластерный индекс

№ Город

1 Абакан 11

2 Муром 12

№ Город

1 Муром 121

2 Сургут 122

Корневой уровень

Промежуточный

уровень

№ Город

1 Сургут 3-2

2 Тула 2-4

3 Устюг 4-4

4 Ярославль 2-1

Уровень листьев

№ Город Улица Дом

1 Краснодар Тургенева 34

2 Дзержинск Третья 109

3 Иваново Левая 16

4 Устюг Первая 3

Страницы

данных

№ Город

1 Абакан 11

2 Муром 12

№ Город

1 Муром 121

2 Сургут 122

Корневой уровень

Промежуточный

уровень

№ Город Улица Дом

1 Краснодар Тургенева 34

2 Дзержинск Третья 109

3 Иваново Левая 16

4 Устюг Первая 3

Листья содержат

данные таблицы

Кластерный и некластерный индекс

Индексы в 1С. Влияние на производительность

Некластерный индекс Кластерный индекс

Кластерный и некластерный индекс

Может быть несколько для одной

таблицы по разным наборам полей

Каждый дополнительный индекс

содержит копию данных основной

таблицы

Таблица данных сортируется по полям

кластерного индекса

Кластерный индекс может быть только один.

Чтения индекса достаточно для получения

любых полей выборки.

Удобны при работе с данными, у которых

значение ключа возрастает. Например, для

документов.

Индексы в 1С. Влияние на производительность

Простой индекс – индекс, состоящий из одного поля

Составной индекс – индекс состоящий из нескольких полей

Составной (и простой) индекс может быть кластерным и некластерным.

Последовательность полей составного индекса имеет значение. Составные индексы по полям

«Город + Улица» и «Улица +Город» – это разные индексы

В составном индексе возможно только последовательное использование полей

Составной и покрывающий индексы

Индексы в 1С. Влияние на производительность

Составной и покрывающий индексы

№ Город Улица

1 Абакан Левитана 11

2 Муром Тихонова 12

№ Город Улица

1 Муром Тихонова 121

2 Сургут Тургенева 122

Корневой уровень

Промежуточный

уровень

№ Город Улица

1 Сургут Тургенева 3-2

2 Тула Первая 2-4

3 Устюг Первая 4-4

4 Яросл

авль

Платонова 2-1

Уровень листьев

Индекс будет использоваться, если отбор

осуществляется по полю «Город» или по

полям «Город+Улица»

Если по «Городу» то «частичное

сканирование».

При отборе по полю «Улица» то индекс

использовать нецелесообразно

Наглядный пример – поиск точки мира на

карте. Сначала мы ищем страну, потом

город, потом улицу и т.д. Нет смысла

сначала искать улицу, потом город

ПОЛЯ ИСПОЛЬЗУЮТСЯ ТОЛЬКО

ПОСЛЕДОВАТЕЛЬНО

Индексы в 1С. Влияние на производительность

Составной и покрывающий индексы

Покрывающий индекс – индекс, который содержит в себе все поля запроса

Выбрать Город, Улица из Справочник.Адреса где Город = "Москва»

Индекс является покрывающим, так как содержит все поля запроса (Город+Улица)

Не требуется подгружать данные из основной таблица, так как поля индекса уже содержать эти данные

Выбрать Город, Дом из Справочник.Адреса где Город = "Москва»

Индекс не является покрывающим, так как содержит НЕ все поля запроса (Город+Улица)

Если индекс не кластерный, то потребуется подгружать страницы с недостающими данными

Индексы в 1С. Влияние на производительность

Показатель селективности = 1/DISTINCT_KEY

DISTINCT_KEY – количество уникальных записей в поле (ключе индекса).

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

получаем показатель селективности ½ = 0,5 или 50%. Это очень низкая селективность.

Из разных источников. Если показатель селективности выше 10(30)%, то

использование такого индекса только замедляет работу.

Чем ниже показатель селективности, тем эффективнее индекс.

Селективность индекса

Индексы в 1С. Влияние на производительность

Селективность влияет на то, будет ли вообще использоваться индекс

При низкой селективности лучше использовать сканирование

таблицы, чем выборку по индексу

В начало лучше ставить самые селективные (уникальные) и часто

используемые поля

Селективность индекса

Индексы в 1С. Влияние на производительность

Почему поиск по индексу работает быстрее чем, поиск по таблице?

Может ли кластерный индекс быть не покрывающим?

Какая будет селективность индекса по полю ИНН для справочника «Организации», в котором

находиться 5 разных организаций? Есть ли смысл использовать такой индекс? А если это

индекс по коду для справочника «Номенклатура» с 10 000 элементов?

Вопросы

Индексы в 1С. Влияние на производительность

Плюсы и минусы индексов

Значительное ускорение выборки нужных

данных из больших массивов

Сокращение затрат на ресурсы при

использовании покрывающих индексов.

Нет необходимости подгружать ненужные

страницы данных.

Блокировка только нужных записей при

работе с таблицами, и следовательно

высокая параллельность работы

пользователей.

Плюсы Минусы

Индексы занимают дополнительное

место. Бывает, что индексы занимают

больше места, чем сама таблица данных.

Дополнительные затраты на

обслуживание индекса при изменении

данных. Кроме изменения данных самой

таблицы нужно обновлять данные в

индексах.

Требуется периодическое обслуживание

индексов – дефрагментация, обновление

статистики.

Индексы в 1С. Влияние на производительность

Свойство «Индексировать»

Платформа для реквизита документа создала составной индекс «ПолеРеквизита»+ «Ссылка»

Настройка индексов в 1С

Индексы в 1С. Влияние на производительность

Свойство «Индексировать с дополнительным упорядочиванием»

Платформа кроме поля, включает Основное представление объекта.

«ПолеРеквизита» + «ДатаДокумента (для документа)» + «Ссылка» + «ПометкаУдаления (8.3)»

Настройка индексов в 1С

Индексы в 1С. Влияние на производительность

Свойство «Ведущее» у регистра сведений.

Создается индекс аналогично «Индексировать»

Настройка индексов в 1С

Индексы в 1С. Влияние на производительность

Критерий отбора.

Создается индекс в таблице каждого реквизита отбора

Настройка индексов в 1С

Товар табличной части документа

включен в критерий отбора

Платформа создала составной

индекс для табличной части товары

«ТоварСсылка»+»ДокументСсылка»

Индексы в 1С. Влияние на производительность

Основные инструменты сбора плана запроса:

Profiler SQL

Консоль запросов

Технологический журнал

ЦУП

Операторы плана запроса:

«Clustered Index seek» или «Index seek» – поиск по индексу

«Clustered Index scan» или «table scan» – сканирование кластерного индекса или таблицы, что

практически одно и то же.

Индексы в 1С. Влияние на производительность

Индексация временных таблиц

8.2 индекс некластерный составной

8.3 индекс кластерный составной

На практике часто индекс замедляет работу запроса

Когда индекс может не использоваться в условиях

Вычисление

Функции

Вхождение полей в разные списки. Частичное сканирование

Отрицание

ИЛИ

Несоответствие полей индекса и условий запроса

Порядок и содержание полей в условии.

Примеры использования индексов в 1С

Индексы в 1С. Влияние на производительность

Индексы платформы 1С:

«Индексы таблиц базы данных» на ИТС (http://its.1c.ru/db/metod8dev/content/1590/hdoc)

Метод платформы: ПолучитьСтруктуруХраненияБазыДанных()

Основные понятия индексов с примерами:

http://www.sql.ru/articles/mssql/03013101indexes.shtml

Влияние индексов на производительность 1С:предприятие 8

http://www.gilev.ru/index/

http://курсы-по-1с.рф/news/2015-12-21-platform-1c-index

Полезные ссылки