Нетривиальные подходы в решении всем известных проблем: ускорение «больших» документов в 1С и ускорение поиска по подстроке. Как добиться эффекта в разы?

Публикация № 884649

Администрирование - Производительность и оптимизация (HighLoad)

62
Часто у пользователей 1С поиск информации по большим спискам данных по подстроке занимает продолжительное время. Павел Баркетов рассматривает причины торможения запросов с поиском по подстроке и описывает возможности и подходы к их оптимизации и ускорению. Также в статье разобраны причины длительного проведения «больших» документов (более 10 000 строк) и даны рекомендации по ускорению этих операций.

Меня зовут Павел Баркетов, я работаю в компании «Софтпоинт». Мы уже более 10 лет занимаемся решением задач оптимизации производительности. И несмотря на большое количество решенных задач, их количество не уменьшается, а растет в геометрической прогрессии. Объемы данных увеличиваются, и задачи по оптимизации работы с этими данными усложняются. Этот процесс неизбежен.

Тема статьи – нетривиальные подходы к оптимизации. Будут рассмотрены два аспекта:

  • Первый – поиск по подстроке. Пользователи часто его используют, и многие, наверное, уже сталкивались со значительным ожиданием, поиск по подстроке выполняется недостаточно быстро.
  • Второй – проведение больших документов, таких, как закрытие месяца, расчет себестоимости. Наверняка многие сталкивались с тем, что бухгалтеры проводят эти документы по 5–9 часов, ночью и в нерабочее время. Самое интересное, что классические методы оптимизации здесь не всегда помогают. Если вы при проведении таких документов запустите в отладчике замер производительности, то увидите, что наибольшее количество времени тратится на запись во временные или реальные структуры – таблицы, регистры и т.д. И решить эту задачу классическими методами не получается.

 

Поиск по подстроке

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

 

Поиск по начальным символам

Начну с первого примера, когда поиск осуществляется по начальным символам. Это – частный случай поиска по подстроке, когда пользователь точно знает, что искомое значение начинается с определенных символов.

Поиск по начальным символам реализуется в 1С с помощью команды ПОДОБНО (или в английском варианте, LIKE) с указанием значения с «%» в конце («%» обозначает последовательность любых других символов). Например, мы ищем:

Наименование ПОДОБНО "ивано%"

Обратите внимание, что если у вас в системе существует индекс по этому полю, то в SQL-запросе для этого поиска будет использоваться Index Seek – это поиск по индексу.

Условие «ПОДОБНО поисковой строке» эквивалентно поиску в диапазоне значений. В частном случае, когда мы ищем «ивано%» – это эквивалентно поиску в диапазоне фамилий, которые начинаются на «ивано», и, заканчивая «иванп» (потому что символ «п» идет после символа «о»).

Современные оптимизаторы самостоятельно преобразуют запрос LIKE на запрос поиска по диапазону. Следовательно, если у вас в системе существует индекс по этому полю, вы при интерпретации запроса в термины SQL получите именно такой результат – оптимизатор представит запрос с LIKE в виде поиска по диапазону.

Таким образом, можно осуществлять классический быстрый поиск с использованием индекса (Index Seek). С этим проблем нет или решить их можно простым способом.

 

Поиск по вхождению

Теперь возьмем пример посложнее, когда неизвестно, в каком именно месте строки стоит наше искомое значение, и реализуется поиск по вхождению строки. В этом случае в запросе «ПОДОБНО» «%» стоит с двух сторон.

При преобразовании такого запроса в SQL мы видим, что изменяется только команда (в значении используется уже два «%»).

Рассмотрим подробнее план выполнения. Здесь мы видим тот же Index Seek, но в данном случае он не работает эффективно.

Дело в том, что индекс по наименованию справочника, который мы рассматриваем, состоит из нескольких полей.

  • Первое из них – это разделитель учета.
  • Дальше непосредственно идет поле поиска.

И поэтому, когда в плане выполнения отображается «Index Seek», это означает, что поиск делается по первому полю разделителя – на слайде выше можно увидеть, что поиск по нашему искомому значению Desc абсолютно не используется.

Что делать в этой ситуации? У меня на практике было очень часто, что пользователям запрещали использовать запросы на вхождение. И пользователи в ряде случае сами не использовали этот функционал, потому что время выполнения очень значительное, а надо продолжать работать. Поэтому им приходилось выкручиваться другими способами – выбирали в списках, пытались найти по первым символам и так далее.

Но это приводит к недовольству функционалом и неправильному восприятию системы. Пользователь понимает, что система с чем-то не может справиться и не работает как положено. Это неправильно.

 

Нетривиальный подход к решению задачи поиска по подстроке

Давайте теперь рассмотрим нетривиальный подход к решению этой задачи.

Обозначим ряд допусков:

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

Пример искомой строки «алексе» записали в форму и будем с ее помощью тестировать.

Дальше пойдет подробное описание, как это можно сделать:

  • Предположим, у нас есть поле с фамилией, именем и отчеством клиента. Первым шагом мы автоматически раскладываем это значение на фрагменты из шести символов со сдвигом «1» и получаем массив фрагментов (см. выше), которые одновременно всегда принадлежат искомому значению. Мы получили фрагменты, которые теоретически может вводить пользователь. А именно, на прошлом слайде определили, что мы ищем шесть символов. Их может быть и пять, и четыре, просто размер структуры будет больше.

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

  • И на третьем шаге, мы при поиске по подстроке к конструкции запроса 1С «ПОДОБНО» добавляем дополнительное условие «И», которое фильтрует количество возможных комбинаций, и вытаскиваем из этой дополнительной структуры (это может быть регистр сведений) все элементы, которым принадлежат нужные фрагменты строк.

Например, пользователь ищет клиента с фамилией «Солдатов». Это – восемь символов, значит, будет три фрагмента длиной в шесть символов, которые мы ищем в служебной структуре. Далее объединяем это все в запросе. Таким образом, получается дополнительная фильтрация.

В результате мы избавляемся от знака «%» (т.е. впереди этих фрагментов всегда будет нужный нам символ), и при выполнении внутреннего запроса будет идти Index Seek, за который мы и боролись.

На практике получается очень интересная история – ускорение в десятки, в сотни раз. Причем, все это можно сделать средствами 1С, что очень приятно. Переписывать логику не потребуется, пользователь порадуется, что у него ускорился запрос поиска. В примере ускорение с 4 секунд до 0,05 секунды, а если бы у нас изначально запрос выполнялся две минуты, он стал бы исполняться менее секунды.

Механизм, что я вам показал, не является каким-то экспериментальным примером, это уже работает у реальных клиентов.

 

Подготовительные мероприятия для внедрения

Теперь я расскажу кратко о подготовительных мероприятиях.

  • Сначала необходимо заполнить регистр начальными значениями. Для этого мы должны запланировать регламентное окно.
  • Далее мы должны соблюсти консистентность данных – это значит, должна быть подписка на изменение значения, чтобы эта Фрагменты автоматически перестраивались.
  • И последнее – дописать стандартную форму поиска.

Заполнение регистра можно делать как средствами 1С, так и с помощью SQL.

Могу сказать, что заполнение такой структуры для 17-ти миллионов значений занимает где-то 20-25 минут. Естественно, пользователи в этот момент не должны изменять значения справочника.

Далее можно добавить либо триггер, либо 1С подписки, которые позволяют синхронизировать фрагменты с реальным значением поля.

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

Если мы рассчитаем для одного миллиона значений где-то 100 символов по 6 во фрагменте, получится где-то 4,7 Гб. Нужно запланировать, чтобы это место у вас было. Если у вас в справочнике, например, 100 миллионов значений, то вы должны запланировать место, которое будет доступно на диске.

 

Необходимость учета статистики популярности фрагментов

Всегда ли этот метод будет работать быстро?

На это влияет статистика популярности фрагментов.

  • Например, у вас есть фрагмент «алексе», который может входить в имя Алексей, в отчество Алексеевич, в фамилию Алексеенко и т.д. Этот фрагмент может входить в 50-100 тысяч записей.
  • А есть редко используемые фрагменты.

Таким образом, появляется статистика популярности по фрагментам.

Обратите внимание, что если популярность фрагментов низкая (100 элементов), то мы получаем ускорение – 0,1 секунду.

Если подстрока достаточно популярная (50 тысяч элементов), то мы получаем деградацию, причем гораздо большую, чем если бы не было оптимизации.

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

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

А теперь давайте рассмотрим, как выполняется SQL-запрос на SQL-сервере.

На слайде представлена упрощенная схема:

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

На что похожа реализованная нами схема?

  • Мы сделали свой индекс. Не стандартный индекс SQL, не индекс 1С, а свой индекс, который нужен для решения этой задачи;
  • Более того, столкнулись с тем, что нужна своя статистика;
  • И нужен собственный оптимизатор, который по этой статистике решает, какую ветку выбрать.

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

Кто не знал, для чего нужно обслуживать статистику в SQL, загляните в эту логику, и вы поймете, что если она неправильная или неактуальная, то мы пойдем по неправильной ветке. Запрос будет тормозить. Понимаем, для чего качественно и правильно обслуживать статистику – это влияет на производительность, на индекс.

Если индекса нет – будем сканировать все значения.

Таким образом, мы создали хоть примитивный, но свой оптимизатор. Можно сказать, что прощупали «на пальцах» то, как это делает MS SQL и другие СУБД, причем создав свои структуры.

 

Ускорение «больших» документов

Перейду ко второй теме – ускорение больших документов.

Мы в производственных задачах часто сталкиваемся с какими-то регламентными процедурами, как: закрытие месяца, отчет агенту, расчет себестоимости. Эти тяжелые, массивные документы проводятся и заполняются значительное количество времени. А когда мы заглядываем в отладчик и делаем на этих операциях трассировку, то видим, что 1С построчно вставляет значения в какую-то таблицу и на это уходит основное время. И ничего с этим поделать нельзя. Единственная рекомендация, которую можно предложить – это ускорить диск (эффективность этого решения очень сомнительная и требует предварительного анализа).

Предлагаю вернуться в историю и рассмотреть, как это делалось в 1С, начиная с 8.0 до 8.3 – это делалось построчно. SQL-сервер каждый раз анализировал запрос, его обрабатывал, создавал план выполнения, добавлял, отправлял команду в сторону 1С об успешности и получал следующий запрос. И такими step by step шли запросы от 1С сервера приложения к MS SQL.

Понятно, что если у вас 40 записей в документе, то проблем возникнуть не должно. Если записей у вас становится 10 тысяч и более (бывают организации, где в регламентных документах миллион записей), то этот процесс занимает очень длительное время. Одна запись обрабатывается очень быстро, но в документе их слишком много. На что уходят накладные расходы? На сеть, на выполнение запроса, на обратный сигнал, на обработку этого сигнала в системе 1С – итого, сумма четырех этапов. Все этапы суммируются, умножаются на миллион строк, и получаются наши длительные ожидания. Понятно, что это не ужасно.

В 1С, начиная с 8.3, сделаны улучшения. Теперь запрос для вставки во временные таблицы и в регистры сведений подготавливается на SQL-сервере, и его дальнейшее выполнение происходит с помощью классических RPC-вызовов, где сам провайдер доступа 1С (Native или OLE DB) группирует записи и вставляет их по N строк (как правило 100 строк).

Таким образом, достигается ускорение от 30% до 300%. Но это все равно недостаточно, потому что сегодня у вас 10 тысяч строк, завтра 20 тысяч строк. Это не принципиальное решение проблемы, вы все равно с ней столкнетесь, но только через полгода/год.

Какая наиболее быстрая вставка в SQL-сервер, да и вообще в любую СУБД?

Это BULK INSERT. В 1С BULK INSERT используется, но для других задач. Работу с «большими» документами также хотелось бы ускорить путем укрупнения вставок INSERT и добавления записей единым массивом в базу данных SQL-сервера.

Посмотрим, какой достигается эффект. В рассматриваемом примере получено ускорение где-то в 5 раз, но можно ускориться и в 10 раз. Теоретически основная проблема для того, чтобы это ускорялось значительно сильнее – это скорость диска. Диск может является узким местом.

Также важно помнить про такой критерий, как индексы. Если бы мы вставляли BULK INSERT в таблицу без обновления индексов, то мы бы получили значительное ускорение (результат менее чем за секунду). Здесь мы получаем 69 секунд за счет того, что каждая вставка в таблицу требует REFRESH индекса.

В любом случае, этот способ позволяет достичь эффекта в 5-10 раз.

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

 

Возможности оптимизации безграничны

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

****************

Данная статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART EVENT 2017 COMMUNITY.

Приглашаем вас на новую конференцию INFOSTART EVENT 2019 INCEPTION.

62

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Сурикат 264 30.08.18 22:41 Сейчас в теме
А рассматривались такие решения как Сфинкс или ElasticSearch?
2. Sybr 235 31.08.18 09:27 Сейчас в теме
BULK INSERT предназначен для загрузки из данных из файла, как его использовать для записи движений при проведении документа? Так себе вариант на мой взгляд. Рабочее решение - это распараллелить запись, создавая несколько служебных документов регистраторов при проведении документа.
5. nicxxx 235 31.08.18 11:45 Сейчас в теме
(2) Присоединяюсь к вопросу. Сколько времени занимает подготовка файла данных?
24. gallam99 224 10.09.18 17:54 Сейчас в теме
(5)
Скорость подготовки данных (создается не файл, а поток данных) занимает очень незначительное время, так как формируется в оперативной памяти. Сложно сказать в абсолютных величинах, но десятки тысяч строк - несколько секунд.
28. nicxxx 235 11.09.18 10:05 Сейчас в теме
(24)два вопроса. Как называется поток данных в оригинале на английском языке? И как его прикрутить к платформе 1С не являясь разработчиком платформы?
29. gallam99 224 11.09.18 10:24 Сейчас в теме
(28)
Формат пакета можно посмотреть по ссылке: https://msdn.microsoft.com/en-us/library/dd340549.aspx
В таком формате MS SQL примет команду. Также полезно для решения задачи будет ссылка на спецификацию TDS: https://msdn.microsoft.com/en-us/library/dd304523.aspx
Теперь по внедрению к платформе 1С: в вашем вопросе скрыт ответ, платформой 1С занимаются разработчики платформы, поэтому там ничего нельзя "прикрутить". Следовательно необходимо внедрить решение за платформой 1С, мы это делаем между платформой и сервером БД. Создан прокси - сервер между ними, происходит анализ запросов SQL, в случае наших запросов на массовую вставку - они парсятся, формируется общий пакет по формату из первой ссылки и после общий пакет отправляется на MS SQL вместо большого количества маленьких. Таким образом главное обеспечить достаточное количество памяти для прокси-сервера и настроить высокоскоростную сеть для исключения замедления работы в целом. По нашим расчетам среднее время задержки запроса из-за прокси около 100мкс, таким образом задержка практически никак не влияет на скорость. Надеюсь стало понятнее.
30. nicxxx 235 11.09.18 19:39 Сейчас в теме
(29) да, так понятней. спасибо.
31. СергейК 51 14.09.18 23:01 Сейчас в теме
(29) Что-то это напоминает модификацию/оптимизацию запросов к SQL в 1С 7.7 через "хакерские" компоненты.
Развитие идет по спирали: энтузиасты оптимизируют платформу, пока вендор думает :-)
14. AlexFort1961 1 01.09.18 12:04 Сейчас в теме
(2) Вы предлагаете рабочее решение с распараллеливанием записи путем создания нескольких служебных документов. Можете поподробнее (схематично, конечно) описать этот путь? Предложенное в этой статье решение описано неконкретно, скорее концептуально.
gallam99; +1 Ответить
20. Sybr 235 03.09.18 11:43 Сейчас в теме
(14) При проведении создаем пул фоновых заданий, каждое из которых создает документ и записывает свою часть движений. Возможна эскалация блокировок, нужно обрабатывать этот момент. Подойдет для служебных документов, в которых все данные для движений уже рассчитаны и записаны в ТЧ.
21. AlexFort1961 1 03.09.18 13:48 Сейчас в теме
25. gallam99 224 10.09.18 17:58 Сейчас в теме
(14)
В публикации действительно описано концептуально. В реальности решение есть - оно представляет из себя аналог решения (Softpoint data cluster) - можно прочитать на сайте, трафик от сервера приложения проходит через него и анализируется. Когда встречаются построчные вставки в реальные и временные таблицы, то "на лету" формируется поток данных и вместо построчных операций вставки на сервер БД идет операция bulk insert.
3. Silenser 509 31.08.18 10:11 Сейчас в теме
Не пробовали использовать полнотекстовый поиск SQL? Он, насколько я помню, работает быстрее аналогичного в 1С, особенно при поиске нескольких слов. Для поиска одного фрагмента вполне подойдет и полнотекстовый поиск самой платформы и скорость будет вполне приличная, разве что результат разбирать дольше.
26. gallam99 224 10.09.18 18:00 Сейчас в теме
(3) Тут зависит от задачи и возможностей использования полнотекстового поиска в конкретной ситуации, для ускорения поиска по подстроке вполне интересное решение)
4. Mortum 31.08.18 11:11 Сейчас в теме
Написали про BULK INSERT, который нельзя использовать из 1с. В чём оптимизация?
Irwin; CSiER; bulpi; syberman; +4 Ответить
6. Greeen84 64 31.08.18 11:50 Сейчас в теме
(4) +1, выглядит как
1)BULK INSERT
2)...
3)PROFIT в 10 раз! =)
Plotks2017; Aleskey_K; Irwin; cefew; bulpi; +5 Ответить
27. gallam99 224 10.09.18 18:02 Сейчас в теме
(6)
Цели демонстрации 2:
1. Есть решения конкретной ситуации (ускорение неускоряемого типовыми средствами) и раскрыт принцип в публикации и возможность реализации.
2. Может разработчики платформы 1С улучшат платформу)
7. nicxxx 235 31.08.18 12:04 Сейчас в теме
Если говорить про BULK-и, то есть в SQL Server запросы MERGE. Из моего опыта, копирование 7 000 000 строк между таблицами длится 60 секунд. Построчная вставка - гораздо дольше, измеряется часами. Но! Для запроса MERGE нужно как-то подготовить данные, ту же временную таблицу, и эта подготовка съедает большую часть оптимизированного времени.
8. bulpi 157 31.08.18 12:43 Сейчас в теме
1)По ускорению поиска по подстроке - очевидное решение выдается за новаторское.
2)По ускорение документов - вообще толком ничего не написано.
9. KAV2 85 31.08.18 13:39 Сейчас в теме
(8) а мне понравилось про поиск, очень доступно написано. Найти доступное описание того как можно индексировать полнотекстовый поиск не так то просто. Но понятно что это не автором статьи придумано, поэтому хотелось бы ссылки на литературу.
12. kalyaka 511 31.08.18 16:33 Сейчас в теме
(8) вот же в чем парадокс - на поиск простого очевидного решения может уйти много времени, а когда решение найдено - кажется ничего в нем и нет такого. Ну это ж очевидно :)
10. YPermitin 5097 31.08.18 15:27 Сейчас в теме
Темы до конца не раскрыты, но написано в любом случае доступно.
Некоторые задумки их этого использую на продакшене.

За публикацию + несомненно.
11. kalyaka 511 31.08.18 16:22 Сейчас в теме
Понравилась идея с полнотекстовым поиском. Действительно очень простое эффективное решение.

В свое время у нас ребята решали задачу поиска договора по номеру из назначения платежа при загрузке из банка с использованием оператора LIKE %Номер% и это было очень не быстро + напрягало сервер - в результате отказались от такого "сервиса" и перешли на поиск по началу.

Использование же полнотекстового поиска тоже чревато затратами на обслуживание + при обновлении падает производительность сервера приложений.
13. KAV2 85 01.09.18 05:50 Сейчас в теме
(11) Полнотекстовый поиск встроенный в платформу еще нельзя программно вызвать, а в некоторых случаях обработку ввода по строке необходимо кастомизировать.
15. TMV 14 03.09.18 05:28 Сейчас в теме
(13)
Полнотекстовый поиск встроенный в платформу еще нельзя программно вызвать
Разве нельзя, А это что?
16. KAV2 85 03.09.18 07:34 Сейчас в теме
(15) Я имел в виду полнотекстовый поиск по определенным таблицам, а не по всей базе. Сама платформа позволяет включить полнотекстовый поиск для ввода по строке, там используется полнотекстовый поиск по определенной таблице, но как это сделать программно?
17. Silenser 509 03.09.18 09:28 Сейчас в теме
(16)Так вы можете программно вызвать полнотекстовый поиск и задать его область. Попробуйте, сравните результат с вашим вариантом, он будет, скорее всего сопоставим, если ищете по одному слову. Разве что свободное место на диске сервера приложений нужно будет контролировать, чтобы полнотекстовый индекс его не съел.
18. TMV 14 03.09.18 11:06 Сейчас в теме
(16)
Я имел в виду полнотекстовый поиск по определенным таблицам, а не по всей базе

Можно же задать по каким объектам метаданных искать:

СписокПолнотекстовогоПоиска (FullTextSearchList)
ОбластьПоиска (SearchArea)
Использование:

Чтение и запись.
Описание:

Тип: Массив.
Содержит массив метаданных, описывающий, в каких данных нужно осуществлять поиск.
Например:
МассивОтбор = Новый Массив();
МассивОтбор.Добавить(Метаданные.Справочники.Товары);
МассивОтбор.Добавить(Метаданные.Документы.КассовыйЧек);
СписокПоиска.ОбластьПоиска = МассивОтбор;


Область поиска может содержать только основные объекты конфигурации. Подчиненные объекты (например, табличные части, реквизиты) не могут входить в область поиска.
LordKim; KAV2; +2 Ответить
19. KAV2 85 03.09.18 11:35 Сейчас в теме
(18) спасибо, не по глазам была эта возможность
22. Rustig 1194 04.09.18 11:00 Сейчас в теме
(0) интересные исследования. поиск по подстроке - это ведь перебор всех вариантов. я не понял сути задачи - зачем среди миллионных фамилий искать совпадение подстроки? однофамильцев будет тысяча - и результат поиска будет предсказуем - тысяча одинаковых фамилий. я рекомендую решать задачи поиска исходя из контекста - найти человека по инн, по таб. номеру, по телефону, по снилсу, по адресу регистрации - по району, по городу; по дате рождения. возможно поле поиска трансформируется в отдельное окно с несколькими полями для фильтрации и ограничения списка вариантов.... поиск по подстроке для большинства организаций работает достаточно быстро,а для организаций, у которых миллионные справочники,- подход должен быть Иным.
по поводу документов - надо делать декомпозицию длительных операций. Про регламентные документы с записями в 10 тыс. строк - не ясно, что за пример такой? из жизни? может такая реализация - это ошибка разработчика?
23. ufedor 52 05.09.18 09:23 Сейчас в теме
Собственный индекс - огонь.
Только 1с уже умеет использовать полнотекстовый индекс (свой конечно), если эта функциональность включена. При установке ограничения по области работает весьма неплохо. Посмотрите в типовых поиск номенклатуры.
А там уже можете решить, что использовать для поиска (реквизиты, тч, доп.сведения, связанные справочники)
Оставьте свое сообщение

См. также

Мониторинг высоконагруженной системы 37

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad) Администрирование данных 1С

Высоконагруженной системе (более 8000 клиентских сессий) мониторинг необходим. Про опыт использования инструментов для мониторинга – самописной системы информирования, написанной на C#, и конфигурации «Центр контроля качества» в связке с системой отображения данных Grafana, на конференции Infostart Event 2018 Education рассказал Олег Репников.

13.09.2019    3371    Repich    4       

Использование Zabbix для сбора информации о серверных вызовах и управляемых блокировках с сервера 1С Предприятия, работающего на платформе GNU/Linux 72

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) Администрирование данных 1С Zabbix

Описанные в данном опусе механизмы ни в коей мере не противопоставляются тому, что реализует КИП от 1С или какие-либо другие инструменты (решения)! Это всего лишь еще один взгляд на "проблему", который может быть полезен в некоторых ситуациях.

10.09.2019    6842    Sloth    11       

Анализ производительности APDEX 65

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

31.08.2019    2591    93    YPermitin    7       

Неочевидные проблемы производительности: важность системного подхода при анализе 50

Статья Программист Нет файла v8 Россия MS SQL Бесплатно (free) Производительность и оптимизация (HighLoad)

Часто программисты и 1С-ники сталкиваются с совершенно необъяснимыми на первый взгляд проблемами. Но это потому, что их внимание направлено только на один сегмент системы, а не на всю систему полностью. О том, почему нужно стараться смотреть на ситуацию комплексно, рассказал специалист по производительности компании SOFTPOINT Александр Денисов.

19.07.2019    4105    Филин    12       

Ловля блокировок на связке "Microsoft SQL server - 1С" 38

Статья Системный администратор Программист Нет файла v8 v8::blocking MS SQL Бесплатно (free) Производительность и оптимизация (HighLoad)

Материал относится к базам данных на связке «1С - MS SQL Server». Один из способов отлова блокировок в бд 1С . Переход к управляемым блокировкам через режим "Автоматический и управляемый".

16.07.2019    3471    fhqhelp    0       

Анти-оптимизация: как мы ускорили запрос в 4 раза, сделав его неоптимальным 57

Статья Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad) Практика программирования Решение задач на 1С:Специалист Разработка

В этой статье приведен пример неочевидной "оптимизации" запроса, которая противоречит всем правилам, описанным в книгах для подготовки к сертификации "1С:Эксперт по технологическим вопросам", а также преподаваемым на курсах подготовки экспертов.

02.07.2019    5946    igordynets    119       

Ускорение чтения правил обмена в УПП 1.3 в 20 раз! 66

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

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

27.06.2019    4085    YPermitin    16       

Хотите снизить нагрузку на процессор сервера в 2 раза? 21

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

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

27.06.2019    4051    Дмитрий74Чел    6       

Непридуманные истории по оптимизации. История 1 78

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

Первая статья из планируемого цикла об оптимизации приложений на базе 1С. Без теории. Одна практика.

13.06.2019    7067    Repich    117       

Оптимизация: неэффективные запросы 6

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad) Практика программирования Разработка

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

13.06.2019    2589    slayer-ekb    10       

За 5 шагов добавляем мониторинг счетчиков производительности серверов MS SQL и 1С 90

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Статистика базы данных Производительность и оптимизация (HighLoad)

Мы расскажем и покажем, как добавить данные счетчиков производительности серверов 1С и MS SQL в нашу базу мониторинга за 15 минут. Приведем список наиболее важных из них, опишем основные особенности.

28.05.2019    7055    ivanov660    5       

Не думать о секундах свысока... 55

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Несколько примеров оптимизации типовой конфигурации УТ11. Описанные приемы подходят для многих других конфигураций.

21.05.2019    4319    vasilev2015    21       

Альтернативная стратегия управления блокировками 45

Статья Программист Архив с данными v8 v8::blocking 1cv8.cf Россия MS SQL Бесплатно (free) Производительность и оптимизация (HighLoad)

Данная публикация освещает одну из альтернативных стратегий блокирования данных на уровне MS SQL Server, которая недоступна средствами 1С, но может быть весьма полезной. Разбирается практический пример.

20.05.2019    3710    zhichkin    15       

Как работают управляемые блокировки 120

Статья Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

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

29.04.2019    13017    comol    198       

Странное потребление места на диске С 33

Статья Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Решение проблемы постоянного роста папки %AppData%/Local/Temp.

26.04.2019    10565    kuzyara    12       

Включение встроенного в платформу механизма "Копии базы данных" и использование "Дата Акселератора". Новый стандартный механизм использования баз OLAP в 1С 49

Статья Системный администратор Программист Нет файла v8 Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

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

25.04.2019    8114    Elf1k    26       

5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С 201

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

В этой статье мы разберем механизм использования конфигурации "Анализ технологического журнала" на практике, и всего через 15 минут работы вы получите функциональный, удобный инструмент мониторинга проблем производительности базы 1С.

18.04.2019    17733    ivanov660    40       

Как разбить базу на файлы и не сойти с ума 108

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Разбиение базы данных 1C на файлы и последующее сопровождение. Нюансы, грабли и прочее.

06.04.2019    8576    YPermitin    29       

Как одно изменение конфигурации PostgreSQL улучшило производительность медленных запросов в 50 раз 124

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

В связи с санкциями и другими событиями сейчас все более и более актуальна тема перевода ПО компаний на отечественное и свободное программное обеспечение. Одной из самых востребанных СУБД на рынке на данный момент является PostgreSQL - надежная, высокопроизводительная и хорошо масштабируемая СУБД, которая является прямым конкуретном таким крупным компаниям с их топовыми продуктами, как Oracle, IBM и Microsoft. Однако каждый, кто переходит на PostgreSQL, сталкивается с трудностями, прежде всего с настройкой и производительностью. Не обошли проблемы с производительностью "слоника" и меня. Предлагаю вашему вниманию перевод статьи "How a single PostgreSQL config change improved slow query performance by 50x" автора Pavan Patibandla, которая мне помогла улучшить производительность PostgreSQL.

18.03.2019    9730    w.r.    23       

Простое программное решение проблем с блокировками SQL 17

Статья Системный администратор Программист Нет файла v8 v8::blocking 1cv8.cf Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

Описание одного из способов программного решения проблемы блокировок при проведении документов в клиент-серверной 1С.

06.03.2019    5798    dmitrydemenew    38       

Производительность сервера 1С и фоновые задания 63

Статья Системный администратор Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

В падении производительности сервера 1С зачастую виноваты не регламентные / фоновые задания, они выполняют полезную работу. Но задания нельзя оставлять «наедине» с базой.

05.02.2019    10656    user715208    38       

Новый режим реструктуризации (обновление базы данных на сервере в режиме v2) 168

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

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

31.10.2018    18243    Dach    46       

Кейс: как мы разрабатывали систему автоматизации анализа ошибок, связанных со скоростью работы 1С 42

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Бурмистров Андрей рассказывает о создании инструмента по автоматизации анализа неоптимальных запросов в коде 1С. Он поднимает вопрос о предпосылках создания этого инструмента, рассказывает о возникших форс-мажорных ситуациях, с которыми столкнулась команда в процессе разработки, и о том, как они с ними справлялись.

27.08.2018    7425    Andreynikus    20       

3000 пользователей на трехъядерном Athlon – сверхтонкий веб-клиент для 1С 97

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Юрий Лазаренко поделится опытом ускорения 1С нестандартными методами, в том числе с помощью http-сервисов. Он расскажет, как с помощью сверхтонкого клиента для 1С и интеграции с сайтом удалось добиться ускорения 1С на порядок. Также в статье приведена статистика по отчету о нагрузочном тестировании сверхтонкого клиента для 1С:ITIL.

16.08.2018    11243    TitanLuchs    28       

Когда условие в срезе последних даже вредит 20

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Спойлер: оптимизатор MSSQL видит внешние, по отношению к срезу, условия, и строит план с их учетом.

05.08.2018    7677    nicxxx    105       

Оптимизация без оптимизации: как мы ускорили 1С в 10 раз без трудоемкой оптимизации запросов и алгоритмов. Практический опыт 80

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Можно ли ускорить 1С, не оптимизируя запросы, не разбивая транзакции и не наращивая оборудование? В статье Аверьянова Алексея рассмотрены три практических кейса повышения производительности системы без трудоемкой оптимизации: отложенное резервирование «в один поток», отложенное создание и проведение реализаций.

26.07.2018    13062    avryanovalexey    100       

Альтернативные технологии нагрузочного тестирования серверной части кода прикладных решений на платформе 1С 56

Статья Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Евгений Филиппов знакомит с альтернативными технологиями нагрузочного тестирования серверной части кода прикладных решений на платформе 1С. Он рассказывает об узких местах традиционной технологии нагрузочного тестирования и методах их обхода путем переноса работы с клиентских соединений на фоновые задания и изменения способа управления сеансами. Также автор приводит примеры с реальных проектов, подтверждающие жизнеспособность предложенных технологий.

12.07.2018    8133    jf2000    10       

Архитектура ИТ-системы на базе 1С в крупной организации. Часть 2. Чудес не бывает 81

Статья Системный администратор Нет файла v8 УТ11 Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

Развернуто отвечаю, как мы боремся с зависаниями системы и вообще решаем проблемы. С примерами, но без слайдов.

04.07.2018    12124    Repich    74       

Архитектура ИТ-системы на базе 1С в крупной организации 101

Статья Системный администратор Нет файла v8 УТ11 Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

В данной статье я хотел бы очень крупными мазками обрисовать архитектуру ИТ системы на базе 1С в крупных (более 1 тысячи пользователей) организациях. Она не несет какой либо образовательной цели, это просто попытка показать – «а как у нас».

02.07.2018    14639    Repich    112       

Взгляд на ошибки и платформу через призму HI-Load 53

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Поговорим об ошибках в целом и их влиянии на Hi-Load системы в частности. Может ли тут помочь платформа 1С? (да и должна ли в принципе?) Немного про сам Hi-Load на примере крупной БД. PS Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2017 COMMUNITY.

18.06.2018    9903    Sergey.Noskov    27       

Простые регулярные выражения 59

Статья Программист Архив с данными v8 Россия Бесплатно (free) Производительность и оптимизация (HighLoad)

Шпаргалка к экзамену "Эксперт по технологическим вопросам".

30.04.2018    11611    3    vasilev2015    30       

Неоптимальная работа запроса 128

Статья Программист Нет файла v8::Запросы Бесплатно (free) Производительность и оптимизация (HighLoad)

Шпаргалка к экзамену "Эксперт по технологическим вопросам".

27.04.2018    16919    vasilev2015    32       

Неоптимальности вида «план исполнения запроса "испортился"» - поиск и исправление 69

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

Рассматривается один из частых типов проблем в рабочих базах (второй после блокировок, пожалуй... впрочем, часто и тесно с ними связанный). Материал относится к базам данных на связке «1С - MS SQL Server».

05.02.2018    13671    fhqhelp    20       

Пример поиска неоптимальности при загрузке SQL-сервера по CPU на 100% 83

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

Вечер пятницы, ничто не предвещало.. Звонок из техподдержки: "центральная база розничной сети лежит". Далее расследование причин.

23.12.2017    15207    fhqhelp    32       

Исследование технологического журнала 1С при помощи регулярных выражений в блокноте 129

Статья Системный администратор Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Все из тех, кто пробовали сдать на сертификат "Эксперт по технологическим вопросам 1С", сталкивались с методикой ЦКТП - разбор файлов технологического журнала при помощи консоли bash. Я, в свою очередь,внёс изменения в данную методику. Мне хотелось достичь более понятного вида и сфокусироваться на Perl, в качестве предпочтительного средства обработки файлов ТЖ. Вот что из этого вышло:

30.10.2017    24163    MrWonder    38       

Вопросы разработки, анализа производительности и оптимизации приложений 1С под управлением СУБД ORACLE 16

Статья Системный администратор Программист Нет файла v8 Oracle Бесплатно (free) Производительность и оптимизация (HighLoad)

Я являюсь сотрудником Комсомольского-на-Амуре филиала компании «Сухой». Наше предприятие производит боевую авиационную технику и комплектующие для гражданской авиационной техники. В статье я вам расскажу про свой опыт работы со связкой 1С и СУБД ORACLE.

05.09.2017    10406    user597755_vices2015    2       

Оптимизируй это! Или MS SQL и Экспертный подход творят чудеса! 207

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

В статье речь пойдет про взаимодействие сервера 1С с MS SQL. Мы очень часто слышим, как важно оптимизировать все критические участки системы заблаговременно, в плановом режиме, как надо, «от и до» во всех деталях. Но в реальной жизни бывает по-другому. Очень часто клиенты обращаются к нам, когда система уже не дает работать: «спасите, помогите, болит очень сильно, надо решать». Об одном из таких случаев я и хотел бы вам сегодня рассказать.

11.07.2017    28889    R.Tsarenko    32       

Планы запросов - это просто! 291

Статья Программист Нет файла v8::Запросы Бесплатно (free) Производительность и оптимизация (HighLoad)

Наверное, каждый 1С-ник задавался вопросом "что быстрее, соединение или условие в ГДЕ?" или, например, "сделать вложенный запрос или поставить оператор В()"? В данной статье я не дам вам исчерпывающих инструкций по чтению планов запроса. Но я постараюсь объяснить доходчиво - что это такое и с какой стороны к ним подойти.

04.07.2017    31041    Evil Beaver    58       

PostgreSQL на Windows – реальная альтернатива для высоконагруженных систем на базе 1С 157

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Производительность и оптимизация (HighLoad)

Многие интересуются PostgreSQL, но не знают, насколько хорошо будет она работать с уже существующими системами. «Инфософт» - одна из первых компаний, кто опробовал PostgreSQL на Windows. О своем опыте перехода рассказывает руководитель отдела информационных технологий компании.      

23.06.2017    37068    a.doroshkevich    113       

Ускорение в 100 раз. Решаем проблему блокировок 329

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

Я являюсь автором и тренером курсов по оптимизации и повышению производительности в 1С. Большинство людей приходят ко мне на обучение, желая разобраться со своими проблемами, и я очень часто слышу от них: «эти блокировки замучили, достали, жизни нет, что делать – не знаем. Технологический журнал включали, галочки ставили, форумы читали – ничего не помогает». Я уверен, что эта тема актуальна для многих из вас, поэтому в статье, не вдаваясь глубоко в подробности, я хочу вам дать некоторые конкретные рекомендации, которые вы сможете применить у себя и сразу получить ощутимый эффект. Например, если у вас запрос из-за блокировок выполняется 15 секунд, то после оптимизации он начнет выполняться за 15 миллисекунд. Это обычная практика, никакой фантастики – все это можно сделать.

13.06.2017    60044    Andreynikus    34       

Настройка зеркалирования базы для MS SQL 55

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Архивирование (backup) Производительность и оптимизация (HighLoad)

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

19.05.2017    23729    MsDjuice    13