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

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

Администрирование - Администрирование данных 1С

индексы производительность СУБД PostgreSQL SQLServer SQL Server Microsoft Postgres оптимизация ошибки

"Магия" индексов привела к множеству заблуждений об их работе. Попробуем развеять некоторые из них в контексте 1С.

Ну, Вы знаете

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

Или, возможно, нет? Вероятно, что за потоком проблем из области разработки и решения прикладных задач эта тема просто выпала из Вашего поля зрения. Приоритеты могут быть таковы, что нужно помочь закрыть месяц, сдать отчётность, исправить ошибки в отчетах, починить обмены, сходить в отпуск в конце концов! Список можно бесконечно продолжать. И это абсолютно нормально!

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

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

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

Сегодня мы рассмотрим несколько самых распространённых заблуждений об индексах в контексте 1С, рожденных такими устоявшимися подходами, а также постараемся их объяснить и развеять.

Почему это важно

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

Придется стать героем! Изучить работу СУБД, в частности индексов, и встать на светлую сторону! Жизнь информационной базы в твоих руках! Расширь горизонты познания!

От простого к невероятному

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

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

И так, поехали!

Индексы не нужны

Часто приходилось слышать, что об индексах в базе можно не заботиться, т.к. это специфичная тема и мы так уже 15 лет живем. То есть проблем никогда не было, так зачем об этом беспокоиться? Да, у нас система жутко тормозит в периоды закрытия месяца и формирования тяжелых отчетов, но это же 1С! Просто нужно смириться или купить сервер получше. Да и вообще, нет времени с этим копаться.

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

Но индексы конечно же нужны! Это одно из самых эффективных средств повышения скорости поиска данных в базе. Без них большинство запросов выполнялось бы неприемлемое количество времени. Чем больше база, тем больше было бы это время. Если бы индексы были не нужны совсем, то, думаю, разработчики платформы не добавляли штатные кластерные индексы на большинство таблиц, не было бы настроек индексирования в объектах метаданных и многого другого. Нужно ли еще что-то говорить по этому поводу.

Индексы - это сложно 

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

Прочитав даже одну лишь из перечисленных статей, Вы навсегда поймете, что индексы - это просто. Когда знаешь - все становится просто. Знание - сила!

СУБД создает индексы автоматически

Помню не одну беседу, когда мне пытались доказать, что СУБД, в т.ч. Microsoft SQL Server, создает все необходимые индексы автоматически и полностью самостоятельно на основе собранной статистики. То есть если мы много много много раз выполним какой-либо запрос и SQL Server поймет, что для его эффективной работы нужен индекс, то она создаст его!

Это, конечно же, полностью не так! Создание, изменение и удаление индексов - это обязанность разработчика баз данных или администратора БД. Автоматически СУБД ничего не создает и не удаляет, и это очень хорошо. Вы только представьте ситуацию, когда SQL Server решит создать индекс автоматически во время рабочего дня, породив блокировку данных. Или автоматически создаст пару индексов и полностью займет свободное дисковое пространство, ведь индексы имеют накладные затраты в виде занимаемого места на диске и времени на их поддержание.

Но от части это все же правда. Но не в плане, что СУБД создает индексы автоматически, а в том, что она может подсказать каких индексов сейчас не хватает. Ранее в публикациях были рассмотрены скрипты для SQL Server и PostgreSQL, среди которых были и те, что показывали отсутствующие индексы. Для SQL Server статистика по отсутствующим индексам по умолчанию собирается наиболее подробная по сравнению с данными для PostgreSQL.

 
 Отсутствующие индексы для SQL Server
 
 Отсутствующие индексы для PostgreSQL

Не стоит уповать на СУБД в части создания индексов в автоматическом режиме. Все же думать над этим придется, а SQL Server / PostgreSQL / др. СУБД дадут эффективные инструменты анализа недостающих индексов и средства их создания и поддержки.

Платформа 1С создает все индексы сама

Как Вы уже поняли, СУБД не создает индексы автоматически, адаптируясь под выполняемые запросы. НО! Значит платформа 1С сама создает недостающие индексы для оптимизации производительности!

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

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

Чем больше индексов, тем лучше

Для быстрого поиска нужен индекс. Так почему же не добавить индекс на каждое поле. Например, есть справочник "Номенклатура" в конфигурации "Управление торговлей" ред. 11. В нем имеется несколько индексов, большинство из которых создается платформой 1С без каких-либо особых настроек. Есть и индексы, созданные специально для тех реквизитов, в которых свойство "Индексировать" установлено в "Индексировать" (извините за тавтологию, но такие уж названия):

  • Артикул
  • Вид номенклатуры
  • Код для поиска

Но что, если нужно выполнить поиск по реквизиту "Код ОКВЭД" или "Код ОКП"? Или любому другому полю? Почему бы не добавить индексы на каждое поле?

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

С помощью простого запроса можно проанализировать список индексов, на поддержание которых СУБД тратит значительные ресурсы в части операций ввода / вывода.

 
 Индексы с высокими издержками для SQL Server

К сожалению, такого простого запроса для PostgreSQL нет. Там требуется другой подход.

Плюс ко всему, неизвестно какие индексы для всех полей добавлять, ведь они могут быть составными, покрывающими, а еще для использования индексов значение отбора должно быть селективным. Какой смысл искать в индексе по полю "Пометка удаления" со значением Ложь, если 99% записей в таблице не помечены на удаление? Индекс не будет использоваться, т.к. смысла искать по неселективному значению нет.

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

Главное, чтобы поле входило в индекс

Перейдем к более практическим кейсам. Еще одним частым "фейлом" можно считать ситуацию, когда разработчики считают, что для эффективной работы индекса главное наличие в нем нужно поля. Например, в типовой конфигурации "Управление торговлей" ред. 11 имеется регистр сведений "Календарные графики" со следующей структурой.

 
 Структура регистра календарных графиков

У регистра один единственный кластерный индекс.

 
 Кластерный индекс календарных графиков

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

ВЫБРАТЬ
	КалендарныеГрафики.Календарь КАК Календарь,
	КалендарныеГрафики.Год КАК Год,
	КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика,
	КалендарныеГрафики.ДеньВключенВГрафик КАК ДеньВключенВГрафик,
	КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода КАК КоличествоДнейВГрафикеСНачалаГода
ИЗ
	РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
ГДЕ
	КалендарныеГрафики.ДатаГрафика = &ДатаГрафика

В качестве параметров передаем конкретную дату (например, "01.11.2017 0:00:00"). Вроде бы хороший запрос и это поле есть в индексе (см. изображение выше). Но на самом деле, запрос этот написан не самым оптимальным образом, а существующий индекс в запросе практически не используется. Посмотрите, что происходит на стороне СУБД.

 
 На стороне СУБД

По этой информации видно, что индекс не использовался от слова совсем. Но как же так? Индекс же содержит поле "Дата графика", почему бы его не использовать? И да, такие вопросы до сих пор приходится слышать. Узнав ответ, обычно начинают либо отрицать такое поведение, ибо уже по этой логике написали много запросов (да здравствует тех. долг!). Либо начинают возмущаться, что SQL Server не работает корректно и почему Microsoft не создала нормальный механизм индексирования.

Ответ, конечно же, простой - потому что индекс так не работает. Чтобы его использование стало возможным, необходимо накладывать условия в соответствии со структурой индекса, а именно в соответствии с порядком полей индекса. Да, можно не делать отбор по всем полям из состава индекса, но накладывать фильтр нужно от первого поля и так далее по порядку. Иначе его эффективное использование невозможно. Выше были даны ссылки на материалы по работе индексов, изучив их вопросов почему так это работает не останется.

 
 На стороне СУБД с правильным запросом

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

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

Еще одна забавная путаница связана с составными индексами. Вот есть у Вас справочник "Номенклатура" и для какой-то задачи понадобилось делать поиск номенклатуры по трем полям: "Качество", "Марка", "Складская группа". Не важно зачем, есть задача и все :)

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

 
 Нет составного индекса!

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

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

 
 Ох уж это индексирование с доп. упорядочиванием!

Все это поведение описано в официальной документации и ничего удивительного здесь нет. Но все ли ее читают?

В регистрах всегда есть индекс по измерениям

По этому поводу где-то даже была ветка на Инфостарт или Мисте, где разработчики спорили так, аж "сопли из замочной скважины летели". Рассмотрим пример. Есть в УТ 11 регистр накопления "Товары на складах". Думаю, что многие с ним знакомы. Так вот, в некоторых ситуациях необходимо делать запрос к основной физической таблице регистра, не используя виртуальную таблицу остатков. Зачем и когда это нужно сейчас обсуждать не будем, просто продолжим. Вот структура этого регистра.

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

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

ВЫБРАТЬ
	ТоварыНаСкладах.Период КАК Период,
	ТоварыНаСкладах.ВидДвижения КАК ВидДвижения,
	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
	ТоварыНаСкладах.Характеристика КАК Характеристика,
	ТоварыНаСкладах.Назначение КАК Назначение,
	ТоварыНаСкладах.Склад КАК Склад,
	ТоварыНаСкладах.Помещение КАК Помещение,
	ТоварыНаСкладах.Серия КАК Серия,
	ТоварыНаСкладах.ВНаличии КАК ВНаличии,
	ТоварыНаСкладах.КОтгрузке КАК КОтгрузке
ИЗ
	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
	ТоварыНаСкладах.Номенклатура = &Номенклатура

УПОРЯДОЧИТЬ ПО
	Период

Так как измерение "Номенклатура" первое в предполагаемом индексе по измерениям, то все должно работать отлично. Но, вот так сюрприз! На стороне СУБД с нами не согласны.

 
 На стороне СУБД

Да, индекс по измерениям в основной таблице регистра не использовался. Почему? Да потому что там нет такого индекса по измерениям, которого мы так ждали. Основная таблица регистра накопления по умолчанию содержит такие индексы:

 
Штатные индексы регистра

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

 
 Включаем индексирование для измерения

Теперь ситуация на стороне СУБД будет иной.

 
 На стороне СУБД после добавления индекса

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

 
 Индекс по итогам регистра накопления

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

Но, конечно, не все так однозначно. Бывают ситуации, когда нужны индекс по измерениям уже есть. Например, регистр сведений "Цены номенклатуры", в котором есть множество индексов на основной таблице. Три основных из них создались платформой 1С изначально, т.к. они есть для всех регистров подобного вида (основной кластерный индекс по периоду, индекс по регистратору и индекс по измерениям).

 
 Штатные индексы регистра сведений

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

При такой настройке платформа создает индекс по измерению как дополнительный. В регистре "Цены номенклатуры" в УТ 11 для всех измерений установлена эта настройка, поэтому платформа была очень щедрой на создание индексов для этих измерений.

 
 Индексы для ведущих измерений

Будут ли два индекса, у которых первое поле "Номенклатура" избыточными? Стоило ли создавать индекс для измерения "Номенклатура", если оно уже было в другом индексе? Сложный вопрос, ведь конечная структура индексов все же отличается. Нужно смотреть по ситуации.

Что же можно сказать в итоге? Не всегда одной только логикой и предположениями можно понять, какие все-таки индексы создает платформа 1С. Как говорится: "доверяй, но проверяй". Если есть хоть малейшие сомнения в том, создала ли платформа необходимый для наших запросов индекс - вперед смотреть что творится на стороне базы данных. Анализировать можно с помощью стандартных средств платформы, вызывая метод "ПолучитьСтруктуруХраненияБазыДанных" или использовать более удобные инструменты с Инфостарт. Например, отчет Просмотр и анализ структуры базы данных (отчет на СКД), с помощью которого и были сделаны изображения и другой материал по структуре индексов в этой публикации.

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

Во все временные таблицы нужно добавлять индекс

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

 
 Пример использования временной таблицы

Но давайте посмотрим, как индекс во временной таблице влияет на производительность. Первым делом проанализируем как платформа выполняет запрос выше.

 
 Запрос с индексами во временной таблице
 
 Запрос без индексов во временной таблице

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

Тут лишь можно посоветовать - проверять работу своих запросов, смотреть планы запроса и изучить контекст работы Вашего кода. Универсального решения нет.

Неплатформенные индексы - зло

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

Все в Ваших руках

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

Краткий итог всего выше сказанного можно подвести такой:

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

В любом случае, добро пожаловать в комментарии! Всегда интересно послушать другие кейсы и перенять чужой опыт.

Если Вам нравится публикация, то не забывайте ставить лайки и подписываться на канал :).

Другие ссылки

Авторские разработки

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 28.11.19 10:54 Сейчас в теме
Пока дочитал до
И так, поехали!

подустал.
Зачем такие длинные прелюдии? это ведь не драмкружок.
red80; Velesstroy_OOO; Afanasyev.sv@mail.ru; Sword; KRJ; mike1970; Yashazz; nkp14108; Дмитрий74Чел; trickster; YPermitin; +11 Ответить
2. YPermitin 8572 28.11.19 10:55 Сейчас в теме
(1) чтобы подготовить к лонгриду :)
3. user-z99999 22 28.11.19 12:28 Сейчас в теме
(2)
Скрипты для каких версий ms sql ?
4. YPermitin 8572 28.11.19 12:30 Сейчас в теме
(3) от 2012 и выше.

На 2008 практически не проверял, нет под рукой просто.
42. Afanasyev.sv@mail.ru 06.12.19 20:21 Сейчас в теме
(1) плюсую, 70% воды

Зашёл в другие публикации - тоже самое. Сочинение "как я провел лето". Читать отпало желание.
43. YPermitin 8572 06.12.19 20:33 Сейчас в теме
(42) расстроили. А я старался.
5. Free1CforAll 28.11.19 13:11 Сейчас в теме
(0) автор, как удается столько писать и интересно.

Можно уже книгу напечатать :)
Sword; davdykin; +2 Ответить
8. YPermitin 8572 28.11.19 13:19 Сейчас в теме
(5) боюсь, она не будет пользоваться спросом)))
Слишком узкая тематика)))
6. katakuna 28.11.19 13:17 Сейчас в теме
Большое Вам спасибо за труд.
mvxyz; jekichan; Sword; mike1970; mogl; nkp14108; ids79; kuzyara; davdykin; EVKash; Eleepod; xxxAndricxxx; YPermitin; +13 Ответить
7. YPermitin 8572 28.11.19 13:18 Сейчас в теме
9. starik-2005 2177 28.11.19 13:53 Сейчас в теме
Аффтор, пеши есчё.

Только не понял, нафига внутри запроса с ВТ запрос на номенклатуру? С первого взгляда достаточно заменить соединение с левого на внутреннее.

ЗЫ: Имхо, оставлен вопрос о том, почему индексы помогают запросам выполняться быстрее...
YPermitin; +1 Ответить
11. YPermitin 8572 28.11.19 14:15 Сейчас в теме
Благодарю!

(9)
ЗЫ: Имхо, оставлен вопрос о том, почему индексы помогают запросам выполняться быстрее...


Я поэтому добавил ссылки на базовый материал, а то текста было бы слишком много.


(9)
Только не понял, нафига внутри запроса с ВТ запрос на номенклатуру? С первого взгляда достаточно заменить соединение с левого на внутреннее.


Очень интересный вопрос.
Виртуальная таблица фактически является вложенным запросом, причем вложенность может быть в несколько уровней.
Если мы делаем внутреннее соединение, то это соединение именно с вложенным запросом.

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

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

На PostgreSQL оптимизатор тоже обрабатывает такие ситуации, но менее успешно. По крайней мере "игры" с этим делом в прошлом году были не в пользу PG.

Ту же картину можно увидеть, если использовать виртуальные таблицы среза последних в динамических списках (если итоги для среза не включены). Часто оптимизатор СУБД тоже "прокидывает" условия соединения во внутренние условия вложенных запросов.

В общем, можно довериться оптимизатору СУБД и не писать эти условия, но можно быть параноиком и явно указать ему как нужно отбирать данные :)
20. Darklight 22 28.11.19 17:04 Сейчас в теме
(этот пост не является комментарием к посту 11 - и размещён под ним случайно)

Лично я считаю, что в гипотетически будущей платформе 1С: Предприятие 9 правильным было бы вынести все прямые вопросы производительности (понятно что это не касается текстов запросов, например) за рамки конфигуратора 1С (вернее среды разработки) в отдельный продукт. Я бы разделил конфигуратор на два продукта (а то и три-четыре-пять, но третий и четвертый, и пятый продукты пока не буду тут осуждать - производительности они не касаются):

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

2. Технологический конфигуратор (Административный инструмент) - а вот сюда должны быть вынесены все средства чисто по администрированию платформы 1С, начиная от управления развёртывание и бэкапированием, контролем ошибок, включая управление пользователями и их правами, и заканчивая анализом и настройкой производительности. То есть всё то, что, как мне кажется, должно входить в навыки специалиста(эксперта, профессионала) по технологическим вопросам платформы 1С: Предприятие (и отчасти администратора баз данных).

Соответственно, именно в этот технологический конфигуратор должны входить инструменты, как по анализу производительности СУБД и базы данных (ну и других проблем СУБД тоже) – т.е. сюда должны быть сразу включены средства а-ля 1С Центр управления производительностью. Так и инструменты по настройке этой производительности: начиная от гибкого управления индексами (ведь «теперь этим занимается специалист» – и нет нужды шибко упрощать этот процесс), и закачивания вопросами управления файловыми группами СУБД, секционированием, и настройкой кластеров (как 1С, включая отдельные сервера - 1С Дата акселераторы (долой консоль севрера 1С – всё нужно свести в этот инструмент); так и СУБД - ну надеюсь 9-я генерация платформы-таки позволит размещать базу распределённой на разных серверах СУБД без сторонних извращений).

То есть – тут должен быть частично реализован функционал СУБД – но в единой обобщённой (для всех поддерживаемых СУБД) среде, понятной и привычной для тех, кто работает с продуктами 1С. Тем более, что я прекрасно понимаю, что отдельных специалистов технологическим вопросам в большинстве компаний не будет (но об этом ниже будет замечание), и данным инструментом будут пользоваться и программисты (но вряд ли начинающие, а начинающие – если и будут там что-то делать – то строго по готовым инструкциям); но, кто бы не работал с данным инструментом - всё-таки нужно будет получать определённые знания по его использованию – достойные отдельного «двухтомника» администрирования и отдельных курсов и сертифицированы специалистов для разного уровня квалификации.

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

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

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

2. Создавать виртуальные таблицы (ну или view в терминах СУБД; в т.ч. материализованные, но за их техническое исполнение – должна отвечать платформа 1С Предприятие, тем более, что возможности view в разных СУБД отличаются). В общем случае – это не просто отдельно созданные описания источников данных, с обращением к СУБД (в общем случае не обязательно с обращение к базе данных даже) – тут может быть реализован достаточно мощный механизм, как описания повторного используемого кода, так и оптимизации выборки данных, включая их кеширование (вот 1С Дата акселераторы - это тема как раз для развития до данного механизма). Но программист лишь описывает, своё желание – получать данные из такого источника и использует его в коде. Все тонкости его технического воплощения – на плечах платформы и с контролем (управлением) со стороны технологического специалиста. В т.ч. и необходимость создавать индексы под такие выборки. То есть – программисты должны стараться все серьёзные (по объёму данных или частоте использования) выносить в такие вот виртуальные таблицы (в простейшем случае – представляющие просто параметризованные макрозапросы) – и выбирать данные уже из них. А настройка нужных индексов для обеспечения эффективности такой выборки (как для view – если он материализован, так и для исходных данных) – это уже дело технологического специалиста (в т.ч. он же решает – будет ли в итоге это подзапрос, или сначала нужно создать временную таблицу, в т.ч. со своими индексами – причём это всё тоже может быть вариативно – в зависимости от параметров выполнения – которые будут фактически передаваться в виртуальную таблицу – как отчасти это делает 1С Предприятие 8 со своими виртуальными таблицами – разве что пока не научилась превращать их во временные с индексами – но кто знает, может ещё научится в ближайшие десятилетия).

3. Делать пометки к полям, которые программист считает необходимым проиндексировать. Но это лишь рекомендательные пометки. Для специалиста по технологическим вопросам – чтобы он мог проанализировать эти поля для индексирования с повышенным приоритетом. Метка, должна иметь и пояснительный комментарий, и привязку к решаемой задаче, и привязку к какой-то классифицированной группе обобщения – когда разные элементы можно обобщённо анализировать в единиц структуре группы. Ну и пометка может иметь признак будущей или текущей критичности – выставляемая когда продвинутый программист твёрдо уверен в том, что этот индекс будет критически нужен в будущем (когда наберётся достаточно данных – и это будет не длительный процесс) или нужен уже сейчас (данных уже достаточно) – и нужно постараться реализовать этот индекс (возможно отключив другие – менее приоритетные).

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


Ну и в конце, несколько слов о ситуации, когда компания не может себе позволить иметь даже самого примитивного специалиста по технологическим вопросам (даже в качестве обученного программиста или системного администратора):

1. Если компания работает с очень небольшими базами – то она, будет использовать и простую версию платформы в которой даже не будет такого инструмента как «Технологический конфигуратор» (вместо него может быть упрощённый продукт по развёртыванию баз на серверах 1С Предприятие – что-то типа консоли управления кластерами 1С). Но тут, значит, и заботиться о гибкой настройке не требуется – в этом случаем минимальную оптимизацию на себя должна брать платформа 1С (ну и СУБД). Чего-то особо гибкого и оптимального тут не требуется. Вполне будет достаточно примерно текущего уровня автоматического создания индексов как на текущих релизах 1С: Предприятие 8. Ну разве, что нужно будет ещё бегло проанализировать созданные программистом виртуальные таблицы и безоговорочно удовлетворить настоятельные просьбы создать тот или иной индекс.

2. Покрупнее компаниям стоит подумать о размещении базы в облаках (это явно будет главным трендом второй половины XXI века, когда и настанет эпоха гипотетической платформы 1С: Предприятие 9) – там оптимизацией производительности займутся местные специалисты (а уровень углублённого анализа будет определяться текущим контрактом).

3. Другим же компаниям, с локальным размещениям баз, но уже использующих более продвинутую платформу, имеющую продукт «Технологический конфигуратор» – настоятельно будут рекомендовать хотя бы раз в год вызывать специалиста по технологическим вопросам со стороны – чтобы он приходил и анализировал состояние производительности (и не только) СУБД, проводил настройку и давал рекомендации другим специалистам (в т.ч. программистам). Тем более, что в таких компаниях вряд ли будет использоваться версия продукта с самой продвинутой лицензией – значит средства оптимизации производительности будут несложными (урезанными) – и вызов специалиста вряд ли будет дорогим.

4. Ну, или можно использовать внешние онлайн сервисы (в т.ч. бесплатные), которые будут подключаться к «Технологическому конфигуратору» и использовать его возможности для анализа и настройки информационной базы и кластерной архитектуры (думаю тут Вячеслав Гилёв подсуетится, да и не только он).
5. Да что там – если с оптимизацией справятся онлайн сервисы – то с ней могут справятся и встроенные в платформу аналитические механизмы – об этом ниже.

Как, я упомянул выше в первом пункте – простая версия платформы (ну там Базовая или гипотетическая Стандартная) могут даже не иметь такого инструмента, как «Технологический конфигуратор» - и там платформа настраивает индексы «по старинке», очень ограничено и не очень оптимально. Анализируя лишь метаданные по простым схемам.

Но в более продвинутой версии платформы (Профессиональная, Корпоративная…) – встроенный анализатор уже может быть куда помощнее. И это важно - умные автоматизированные технологии анализа и оптимизации – это тоже будет тренд второй половины XXI века – и 1С Предприятие 9 не должна будет в этом отставать!


Встроенный AI-анализатор производительности в определённых случаях сможет подменять отсутствующего специалиста по технологическим вопросам. И выполнять его функции, то есть:

1. Собирать и анализировать статистику выполнения запросов (и не только)

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

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

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

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

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

7. Собирать (направлять – если разрешено) статистику и рекомендуемые сценарии настройки из единого центра сбора данных о производительности – который будет консолидировать "мировой" опыт применения тех или иных подходов по оптимизации, и по соответствию уровня оборудования и его конфигурации, объёмам данных и операций над данными. И на основе этой статистики – тоже выдавать свои рекомендации.

8. Автоматически проводить регламентные операции по обслуживания СУБД. И контролировать их процесс.

Умный AI-анализатор/администратор/технологический специалист может много чего ещё уметь делать самостоятельно (как делать, так и просто анализировать, прогнозировать и информировать – смотря как будет настроен). Тут, конечно, очень важен будет первоначальный процесс развёртывания такой интеллектуальной системы. Вот тут, нужен будет эксперт по технологическим вопросам. Но это условно «разовая» операция – и дальше система уже будет жить своей жизнью, без лишних затрат – хотя, всё равно, раз в год – хорошо бы, чтобы её контролировал специалист.
Но главный смысл в том, что компании, купившие, к примеру, локальную платформу 1С: Предприятие 9 Профессиональный выпуск – и не желающие иметь ни штатного, ни приходящего специалиста по технологическим вопросам. Могли бы разово потратиться на развёртывание такой AI-системы (вряд ли такие компании смогли бы даже самостоятельно успешно развернуть даже 1С Предприятие 8 УПП или даже Торговлю 11). И дальше полагаться на продвинутые AI-возможности оптимизации. Не напрягая оными своих непродвинутых программистов.

Ну, а купившие выпуск КОРП – уж наверняка будут иметь как минимум приходящего специалиста по технологическим вопросам – но даже для него такой встроенный AI-помощник был бы хорошим подспорьем (особенно грамотно постоянно подстраиваемый с большой свободой к экспериментам и анализу, которую и предполагает использование лицензии КОРП – что нужна не для всех, а только тем, кому ОЧЕНЬ важны вопросы оптимизации производительности) – он бы смог выполнять много рутины и подготавливать много аналитических материалов для специалиста – а уже он бы принимал конечные решения, в т.ч. отложенно запланированные, для автоматического выполнения AI-помощником в ближайшее технологическое окно.



Ну, я вот так вижу себе процесс оптимизации в гипотетической платформе будущего – 1С Предприятие 9 (ждать которую в обозримом будущем, увы, не стоит – это лишь мои фантазии). Буду, рад, если найдутся желающие высказать своё мнение по данному вопросу (любое – как за так и против) – можете даже поставить оценки данному комментарию, в зависимости от того – согласны Вы или нет, с данным материалом!
Lucechiaro; alevnev; Synoecium; TipsyKID; user774630; +5 Ответить
10. Darklight 22 28.11.19 14:02 Сейчас в теме
Спасибо за статью.
Хочу поднят тему запроса из статьи
ВЫБРАТЬ
	ТоварыНаСкладах.Период КАК Период,
	ТоварыНаСкладах.ВидДвижения КАК ВидДвижения,
	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
	ТоварыНаСкладах.Характеристика КАК Характеристика,
	ТоварыНаСкладах.Назначение КАК Назначение,
	ТоварыНаСкладах.Склад КАК Склад,
	ТоварыНаСкладах.Помещение КАК Помещение,
	ТоварыНаСкладах.Серия КАК Серия,
	ТоварыНаСкладах.ВНаличии КАК ВНаличии,
	ТоварыНаСкладах.КОтгрузке КАК КОтгрузке
ИЗ
	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
	ТоварыНаСкладах.Номенклатура = &Номенклатура

УПОРЯДОЧИТЬ ПО
	Период
Показать


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

Так же тут остался не рассмотрен (хотя изначально поднят но тут же забыт) вопрос а как же тут сделать эффективный отбор, с отбором, таки, всей номенклатуры, но по конкретному складу?

За запросы по анализу недостающих (ну или избыточных) индексов спасибо - хотя это, бесспорно, очень обширная тема - для целой статьи!
Но, тем не менее, жаль, что нет ни одной отсылки такому инструменту как 1С Корпоративный инструментальный пакет (в частности к ЦУП; а так же к его сторонним аналогам), которые бы позволили подходить к управлению индексами более корректно и конкретно. Считаю, что правильно было хотя бы упомянуть эти инструменты и рассказать как они помогают принимать более обдуманные решения по созданию тех или иных индексов (ну или не помогают - об этом тоже стоило бы написать).
ILNIK; davdykin; YPermitin; +3 Ответить
12. YPermitin 8572 28.11.19 14:34 Сейчас в теме
(10)
Но, тем не менее, жаль, что нет ни одной отсылки такому инструменту как 1С Корпоративный инструментальный пакет (в частности к ЦУП; а так же к его сторонним аналогам), которые бы позволили подходить к управлению индексами более корректно и конкретно.


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

ЦУП и, например, PerfExpert однозначно могут помочь понять что нужно поменять в конфигурации индексов. А дать описание этому можно, но уже не здесь и сейчас. Нужен отдельный гайд)


(10)
Но так и не привели ответа - а как же правильно посчитать остатки/обороты с отбором по измерениям, когда как раз обычные таблицы остатков/оборотов за период не подходят!


Я не усложнять пример намеренно, т.к. кейсов очень много. В этом примере достаточно было добавить индексирование для первого измерения по номенклатуре, тогда запрос как-раз и стал работать намного лучше.

Как получать остатки и обороты без виртуальных таблиц эффективно?
Тут очень много кейсов, и решений тоже. Например, если нужно посчитать по всей номенклатуре, но по конкретному складу:
1. Можно добавить индекс по складу, но он может не помочь если записей много и СУБД посчитает, что тут лучший вариант это сканировать таблицу. Возможно, это использовать индекс "Склад + Период" и отбирать записи по периоду, но можем также столкнуться с тем, что объемы данных все равно будут большими, малая селективность.
2. Если получать большие объемы через таблицу движений, то сам регистр накопления теряет смысл. Мы же перестаем использовать итоги. Возможно, кому-то подойдет вариант по созданию неплатформенного индекса в самой таблице итогов. Да, это противоречит ЛС и это уже много раз обсуждали, но иногда может сильно понадобиться.

Можно предложить какие-нибудь более конкретные кейсы для разбора и по возможности я бы их описал.
13. Dorosh 142 28.11.19 14:46 Сейчас в теме
Спасибо за отличную статью. ИМХО ее бы прекрасно дополнила часть про использование Tuning Wizard для сочинения нужных индексов
davdykin; YPermitin; +2 Ответить
15. YPermitin 8572 28.11.19 14:52 Сейчас в теме
(13) надо подумать об этом.

Благодраю!
14. user1274438 28.11.19 14:48 Сейчас в теме
Правильно ли я понимаю, что
в соответствии с порядком полей индекса

подразумевает, что есть разница между
WHERE ((T1._Fld1551 = @P1)) -- Фильтр по разделителю данных
AND ((T1._Fld32140 = @P2)) -- Фильтр по дате графика
AND ((T1._Fld32138RRef = @P3)) -- Календарь
AND ((T1._Fld32139 = @P4)) -- Год
и
WHERE ((T1._Fld1551 = @P1)) -- Фильтр по разделителю данных
AND ((T1._Fld32138RRef = @P3)) -- Календарь
AND ((T1._Fld32139 = @P4)) -- Год
AND ((T1._Fld32140 = @P2)) -- Фильтр по дате графика
?
YPermitin; +1 Ответить
16. YPermitin 8572 28.11.19 14:54 Сейчас в теме
(14) тут имеется ввиду не порядок того, как условия накладываются в самом запросе. Главное чтобы они подходили под структуру индекса, под порядок полей в нем.

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

А то как Вы условия напишите в запросе - не важно. Оптимизатор сам будет решать какой план ему выбрать и как данные в итоге получать.
17. user1274438 28.11.19 15:07 Сейчас в теме
(16) если в таком случае применить это правило в вышеприведенном примере про календарные графики
накладывать фильтр нужно от первого поля и так далее по порядку

т.е. до последнего поля индекса _Fld32140 (дата графика)
то предыдущее утверждение в этом же предложении
Да, можно не делать отбор по всем полям из состава индекса

может вызвать некоторое противоречие

P.S.
без намека на тролололо
18. YPermitin 8572 28.11.19 15:14 Сейчас в теме
(17)
может вызвать некоторое противоречие


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

Подумаю, может упрощу текстовку или добавлю GIFку для наглядности.

+
19. akim2040 20 28.11.19 17:01 Сейчас в теме
Очень доходчивая статья несмотря на долгое вступление. Открыли глаза на некоторые вещи, спасибо!

ЗЫ может под спойлер прелюдию?
21. muskul 29.11.19 03:22 Сейчас в теме
Очень познавательно
YPermitin; +1 Ответить
22. davdykin 24 29.11.19 07:13 Сейчас в теме
А на счет книги, я бы на вашем месте подумал )). Статьи у вас очень удачные, большое спасибо за ваш труд.
ids79; YPermitin; +2 Ответить
23. YPermitin 8572 29.11.19 07:29 Сейчас в теме
(22) тогда и мемы придется в книгу добавлять :)
mogl; acanta; +2 Ответить
28. ids79 5520 29.11.19 09:24 Сейчас в теме
(22)Я тоже голосую за книгу )).
YPermitin; +1 Ответить
30. DoctorRoza 29.11.19 14:07 Сейчас в теме
Юрий! Можно сваять свою инфо-конфигурацию. В нее выкладывать свои статьи. Сделать грамотный рубрикатор, другие авторы подтянутся.
24. ByNiko1984 29.11.19 07:34 Сейчас в теме
(0) прочитал статью и понял, что не знаю еще столько, что можно учиться пару лет.

Статья может напугать новичков, особенно мем в конце статьи :)

Ну а так достойно сделано!
YPermitin; +1 Ответить
25. YPermitin 8572 29.11.19 07:55 Сейчас в теме
26. lmnlmn 61 29.11.19 08:56 Сейчас в теме
Прочитал и тут же захотелось бросить вверенную на разработку задачу и открыть профайлер на SQL-сервере! Отличный материал!
davdykin; ids79; YPermitin; +3 Ответить
27. YPermitin 8572 29.11.19 08:58 Сейчас в теме
(26) спасибо за добрые слова!
29. VmvLer 29.11.19 11:06 Сейчас в теме
логичнее выбрать жанр книги "драма"
а сюжет построить классический
он - 1С-эксник
она - Фузинка
жестокий мир был против их союза и они, устав бороться, за один
присест съели годовой запас грибов своих отделов разработки.
31. comol 4331 02.12.19 17:25 Сейчас в теме
Крутейшая статья. Спасибо за труд.
YPermitin; +1 Ответить
34. YPermitin 8572 02.12.19 18:45 Сейчас в теме
32. a.ivanov 02.12.19 18:31 Сейчас в теме
Ты! Да, ты! Ты разработчик 1С, который не прочитал ни одной книжки про субд которую используешь и не знаешь про сайты docs.microsoft.com или postgresql.org. Эта статья для тебя.
sevushka; KTo; +2 Ответить
36. YPermitin 8572 02.12.19 18:46 Сейчас в теме
(32) никогда не слышал об этих сайтах!

Им точно можно доверять? :D

:)))))))))))
33. acanta 02.12.19 18:37 Сейчас в теме
У нас есть ещё и файловая СУБД от 1с и в ней все это не так уж плохо, но она вроде как триал или демо, не знаю как правильно это называется.
YPermitin; +1 Ответить
35. YPermitin 8572 02.12.19 18:45 Сейчас в теме
(33) я с файловой базой мало работал. Хорошо это или плохо - не знаю. Но это так :)
37. KTo 03.12.19 05:05 Сейчас в теме
Любая магия это отсутствие знаний.
YPermitin; +1 Ответить
38. triviumfan 20 03.12.19 21:19 Сейчас в теме
И снова они... ничего нового.
ЗЫ: вру, новое оформление статьи.
YPermitin; +1 Ответить
39. YPermitin 8572 03.12.19 21:20 Сейчас в теме
40. eaa 04.12.19 11:54 Сейчас в теме
Возник вопросец. До прочтения статьи считал, что для работы индекса достаточно наложить фильтр на все поля измерений и не важно в какой последовательности. А субд сама выстроит порядок. Всё-таки я был не прав?
YPermitin; +1 Ответить
41. YPermitin 8572 04.12.19 12:12 Сейчас в теме
(40) если вы накладываете на все поля индекса, то он будет работать эффективно. Все правильно.

Но! Отбор должен быть селективным. Если в результате отбора вернется 50% записей таблицы, то индекс будет бесполезен.

Также не обязательно накладывать отбор на все поля. Нужно, чтобы отбор накладывался на поля в соответствии с их порядком в индексе (при этом не обязательнотв тексте запроса порядок отборов делать, СУБД сама определит как нужно). Например, индекс:
- Номенклатура
- Склад
- Серия

Чтобы индекс работал можно установить отбор только о номенклатуре. Или по номенклатуре и складу, или номенклатуре и складу и серии.

А вот отюоры только оп серии, только по складу, только по серии и складу не позволят использовать индекс.

Ну и не забываем про селективность. Плюс есть еще и другие факторы, влияющие на использование индекса.
acanta; eaa; +2 Ответить
44. acanta 06.12.19 20:42 Сейчас в теме
Индексы в дбф были практически последней темой в курсе, поэтому про них забыли. Мне до сих пор непонятно чем отличаются idx в FoxPro от cdx в 1с.
И как их ухитрились впихнуть в один файл с метаданными и таблицами. И как оно должно открываться по сети.
Вопрос зачем не стоит - ибо в файловой базе 7.7. визуально можно определить в файловом менеджере какие таблицы были изменены при записи и проведении документа, что несекьюрно.
Читать словарь dd для понимания необязательно, многие программисты так делают, и считают это чем то вроде научного открытия, выполненного методом научного тыка. Что вполне соответствует действительности.
Интересно, есть ли отличия в индексах СУБД SQL, postgres и файловой 1с.
Вывод: за индексами нужно ухаживать, но нельзя дать инструкцию как это сделать, нужно как то видеть их состояние в комплексе с тем что именно индексируется.
В этом и состоит магия.

Вопрос - если 1с публикатор не настолько хорош, может есть возможность добавлять какойто специальный сетевой протокол, вместо TCP, по аналогии с 3g - 5g мобильной связью, чтобы работать в сети с файловой базой было возможно? Или это совсем бред?
Оставьте свое сообщение

См. также

Семь рекомендуемых бесплатных курсов Microsoft для ИТ-администраторов Промо

Администрирование данных 1С Бесплатно (free)

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

28.12.2018    15001    0    VKuser24342747    1    

Линукс как основной многофункциональный сервер небольшой компании. Наш опыт

Администрирование СУБД Linux Бесплатно (free)

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

08.06.2020    3139    0    ogroup    21    

Секционирование в PostgreSQL 12

Администрирование СУБД Бесплатно (free)

Протестируем новый функционал секционирования в PG12.

20.05.2020    2496    0    D_astana    46    

Работа с журналом регистрации. Выходим за границы платформы

Журнал регистрации Бесплатно (free)

Работа с журналом регистрации нестандартными средствами. А также немного про использование платформы .NET в экосистеме 1С.

12.05.2020    4259    0    YPermitin    24    

Listary – интеллектуальный глобальный помощник поиска и выбора файлов в списках диалогов Windows Промо

Поиск данных Бесплатно (free)

Диалоги выбора файлов каждый раз заставляют тебя выполнять десятки однообразных кликов и скроллов мышкой? Устал от неудобного поиска файлов в проводнике? Эта программа - то, что тебе нужно.

18.08.2011    28428    0    tormozit    15    

DBCC CHECKDB оповещение о повреждении баз данных SQL

Администрирование СУБД Россия Бесплатно (free)

Проверка целостности баз данных SQL при помощи DBCC CHECKDB и рассылка оповещений на почту.

09.05.2020    2054    0    P_enemy    3    

Как работает 1С размером 13 ТБ в условиях непрерывной разработки

Перенос данных из 1C8 в 1C8 Администрирование СУБД Бесплатно (free)

Обеспечение быстрого непрерывного обмена данными между высоконагруженными системами 1С, покрывающими всю территорию России, требует ответственного подхода к архитектуре и инструментам, используемым для обмена. Как правильно построить такую инфраструктуру и научиться ее оперативно мониторить, в своем докладе на конференции Infostart Event 2019 Inception рассказал разработчик компании «ДНС Ритейл» Максим Старков.

27.03.2020    10488    0    max_st    52    

Организация резервного копирования файлов с использованием rclone

Архивирование (backup) Россия Бесплатно (free)

Описание использования достаточно универсальной утилиты по синхронизации файлов.

21.01.2020    3282    0    malikov_pro    0    

31 марта — Международный день резервного копирования Промо

Архивирование (backup) Бесплатно (free)

А вы сделали бэкап? А проверили, что его можно использовать?

31.03.2016    19251    0    Gilev.Vyacheslav    3    

Активный 2019 год на Инфостарт

О сообществе О жизни Бесплатно (free)

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    5443    0    YPermitin    24    

Взломать за 60 секунд!

Информационная безопасность Администрирование СУБД Бесплатно (free)

При работе с данными нужно обращать внимание не только на объемы, скорость и удобство, но и на безопасность. Если организация не уделяет внимания безопасности, пользователь с урезанными правами может получить полный доступ к базе данных за 1-5 минут. Набором типичных ошибок и действенных рецептов по усилению безопасности клиент-серверной 1С на конференции Infostart Event 2019 Inception поделился руководитель ИТ в компании «ИнфоСофт» Антон Дорошкевич.

16.12.2019    13988    0    a.doroshkevich    45    

Командный интерпретатор для 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Инструмент для выполнения команд CMD / PowerShell из 1С.

2 стартмани

15.11.2019    10030    20    YPermitin    41    

LiteManager — удаленное администрирование. Описание, практика применения, рекомендации. Промо

Сервисные утилиты Администрирование данных 1С Бесплатно (free)

Удаленное администрирование компьютерами. Локальная сеть. Интернет. Описание, практика применения, рекомендации.

30.04.2013    79301    0    StepByStep    55    

Набор скриптов для знакомства с PostgreSQL

Администрирование СУБД Бесплатно (free)

Немного скриптов для PostgreSQL, позволяющих познакомиться с состоянием сервера.

04.11.2019    13073    0    YPermitin    18    

Пакетная выгрузка / загрузка внешних отчетов и обработок

Прочие инструменты разработчика Менеджеры внешних отчетов v8 1cv8.cf Абонемент ($m)

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

2 стартмани

04.11.2019    7797    25    YPermitin    22    

Обозреватель криптографии

Инструментарий разработчика Защита ПО v8 Абонемент ($m)

Отчет для просмотра доступных провайдеров и сертификатов криптографии на сервере и клиенте.

2 стартмани

21.10.2019    8699    11    YPermitin    10    

Сжатие баз данных 1С:Предприятие в MS SQL Server Промо

Администрирование данных 1С Россия Бесплатно (free)

Тема сжатия баз данных 1С в настоящий момент довольно часто обсуждается. Достоинства сжатия известны – уменьшение размера базы данных, уменьшение нагрузки на дисковую подсистему и некоторое ускорение выполнения тяжелых операций чтения/записи. Из недостатков – небольшое увеличение нагрузки на процессоры сервера СУБД за счет расхода ресурсов на компрессию/декомпрессию данных. Но при использовании в качестве MSSQL и DB2 (за Oracle и PostgreSQL не скажу, т.к. не знаю) есть один «подводный камень» - при выполнении реструктуризации происходит декомпрессия новых таблиц и индексов. Происходить это может как при выполнении обновления конфигурации с изменением структуры метаданных, так и при выполнении тестирования и исправления ИБ (реиндексация пересоздает только индексы, а реструктуризация – и таблицы, и индексы). «Проблема» кроется в том, что признак сжатия устанавливается индивидуально для каждой таблицы и индекса.

29.01.2012    86147    0    Aleksey.Bochkov    57    

Набор скриптов для знакомства с SQL Server

Производительность и оптимизация (HighLoad) Администрирование СУБД Бесплатно (free)

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

30.09.2019    20717    0    YPermitin    14    

Установка и настройка нескольких экземпляров сервера 1С: Предприятия 8.3 разных релизов на одном Ubuntu-server

Администрирование данных 1С Россия Бесплатно (free)

Запуск нескольких экземпляров сервера 1С Предприятия 8.3 разных релизов на одном Ubuntu-server.

19.09.2019    10960    0    Error34    18    

Установка 1С Сервера взаимодействия на Linux

Администрирование данных 1С Россия Бесплатно (free)

В статье описан пошаговый процесс установки Сервера взаимодействия 1C на Linux CentOS 7.6.

06.09.2019    8565    0    KlSergey    17    

Информер для сайта , актуальные релизы 1С + Проверка подписки ИТС. Промо

WEB Администрирование данных 1С Сервисные утилиты Бесплатно (free)

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

12.09.2014    40489    0    Malfarion    34    

1С + PostgreSQL + SSD: Куда уходит ресурс хост-записей?

Администрирование данных 1С Россия Бесплатно (free)

Работа PostgreSQL на SSD начиная с 10 версии, резко увеличивает нагрузку на ресурс SSD, даже когда к базе нет коннектов.

06.09.2019    7624    0    2tvad    6    

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

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

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

31.08.2019    9875    2    YPermitin    7    

Путеводитель по истории релизов

WEB v8 1cv8.cf Абонемент ($m)

Отчет по истории выпуска релизов и анализа информации по обновлениям.

5 стартмани

13.08.2019    11725    10    YPermitin    18    

Проставление большого количества галочек в активном окне винды Промо

Практика программирования Сервисные утилиты Инструментарий разработчика Россия Бесплатно (free)

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

07.11.2010    30482    0    Boris-Leleko    9    

Просмотр и анализ структуры базы данных (отчет на СКД)

Инструментарий разработчика v8 v8::СКД 1cv8.cf Абонемент ($m)

Отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.

5 стартмани

24.07.2019    18608    157    YPermitin    27    

О Unit-тестах замолвите слово.Часть 1

Тестирование и исправление Бесплатно (free)

Последнее время в контексте 1С очень много говорят о функциональном тестировании, BDD. А Unit-тестирование обходят стороной. Попробуем разобраться, для чего Unit-тестирование применять стоит.

22.07.2019    6426    0    Сурикат    27    

Обновление PostgreSQL на Windows

Администрирование данных 1С Бесплатно (free)

Указана последовательность действий при обновлении PostgreSQL на примере Windows. Также описаны некоторые особенности.

11.06.2019    13191    0    extalionos    10    

Виртуализация сервера 1С. Промо

Администрирование данных 1С Бесплатно (free)

Потратил 48 часов с перерывами на сон для создания виртуализированного сервера приложений 1С (host ubauntu14.04 guest Win2003 Server +SQL2008), теперь пора подбить итоги.

11.08.2014    69654    0    milkers    87    

Регистры накопления. Виртуальные таблицы. Часть №2: "Остатки" и "Остатки и обороты"

Практика программирования v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальными таблицами регистров накопления "Остатки" и "Остатки и обороты". Анализ SQL-запрос при работе с виртуальными таблицами

22.05.2019    20688    0    YPermitin    7    

Вопросы и ответы по лицензированию Microsoft Windows

Администрирование данных 1С Россия Бесплатно (free)

То, что интересует покупателей настольной операционной системы Microsoft.

20.05.2019    13487    0    accounting_cons    8    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Практика программирования Математика и алгоритмы Разработка v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    24461    0    YPermitin    7    

Просмотр и анализ журнала регистрации (отчет на СКД) Промо

Журнал регистрации v8::УФ v8::СКД 1cv8.cf Абонемент ($m)

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

5 стартмани

25.07.2013    61501    552    YPermitin    52    

Регулярная перезагрузка Сервера 1С с чисткой кэша

Администрирование данных 1С Стартеры 1С Бесплатно (free)

Батник для перезагрузки агента сервера 1С и чистки серверного кэша и сеансовых данных. Для регулярной перезагрузки вставляем в планировщик заданий Windows.

17.05.2019    11025    0    alfir70    19    

Способы проверки доступности TCP-портов

Администрирование данных 1С Бесплатно (free)

Как проверить доступен ли порт сервера? Или внешний веб-сервис? Приведены несколько способов для использования на Windows-системах.

12.05.2019    29604    0    -vito-    9    

PID процесса в сборщиках PerfMon

Администрирование данных 1С Россия Бесплатно (free)

Одним из неудобств при работе с PerfMon является то, что одноименные процессы именуются по-порядку, с добавлением суффикса #n к имени процесса. Описана настройка, позволяющая устранить этот недостаток.

06.04.2019    5274    0    -vito-    11    

Фрилансер 1С : настройка Easy Print WindowsServer 2008 R2 64 RU standard Промо

Администрирование данных 1С Бесплатно (free)

Для небольших предприятий, имеющих 10-15 компьютеров в локальной сети, содержать своего системного администратора накладно. Приходится отдельные вопросы администрирования решать самому. Запустить, активировать, установить лицензии, завести пользователей , настроить доступ к ресурсам для WindowsServer 2008 R2 64 оказалось несложно т.к. имею опыт работы с WinSer 2003. Да и в сообществе много толковых руководств и конкретных рекомендаций.

27.05.2013    71876    0    kompas-dm    25    

Введение в лицензирование ПО Microsoft

Администрирование данных 1С Россия Бесплатно (free)

Поговорим о принципах лицензирования программных продуктов Microsoft.

19.03.2019    20967    0    accounting_cons    37    

Вопросы и ответы по лицензированию Microsoft SQL Server

Администрирование данных 1С Россия Бесплатно (free)

Продолжение темы лицензирования серверных продуктов Microsoft.

26.02.2019    21727    0    accounting_cons    36    

Вопросы и ответы по лицензированию Microsoft Windows Server

Администрирование данных 1С Россия Бесплатно (free)

Все, что вы хотели знать о лицензировании Microsoft Windows Server.

13.02.2019    21674    0    accounting_cons    44    

Ускорение реструктуризации таблиц Промо

Инструментарий разработчика Администрирование данных 1С Тестирование и исправление Бесплатно (free)

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

12.09.2013    51228    0    OLEG4120    32    

Секционирование таблиц и индексов в мире 1С

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

Говорим о секционировании таблиц и индексов для баз 1С. Способы применения, подводные камни и прочее.

10.02.2019    17219    0    YPermitin    54    

Собираем бюджетный б/у сервер 1С:Предприятия 8.3 на 250+ Пользователей за 100 тыс. рублей

Администрирование данных 1С Бесплатно (free)

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

24.01.2019    17306    0    Indgo    137    

Установка Windows без загрузочной флэшки и загрузочного DVD-диска

Администрирование данных 1С Бесплатно (free)

Что делать, если нужно установить Windows на ПЭВМ со старой системной платой, а под рукой нет dvd-привода, а с флэшки загрузка невозможна или идет очень медленно.

09.01.2019    6748    0    independ    5    

Организация удаленного доступа к базам 1С с помощью Hamachi Промо

Администрирование данных 1С Бесплатно (free)

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

17.11.2012    64850    0    tvixeg    67    

Ректальное администрирование: Основы для практикующих системных АДминистраторов

Администрирование данных 1С Бесплатно (free)

Одной из самых популярных и зарекомендовавших себя методологий системного администрирования является так называемое ректальное. Редкий случай сопровождения и обслуживания информационных систем, инфраструктуры организации обходится без его использования. Зачастую без знания данной методологии сисадминам даже бывает сложно найти работу в сфере ИТ, потому что работодатели, особенно всякие аутсорсинговые ИТ фирмы, в основном отдают предпочтение классическим, зарекомендовавшим себя методикам, а не новомодным заграничным веяниям: практикам ITIL, нормальным ITSM и прочей ерунде.

22.12.2018    14688    0    Jokemas    25    

Исследование использования СУБД (MS SQL, PostgreSQL, Oracle, IBM DB2) с отраслевыми конфигурациями на платформе 1С:Предприятие

Администрирование данных 1С Россия Бесплатно (free)

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

20.12.2018    10397    0    Kochergov    14    

1С Батл: PostgreSQL 9,10 vs MS SQL 2016

Администрирование СУБД Бесплатно (free)

PostgreSQL не так давно появился на российском рынке, поэтому у многих специалистов появляются сомнения, насколько удобно с ним работать, учитывая специфику 1С. Антон Дорошкевич, руководитель IT-отдела и направления оптимизации 1С компании «ИнфоСофт» (г. Новосибирск), рассказал о своем опыте применения этой СУБД. Тема его доклада звучала провокационно: «1С-батл между MS SQL 2016 и PostgreSQL версии 9 и версии 10».

18.12.2018    47784    0    a.doroshkevich    153    

Резервное копирование-архивирование каталогов с помощью Python 3 Промо

Архивирование (backup) Россия Бесплатно (free)

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

26.04.2012    26640    0    aximo    8    

Как включить RemoteApp на Windows 10 Professional. Инструкция

Администрирование данных 1С Бесплатно (free)

Всем наверно знакомо, что Professional выпуск Windows позволяет использовать режим удаленного рабочего стола. Но мало кому известно, что есть возможность настроить и режим «RemoteApp» знакомый нам по серверным продуктам. То есть клиенту будет доставляться не весь рабочий стол, а лишь приложение, например, 1С.

16.12.2018    28901    0    Aleksey81    34    

Как в RDP избавиться от языковой раскладки и оставить только выбор языка

Администрирование данных 1С Бесплатно (free)

До чего же бывает трудно, когда в терминальной сессии работает выбор как языка ввода, так и языковой раскладки. Раздражает ведь??? Решение есть, и весьма простое!

14.12.2018    14991    0    Aleksey81    45    

Postgres Pro для 1С: что нового

Администрирование СУБД Бесплатно (free)

Postgres становится все популярнее, но специалисты 1С все равно немного побаиваются этой системы управления базами данных. Почему стоит решиться и попробовать эту СУБД – на конференции INFOSTART EVENT 2018 рассказал сооснователь и генеральный директор компании Postgres Professional Олег Бартунов.

10.12.2018    26111    0    user1068014    106