Некоторые принципы оптимизации запросов 1С (+SQL)

0. ture 568 17.11.16 13:08 Сейчас в теме
Разработка нового функционала часто связана с созданием новых таблиц в базе и написанием запросов. Собственно, размышляя о запросах, мы и формируем в голове содержание таблиц, индексы и количество таблиц и индексов. Заранее можно уверенно рассуждать о том, какая нужна архитектура, если задачу удалось понять. На этом этапе важно привлекать свой опыт. Что же делать, если его нет? Как рассуждать о запросах и формате хранения?

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 5922 18.11.16 09:38 Сейчас в теме
"Поиск в индексе возможен, если указаны все входящие в него поля".
Точнее все таки будет "Поиск в индексе возможен по набору полей, если они расположены в начале структуры индекса".
sorb; brr; RealEscander; Dem1urg; bulpi; CyberCerber; корум; ture; +8 Ответить
2. Gilev.Vyacheslav 1852 18.11.16 13:28 Сейчас в теме
(0) а можно просто запустить консоль http://infostart.ru/public/556589/ которая сделает весь этот анализ более точно и глубоко
3. Gilev.Vyacheslav 1852 18.11.16 13:30 Сейчас в теме
А если не верите мне, то сходите https://technet.microsoft.com/ru-ru/library/jj128029.aspx

не поверил, сходил по ссылке, не поленился, а там написано:
Не забудьте об периодическом создании отчетов — эта операция может отсутствовать в ежедневной нагрузке. Хотя используемы для отчетности индексы и используются нечасто, их наличие может быть критически необходимым
4. Gilev.Vyacheslav 1852 18.11.16 13:31 Сейчас в теме
- В маленьких табличках нечего оптимизировать, т.к. SQL сервер в любом случае будет просматривать всю табличку, а 1С не забывает делать один кластеризованный индекс.

привет блокировки, сегодня вы все будете ждать маленькую табличку, потому что там скан и нам посоветовали ее не трогать
myjob1c; user596640_Atarasyuk; корум; tormozit; +4 Ответить
5. Gilev.Vyacheslav 1852 18.11.16 13:34 Сейчас в теме
то складывайте во временную таблицу

отличный доклад был на инфостарте про проблемы с временными таблицами на пострессе, можно переосмыслить подход к написанию запросов )
7. starik-2005 2180 18.11.16 15:08 Сейчас в теме
(5) Gilev.Vyacheslav, на "пост стрессе" или "на постгресе"? Как бы вроде одна буква, но столько смыслов разных...

На курсах подготовки к эксперту помимо многого всего (обычно нехорошего) о гилевах, рассказывают еще о том, почему 1С в плане оптимизации запросов учит выносить соединения с подзапросами во временные таблицы - типа 1С-неги тупые и иначе им сложно что-то объяснить. Но 1С-неги помимо соединений с подзапросами как-то автоматически выносят во временные таблицы и все остальное - т.е. даже такую примитивную вещь не в силах освоить. В итоге у чуть более продвинутых товарищей так много интересной работы.
8. Gilev.Vyacheslav 1852 18.11.16 19:55 Сейчас в теме
(7) starik-2005,
На курсах подготовки к эксперту помимо многого всего (обычно нехорошего) о гилевах

тем не менее факты:
фирма 1С купила разработку дизайна 8ки у Егора Гилева https://habrahabr.ru/company/turbomilk/blog/74806/
Евгений Гилев известен обучением
фирма 1С не раз обращалась ко мне (Вячеславу Гилеву) за услугами ЗА ДЕНЬГИ
по производительности у моей команды отзывов по производительности больше чем у подразделения 1С:ЦКТП со всеми франчайзами вместе взятыми

что там себе позволяют отдельные представители 1С на тренингах пусть останется на их совести

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

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


Новиков; +1 1 Ответить
9. starik-2005 2180 18.11.16 23:06 Сейчас в теме
(8) да мне, собственно, и так ясно, что кто-то что-то у кого-то покупает. Отрицательно высказывался некий Бурмистров - может ему завидно - не знаю.

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

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

Ну а экзамены - это в принципе отстой. Всегда можно за сто попыток примелькаться экзаменаторам, и они пожалеют потраченных тобой денег и дадут заветную корочку.
10. Gilev.Vyacheslav 1852 19.11.16 14:47 Сейчас в теме
(9) starik-2005,
Отрицательно высказывался некий Бурмистров
очень сильно сомневаюсь -
он не работает в 1С, не ведет курсы 1С:Эксперт

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


наша консоль запросов http://infostart.ru/public/556589/ при вставке во временную таблицу оценивает разумность объема строк и рациональность такого приема и любой программист может проверить свой код
все кто проходит курсы на сайте изучают нашу консоль и учатся ее использовать

что за касается мотивации писать хорошо я уже в (6) ответил, так что это Вы не уловили

Один товарищ - эксперт по скулу - на какой-то международной конфе по скулу сказал, что есть в России программа такая - 1С. Так вот она такое (Т-А-А-А-КОЕ!!!) количество временных таблиц генерит в своих запросах, что он такого нигде и никогда не видел. И что, это программа плохая или 1С-неги?
видать эксперт не до конца эксперт )

Или вендор из-за тупизны 1С-негов кроме как научить их оптимизировать запросы через временные таблицы ничему не могут?

Платформа тоже генерирует временные таблицы не спрашивая программиста 1С. И тут скорее можно говорить что надо те кто судят - делают это поверхностно. Не стоит обсуждать эту тему абстрактно без конкретных примеров.
Даже ms sql server может в плане запроса сделать Table Spool, который просматривает входную таблицу и помещает копию каждой строки в скрытую буферную таблицу, которая находится в базе данных tempdb и существует только в течение времени жизни запроса. Скуль у Вас тоже плохой получается!

Если нужно, создайте отдельную ветку форуме. Не надо автору публикации забивать ветку совсем сторонним.

13. jaroslav.h 19.11.16 22:31 Сейчас в теме
(10) Gilev.Vyacheslav, как ты меня уже достал своей рекламой во многих комментах на разных публикациях, угомонись уже наконец-то
artfa; alest; user596640_Atarasyuk; Новиков; kuzyara; Solovyeff; корум; ture; bpc222; JohnyDeath; starik-2005; +11 Ответить
38. ineshyk 25.11.16 23:34 Сейчас в теме
(10) интересно, как Ваша консоль предугадает план запроса без статистики и решит, оптимальный запрос или нет.


17. Silenser 525 21.11.16 11:23 Сейчас в теме
(8) Gilev.Vyacheslav, В конце прошлого года проходил курс подготовки к эксперту, ни одного плохого слова в ваш адрес не было. Уточню, в рамках официально части курса о ваших инструментах вообще молчали (что понятно, им нужно ЦУП по 80к продавать), а в неофициальной части отзывались нейтрально, как об еще одном инструменте, который не лучше и не хуже, все больше зависит от головы того, кто инструмент применяет.
Gilev.Vyacheslav; +1 Ответить
18. Gilev.Vyacheslav 1852 21.11.16 13:30 Сейчас в теме
(17) Silenser, да, у меня тоже возникли сомнения в достоверности утверждений товарища Sergey Andreev
(11) ture, посты (3) и (4) не по теме? а ну тогда конечно
21. ture 568 21.11.16 13:48 Сейчас в теме
(18) Gilev.Vyacheslav, указанные посты не грамотные. Я не могу закрыть Вам рот, но рекомендую воздержаться от дальнейших высказываний, т.к. они не делают Вам чести как специалисту.
22. Gilev.Vyacheslav 1852 21.11.16 14:08 Сейчас в теме
(21) ture,
указанные посты не грамотные.
а можете раскрыть техническую часть, например для поста 4?
в 1С очень много таблиц с небольшим количеством строк (<1000)
Вы учите:
- В маленьких табличках нечего оптимизировать, т.к. SQL сервер в любом случае будет просматривать всю табличку, а 1С не забывает делать один кластеризованный индекс.

Если взять ЗУП, там практически все таблички "маленькие". Но нам приходится очень часто бороться с не параллельностью расчета ЗП для нескольких организаций.
Тут может быть несколько вариантов: Вы правы, что
(18) Gilev.Vyacheslav, указанные посты не грамотные

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

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

24. ture 568 21.11.16 15:12 Сейчас в теме
(22) Gilev.Vyacheslav, Если я Вас задел, прошу прощение. Давайте больше не будем так рассуждать.
26. Gilev.Vyacheslav 1852 21.11.16 17:16 Сейчас в теме
(24) ture, т.е. сказать по делу нечего
25. starik-2005 2180 21.11.16 15:22 Сейчас в теме
(17) времена меняются, да и профессионала по тех.вопросам в прошлом году не было - сдавали сразу эксперта. Теперь все иначе: http://1c.ru/rus/partners/training/uc1/course.jsp?id=436

А по поводу продуктов от Гилева, то мне лично вполне по душе тес, остальными не пользуюсь - необходимости нет. Простота теста Гилева и возможность посмотреть табличку результатов, сравнив ее с другими тестируемыми конфигурациями, вполне помогает оценить уровень в цепочке производительности одного потока (сервер 1С - сервер СУБД). Но вот какие-то выводы сделать, куда копать - увы и ах.
27. ture 568 21.11.16 17:27 Сейчас в теме
(25) starik-2005, я вот сейчас вникаю в межпроцессорное взаимодействие (Windows API), пытаясь разобраться на основе аналогий с Posix. И вдруг такой "трёп" не простительный. Если б все программисты вели себя так словно ЧСВ важнее всего остального, то мы не увидели бы ни одной операционной системы. Нет, я знаю, что программист 1С - это халява при больших деньгах, по все же я не предполагал, что кто-то всерьёз считает, что общается с отбросами.

Мне его консоль бесполезна во всех смыслах. Объясню почему в двух словах:
1) найдя запрос в статистике SQL, я долго соображаю откуда он мог прилететь (родной 1с-ный или кто-то умный, что-то прикинул в студии)
2) видя запрос 1С, мне нужно переписать его "голыми руками" на t-sql, чтоб увидеть план (здесь меня спасают только view-хи и предположения о том, как это сделает 1С)
3) в реали, я даже не имею права включать трассировки на SQL или как-то еще тормозить продакшен
4) конечно мне не нужны советы о том, что я сделал не так в запросе, т.к. мне нужен план запроса вместо них

Мне, разумеется, приятно читать замечания, т.к. каждое из них раскрывает моё невежество или напоминает, что не бывает мелочей (хоть и хочется говорить об обратном с замыленными-то глазами). Особенно ценно, когда человек разобрался в причинах и упоминает их.

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

Когда 1С искажает понятия и ограничивает интерфейс, вдруг находится кто-то, кто выделяется своим знанием и волшебным умением. Он просто знает детали об изначальном API, которые собрал своим трудом. И лучшее - это поделиться этим, а не набивать себе цену и баловать своё ЧСВ. Любой серьёзный проект - это дело рук не одного человека, и когда находится один крутой и замкнутый на себе, то это просто лошадь, для тяжелой работы, а не игрок для сложного проекта.


34. starik-2005 2180 25.11.16 17:00 Сейчас в теме
(27) а к чему столь много строк-то (пафосу)? К тому, что я сказал о том, что 1С-неги (как и прочие) могут оказаться не на столько умными, чтобы понять, что все во временные таблицы тащить не стоит? И всего-то?
36. ture 568 25.11.16 18:59 Сейчас в теме
(34) не знаю, сам подумай, а я пока скорректирую своё восприятие.
37. starik-2005 2180 25.11.16 22:47 Сейчас в теме
(36) ну довай, корректируй. Токмо поменьше химии )))
39. корум 284 28.11.16 10:10 Сейчас в теме
28. BorovikSV 1365 22.11.16 22:22 Сейчас в теме
(5) Gilev.Vyacheslav,
отличный доклад был на инфостарте про проблемы с временными таблицами на пострессе, можно переосмыслить подход к написанию запросов
. О каком докладе речь?
29. Gilev.Vyacheslav 1852 23.11.16 16:26 Сейчас в теме
(28) BorovikSV, http://event.infostart.ru/2016/video/ 03 МАЛЫЙ ЗАЛ МАСТЕР КЛАСС РЕШЕНИЕ ТИПОВЫХ ПРОБЛЕМ ПРИ ПЕРЕХОДЕ НА POSTGRESQL СМОЛКИН ГРИГОРИЙ
30. ture 568 23.11.16 18:44 Сейчас в теме
(29) в памятку:
Есть такая кнопка CapsLock. Если она нажата, то все буквы в верхнем регистре вводятся. Слова написанные таким образом означают крик и воспринимаются в цивилизованном обществе как невежество. На профессиональных форумах не принято писать в верхнем регистре.
32. корум 284 25.11.16 09:10 Сейчас в теме
(30)
копипаст рУками перебивать никто не заморачивается.
Вопросы к составителю расписания мероприятий, походу.
33. Gilev.Vyacheslav 1852 25.11.16 12:39 Сейчас в теме
(32) можно объяснить всё, но не всем )
когда чел создает свою "виртуальную реальность" и она ему "удобна", то она его защищает его психику от фрустраций, но она же его и "держит"
не надо его "шевелить палкой" - захочет, сам вылезет из "домика"
35. starik-2005 2180 25.11.16 17:00 Сейчас в теме
(33)
можно объяснить всё, но не всем )
ну вот и я о том же. Токмо я к тому, что если важен результат, то некоторые (1С, например) понимая, что не всем можно что-то объяснить достоверно, объясняет так, чтобы дошло до большинства. А до большинства может дойти только что-то простое, например вынести все подзапросы во временные таблицы.
6. Gilev.Vyacheslav 1852 18.11.16 13:40 Сейчас в теме
не проходит и недели как на инфостарте люди пытаются расковырять тайные техники оптимизации, наполнить себя эзотерическими сведениями
а проблема банальна - люди при написании кода не получают денег за то чтобы он работал быстро, только за то чтобы функционал успеть к дедлайну

напишите статью чтобы платить шеф начал за оптимизацию и оно "как попрет"... )
sorb; tormozit; jurix; sevushka; Irwin; bydk; dark_wolf; Gorus; Trancer64; klmop; GarfildOLD; baton_pk; Silenser; taurus__; sigmov; Dem1urg; Dach; Yashazz; bulpi; c1nil; корум; Aspirant; Designer1C; 1cWin; +24 Ответить
16. sigmov 21.11.16 10:36 Сейчас в теме
(6) Gilev.Vyacheslav,
Ну собственно в итоге платить приходиться (проходит оптимизация) или мириться с медленной работой.
Большинство в мире работает по PainDD (пока не заболит - фиг с ним, заболело - лечим)
Silenser; Gilev.Vyacheslav; +2 Ответить
11. ture 568 19.11.16 17:43 Сейчас в теме
Давайте ближе к теме публикации. Сколько можно себя нахваливать? и подкладывать ссылки на бесполезные поделки?
Мне было бы приятно обойтись без уличного базара. Я внимательно прочитал Ваши комментарии, но не нашел, что из этого достойно добавления к статье.
В этой публикации я себя не рекламирую. Идея написать статью у меня возникла после ознакомления с рядом подобных статей. Я захотел, с одной сторон, изложить все максимально сжатно и приближено к 1с-практике, а, с другой, оставить поле деятельности, для самостоятельного размышления. Ряд приведенных запросов вполне рабочий и используется мной на предприятии (где обслуживает нагруженную систему). Перечисленные мной принципы оптимизации тоже рабочие (ими я руководствуюсь, можно считать из заметками на полях).
Прошу в комментариях придерживаться теории СУБД, чтоб была общая платформа, для рассуждений или спора.
sorb; artfa; eskor; Solovyeff; JohnyDeath; +5 Ответить
12. fishca 1179 19.11.16 19:17 Сейчас в теме
тем не менее факты:
фирма 1С купила разработку дизайна 8ки у Егора Гилева https://habrahabr.ru/company/turbomilk/blog/74806/

уж лучше бы и не покупала
artfa; user610297_agsh; ture; wolfsoft; Solovyeff; +5 Ответить
14. starik-2005 2180 19.11.16 23:21 Сейчас в теме
Гыгы, Славу стало плющить)))

Был месяц назад на курсах подготовки к проф. и эксперту по тех. вопросам - вели Бурмистров и Филиппов (который книжку написал).

Да и вообще сообщения должны смысл нести,но у некотопых только реклама. Может не взлетел продукт и от такой вот невеселой жизни хочется рвать и метать икру? Бывает. И это пройдет.
MRAK; ЗС1; Dach; +3 3 Ответить
15. Dach 296 20.11.16 14:27 Сейчас в теме
Статья хорошая.

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

Кстати, вот еще один пример весьма очевидной оптимизации, о которой, к сожалению не только лишь все знают, точнее мало кто вообще )))

Если параметры в запрос передавать не в явном виде, а динамически формируя текст запроса - то вы заставляете оптимизатор запросов СУБД каждый раз строить новый план.

N-е количество запросов вида, текст которых собирается динамически:

ВЫБРАТЬ * ИЗ Документ.МойДокумент ГДЕ Документ.Реквизит В "%СтрокаМассиваОтбор%"
СтрокаМассиваОтбор = "(1,2,3)"


выполнится в разы медленнее, чем если написать
ВЫБРАТЬ * ИЗ Документ.МойДокумент ГДЕ Документ.Реквизит В (&МассивОтбор)


А по поводу В (&СписокОтбора) - тоже еще один пласт для ускорения. Порой, значительного прироста можно добиться, передав отбор в запрос, поместив его во временную таблицу и отсортировав, а также ЯВНО написать вместо "В (&СписокОтбора)" - "ВНУТРЕННЕЕ СОЕДИНЕНИЕ".


19. Yashazz 3331 21.11.16 13:32 Сейчас в теме
(15) Dach, да ладно. Это что, получается, что интерпретатор 1С вообще ни при чём, и собирая запрос конкатенацией с заменами (я уж молчу про новомодную объектную технику) я имею более медленное исполнение итогового запроса? Чё-то или я не понял, или вы странные вещи пишете. Вы о "динамическом формировании текста запроса" - где и в какой момент?
23. Dach 296 21.11.16 14:38 Сейчас в теме
(19) Yashazz, если на вход интерпретатора СУБД подать различные запросы, где отборы "написаны руками", вместо параметров запроса - для запроса, где отбор написан "вручную" - СУБД будет каждый раз анализировать и заново строить план, вместо того, чтобы использовать кэш. Я не про динамическую сборку целиком, а про параметры.
20. Gilev.Vyacheslav 1852 21.11.16 13:34 Сейчас в теме
(15) Dach, неоднократно обсуждалось на партнерском, фирма 1С считает что это "усложнение" может принести больше зла в неумелых руках
31. lustin 24.11.16 23:07 Сейчас в теме
увидел знакомое ```ws-msk-a1573``` и думаю где то я уже этот формат имени компьютера видел ;-)

(0) Жень - ссылка https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit

такие вещи как "Кто кого блокирует", спрашивают у Брента https://www.brentozar.com/askbrent/
ildarovich; +1 Ответить
40. dgolovanov 04.01.17 02:00 Сейчас в теме
Мальчики выросли, и пиписки нет? Что за клоунада в комментах.
Zhilyakovdr; ture; IgorS; +3 Ответить
Оставьте свое сообщение
Вопросы с вознаграждением