Оптимизация перекрестных ссылок в 1С 7.7   

   

          В 1С существует таблица перекрестных ссылок «_1SCRDOC». Она служит для многих целей, в частности для отслеживания подчиненности документов, а также для граф отбора документов. В случаях, когда количество граф отбора документов в конфигурации велико, а также когда в качестве источников данных для граф отбора указаны табличные реквизиты документов – это ведет к быстрому накоплению информации в данной таблице и к постепенному снижению производительности.

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

          С учетом частоты обращений к данным (все пользователи пользуются общим журналом с отборами) происходит перегрузка сервера многочисленными курсорами, построенными по принципу объединения таблицы журналов документов с таблицей перекрестных ссылок.

          При этом если рассматривать ситуацию на уровне размещения данных в таблице SQL, данные упорядочиваются по суррогатному ключу «ROW_ID», который выполняет функцию первичного ключа таблицы и кластерного индекса одновременно. Данные в такой таблице расположены в порядке следования ROW_ID по возрастанию. Соответственно в случаях, когда нужно создать курсор, нет никакой вероятности, что результирующий запрос для курсора будет обращаться к какой-то компактной области данных. Скорее всего, вероятна обратная ситуация – данные будут рассеяны по всей таблице.

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

          По результатам анализа производительности таблицы перекрестных ссылок была предпринята попытка провести оптимизацию. Было принято решение сделать секционирование таблицы по полю «MDID», избавиться от лишнего поля «ROW_ID», а также переделать один из существующих индексов на таблице (наиболее часто используемый) – в кластерный ввиду того, что после удаления поля «ROW_ID» его создание становится возможно. Секционирование было произведено. Для этого данные были распределены по полю "MDID" и разобраны по таблицам. Оказалось созданным N таблиц, соответствующих количеству граф отбора в метаданных, плюс таблица для хранения подчинённости документов.

          Был произведен тюнинг стандартных индексов «CHILD» и «PARENT». Был изменен порядок вхождения реквизитов в индексы, а также индекс «PARENT» стал также первичным ключом и кластерным индексом. Кроме того, поле «MDID» было удалено из состава индекса «CHILD».

          Было создано представление для работы с данными таблицами.

          Для поддержки работы 1С была проделана значительная работа по перехвату вызовов 1С по обращению к таблице «_1SCRDOC». Перехват выполнялся таким образом, чтобы максимально повысить скорость работы с таблицей за счет оптимизации запросов таким образом, чтобы каждый запрос обращался к одной таблице и с использованием наиболее оптимального индекса.

          Все эти технологии были реализованы как дополнительная надстройка к комплексу «Гибкие блокировки» для облегчения инсталляции. Кроме того – были созданы методы для автоматического выполнения данных задач по разделению и копированию данных, а также для сбора их в первоначальный вид в целях совместимости с конфигуратором 1С в режиме выполнения реструктуризации данных. Все действия выполняются отдельными методами, не требующими никаких специальных параметров. Структура распознается автоматически и генерируется автоматически на основании метаданных конфигурации.

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

Статья: Оптимизация перекрестных ссылок в 1С 7.7

Перейти на главную страницу компании "Софтпоинт"