Про отсутствующие индексы и 1С

Хотите чтобы MS SQL подсказывал Вам, в каком объекте вы строите не оптимальные запросы или неверно спроектировали метаданные - тогда спросите у него это.

Хотите чтобы MS SQL подсказывал Вам, в каком объекте вы строите не оптимальные запросы или неверно спроектировали метаданные - тогда спросите у него это.

Про отсутствующие индексы и 1С

Вместо вступления:

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

Причем те самые категории/ярлыки можно присвоить на основе того как ответит человек на тот или иной вопрос. Подтверждением тому (лично для меня), является например отношение к индексам базы данных.

Итак перед началом ознакомления со статьей хочу заметить, что на моем пути встречались следующие категории людей по типу отношения к индексам СУБД:

  1. Бог его знает что такое индекс - отличительная особенность: круглые, удивленные глаза, как реакция на фразу “Запрос не попадает в индекс”.
  2. Каждое поле таблицы (реквизит объекта) необходимо проанализировать на предмет необходимости индексации- отличительная особенность: постоянный просмотр планов запроса, даже в случае выборки одной строки из таблицы с гарантированным размером не более 10 строк.
  3. Вы слишком сильно уповаете на индексы - отличительная особенность: гарантированная реакция с ярко выраженным апломбом, в виде “Оно вам не поможет”, при попытке коллеги просмотра административных представлений MS SQL илиплана выполнения сложного запроса в терминах SQL
  4. С индексами в каждом конкретном случае надо включать голову - компромиссный тип людей, отличительная особенность - знает что такое селективность, и понимает почему JOIN можно заменить на UNION и в чем будет выйгрыш.

И последний момент который необходимо отразить: к кому себя относит автор?

Тут ответ прост - скорее к последнему типу, по причинам:

  1. я считаю что про индексы надо знать
  2. я знаю что анализировать необходимость индексов по полям таблицы необходимо, но не по всем полям, а на этапе проектирования только по основным, в дальнейшем по ситуации.
  3. я знаю что не всегда индексы - это самая главная проблема производительности; также ведь есть код на 1С, есть не очень хорошее аппаратное обеспечение, блокировки и солнечные вспышки - и естественно мы знаем что у индексы есть такой хитрый параметр как избыточность.
  4. я знаю различные инструменты мониторинга, и стараюсь по возможности не пренебрегать ни одним из них - и считаю что чем больше показателей информации - тем выше скорость диагностики конкретной проблемы

Для работы нам понадобиться:

  • 1С Предприятие 8.2 - http://users.v8.1c.ru -  я использую версию 1С:Предприятие 8.2 (8.2.13.205)
  • Тестовая конфигурация  - режим совместимости 8.1, архитектура: 1С Сервер + MS SQL 2005 и выше (я использую Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64))
  • GameWithFire - http://main.1c-ei.ru/Articles/gamewithfire скачать можно по адресу http://dev.citykirov.ru/ или в составеEnterprise Integrator
  • любую Консоль запросов 1С

Отсутствующие индексы

Как не странно еще со времен 1С 7.7, мое желание запустить ее именно под MS SQL 2005 было связано, помимо всего прочего, еще и с тем фактом что сервер СУБД собирает статистику о выполнении запросов и предоставляет мне доступ к этой информации.

С появлением 1С 8.* ничего собственно не изменилось (за исключением того что теперь нет необходимости учить 1С работать с MS SQL 2005) - архитектура метаданных может оказаться не оптимальной, а запросы на языке 1С тоже - что вполне естественно: идеальных систем не существует в принципе.

Так вот - MS SQL хранит эту самую статистику и данная информация может быть очень даже полезной. Что это за статистика можно ознакомиться в относительно серьезной статье “Открытие скрытых данных для оптимизации производительности приложений”

Однако мы с Вами попробуем разобраться с одним из административных представлений MS SQL - а именно сsys.dm_db_missing_index_*

 Прежде чем мы начнем работать с этим представлением хочу заметить три основополагающих постулата применительно к нашей задаче:

  • то что SQL считает отсутствующим индексом- это фиксация события когда
    • SQL строил план запроса - то как он будет собирать данные по запросу чтобы отдать нам в 1С,
    • в запросе был наложен фильтр явно или не явно (секция ГДЕ, СОЕДИНЕНИЕ и т.д.)
    • SQL “хотел” использовать индекс, но не нашел его.
  • для анализа важны параметры Издержки индекса и Средний процент выигрыша, а это:
    • то какую неоправданную нагрузку Вы осуществляете на СУБД
    • что будет если вы создадите этот отсутствующий индекс - на сколько сократятся ваши затраты.
  • Для того чтобы SQL больше не считал Ваши запросы не оптимальными и перестал “семафорить” о том, что он дескать не нашел нормально способа поиска по таблице - исправлять Вы это должны на стороне 1С

Примечание: За рамки данной статьи конечно выходит анализ того - а не станет ли созданный по данной информации индекс потом например затратным по поддержке. Моя цель показать вам каким образом можно воспользоваться указанными данными при анализе производительности.

Сейчас попробуем на довольно простом примере убедиться что это очень просто:

Тестовый пример

Для начала развернем тестовую конфигурацию приложенную к данной статье.

Развертывать необходимо в клиент-серверном режиме с использованием сервера СУБД MS-SQL версии 2005 и выше.

Метаданные в данном случае совершенно простейшие:

Однако обращаю внимание - реквизит ДокументОснование - НЕ проиндексирован. Я про него забыл ;-).

 При запуске конфигурации будет запущен генератор документов - он создаст Вам сколько угодно документов. По умолчанию я выставляю 10000 документов

Генератор документов создает последовательно документы - в котором каждый следующий документ имеет основанием предыдущий по МоментуВремени документ такого же типа.

В конфигурацию встроена обработка “Отсутствующие индексы SQL” .

И сейчас она будет показывать пустую информацию (или ошибку если Вы забыли проинсталировать GameWithFire.dll)

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

 Открываем консоль запросов (причем я всем последнее время помимо UCR советую также Консоль запросов с трассировкой), и выполняем набор простых запросов.

ВЫБРАТЬ  Документ1.Ссылка

ИЗ   Документ.Документ1 КАК Документ1

ГДЕ   Документ1.ДокументОснование = &ДокументОснование

;

 ВЫБРАТЬ  Документ1.Ссылка

ИЗ  Документ.Документ1 КАК Документ1

ГДЕ  Документ1.ДокументОснование = &ДокументОснование  И НЕ Проведен

;

 ВЫБРАТЬ  Документ1.Ссылка

ИЗ    Документ.Документ1 КАК Документ1

ВНУТРЕННЕЕ СОЕДИНЕНИЕ  Документ.Документ1 КАК Документ1Основание

ПО Документ1.ДокументОснование =  Документ1Основание.Ссылка

;

И снова запускаем обработку “Отсутствующие индексы SQL”

А вот теперь в итоге посмотрите на запросы которые вы выполнили 
и на ту информацию которую Вам сообщил SQL:

Итак Ваше приложение выполняло запросы которые:

  • осуществляли работу с основной таблицей документ с ИД “Документ1”
  • вложенность не использовали (поле Состав предлагаемого индекса пустое)
  • накладывали фильтры:
    • на равенство (поле Поиск) - по реквизиту ДокументОснование
    • на больше/меньше/НЕ равно - по реквизиту Проведен
  • затраты на такие запросы сводно составили по этому документу 2683 “попугая” = [средняя стоимость одного запроса * средний процент  выйгрыша * (количество пользовательских операций поиска + количество пользовательских операций сканирования)]
  • если бы вы создали подобный индекс вы бы сократили свои издержки на 99%

Так как поле Проведен недоступно для индексирования из 1С - Вы легко сделаете вывод сами, я надеюсь - как исправить данную ситуацию.

 Отдельно хотел бы заметить - после  того как Вы вы выставите Индексацию у реквизита ДокументОснование - при выполнении тех же самых запросов - SQL уже не будет Вам сигнализировать о том “что кажется Вы забыли проиндексировать поля таблицы”.

В качестве эпилога:

Данная статья - это:

  • концепт инструмента мониторинга - еще очень много предстоит исследовать: как минимум уже есть желание:
    • преобразовать по такому же методу остальные SQL административные представления к именам 1С, заодно переписав функцию преобразования имен объектов SQL в 1С, на более стабильную
    • добавить определение селективности измерений регистра, как с признаком индексирования, так и без оного
  • написана в качестве “ночного скетча”, вместе с тестовой конфигурацией
  • фактически приглашение Вас к дискуссии и как минимум к прочтению статей MSDN и других технических ресурсов по работе с СУБД (если Вы конечно это еще не сделали).

Начать дискуссию

Аномальная нагрузка на электросеть помогла выявить майнинг криптовалюты

В Новосибирской области полицейские задержали подозреваемых в незаконном потреблении электроэнергии для майнинга криптовалюты.

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора

💪 Известен размер вычета НДФЛ за сдачу норм ГТО. Подготовиться к сдаче норм может выйти и дороже, считает эксперт

Налоговый вычет по НДФЛ можно будет получить за сдачу норм ГТО.

«Мегамаркет» начал продавать автомобили LADA

При оформлении заказа с покупателем свяжется менеджер «СберАвто», чтобы уточнить технические моменты и варианты доставки.

Лучшие спикеры, новый каждый день

За юридическими услугами может скрываться обычная переписка с ведомствами

Полицейские в Удмуртии задержали руководителя юридической фирмы, подозреваемого в мошенничестве под предлогом оказания юридических услуг.

Кадры

Президент: дефицит кадров невозможно покрыть за счет мигрантов

Владимир Путин призвал предпринимателей искать другие подходы к решению проблемы с нехваткой кадров.

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

В российском производственном календаре май — самый неоднозначный месяц. Вроде праздников много, но вот возвращение на работу на эти 2-3 дня между выходными… Большинство сотрудников хитрят — берут отгул, оформляют заранее отпуск, кто-то уходит на больничный, а кадровику разбирайся с этой чехардой.

Иллюстрация: создано с помощью ИИ OpenAI © Вера Ревина/Клерк.ру
Опытом делятся эксперты-практики, без воды

Суд приостановил корпоративные права иностранной компании на российский бизнес X5

По решению суда корпоративные права иностранных организаций в отношении российского бизнеса могут быть приостановлены. Это касается только экономически значимых компаний.

Как учитывать период военной службы при расчете больничного

Пособие по больничному рассчитывается с учетом страхового стажа, если он составляет 8 и более лет, пособие выплачивает в полном размере среднего заработка. Период военной службы входит в страховой стаж.

Иллюстрация: Вера Ревина/Клерк.ру

Путин: власти не будут пересматривать приватизацию

У властей не должно быть претензий к собственникам активов после приватизации. Изымать бизнесу будут только «в случае недобросовестных действий собственников».

Разбираем запросы от ФНС о сотрудничестве с самозанятыми: как реагировать и что отвечать

Пришло требование с возмутительными подозрениями: вы, оказывается, маскируете трудовые отношения — заключаете договоры с плательщиками НПД. Времени на возмущение нет, но есть пять рабочих дней на то, чтобы составить ответ в ИФНС. Расскажем, как это сделать, чтобы у налоговой больше не возникало вопросов.

Разбираем запросы от ФНС о сотрудничестве с самозанятыми: как реагировать и что отвечать

Обман на маркетплейсах Wildberries и Озон: фейковые продавцы, рассылки, ночной шопинг

Почти все мы покупаем что-то на маркетплейсах: это быстро, удобно и зачастую дешевле, чем в обычном магазине. Однако там нас поджидают мошенники: аферисты создают фейковые аккаунты, притворяясь продавцами или специалистами по рекламе. Продать они ничего не могут, их цель — наши контактные данные: номера телефонов, пароли от личных кабинетов, реквизиты карт.

Иллюстрация: Вера Ревина/Клерк.ру

А что, если бизнес можно развивать за счет государства

И да, это как раз из серии — чтобы у тебя все было и тебе за это ничего не было. 

А что, если бизнес можно развивать за счет государства
Миникурсы, текстовые и видеоинструкции для бухгалтеров

Минцифры запретит массовые спам-звонки

Абоненты стараются не отвечать на входящие звонки, чтобы не сталкиваться с рекламными обзвонами и спамом. Власти будут с этим бороться и запретят массовые звонки, инициированные роботами.

Как зайти в реферальную программу «Клерка». Делюсь личным опытом

Если вы задумываетесь о том, как получить дополнительный доход, то этот пост для вас. Расскажу о реферальной программе «Клерка»: что это, как работает и почему такое сотрудничество приносит пользу. А еще на собственном примере покажу и расскажу, как зарабатывать на рекомендациях. Забирайте пошаговый алгоритм в закладки!

Как зайти в реферальную программу «Клерка». Делюсь личным опытом
2
Кадры

На рынке труда пенсионеры и студенты стали ценными кадрами

На фоне дефицита кадров компании заинтересовались в найме студентов и пенсионеров. Теперь им предлагают работу в 2 раза чаще.

7 типичных ошибок, которые допускают в стритфуд

Стритфуд — динамично развивающийся сегмент рынка общепита, популярный как у начинающих предпринимателей, так и у опытных рестораторов. Однако и здесь есть свои подводные камни. Разберем 7 главных ошибок, которые допускают владельцы стритфуда, и расскажем, какие из них можно избежать с помощью системы автоматизации кафе Fusion POS.

7 типичных ошибок, которые допускают в стритфуд

Модульбанк повысил лимит переводов на карты физлиц для селлеров до 30 млн рублей

С 1 мая все физлица могут бесплатно переводить между своими счетами до 30 миллионов рублей в месяц через СБП. В Модульбанке повышенный лимит переводов для селлеров доступен уже сейчас с Маркет Картой.

Незавершенное строительство позволяет претендовать на выкуп земли много ниже кадастровой стоимости

В Адыгее сотрудники полиции пресекли попытку приобретения земельных участков мошенническим путем путем незавершенного строительства.

КУБ дня. Про штрафы за статотчетность

До текущего года Росстат штрафами только пугал, а теперь наказывает. Как отбиться от штрафа, есть ли шанс?

КУБ дня. Про штрафы за статотчетность

Интересные материалы

Как принимать оплату через СБП и работать по 54-ФЗ с наименьшими затратами

Согласно закону 54-ФЗ, в большинстве случаев при приеме платежей от физических лиц бизнесу — будь то предприниматель или юридическое лицо — нужна онлайн-касса. По-другому, каждый платеж нужно фискализировать. Расскажем, как сделать это с наименьшими затратами.

Как принимать оплату через СБП и работать по 54-ФЗ с наименьшими затратами