0. dmurk 266 11.06.19 17:00 Сейчас в теме

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

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

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
73. dmurk 266 13.06.19 16:06 Сейчас в теме
(71) Нигде не сказано. Начиналось на 8.3.4. Длилось 1,5 года. Закончилось на 8.3.11
Rustig; V_V_V; +2 Ответить
75. V_V_V 13.06.19 16:48 Сейчас в теме
(73)
Также не все знают, что конструкцию ЕСТЬNULL можно использовать прямо в секции условий вместо того, чтобы писать какие-то сложные параметрические условия.

8.3.12.1412 - ругается "Операция не разрешена в предложении..."
77. dmurk 266 13.06.19 17:18 Сейчас в теме
(75) Сложно вам ответить в ситуации когда вы не выкладываете пример. Например вы могли воспользоваться конструктором запроса, который имеет ошибку пересборки условий, или поместили операцию вместо секции ГДЕ в секцию ИМЕЮЩИЕ
82. V_V_V 13.06.19 18:04 Сейчас в теме
(77) Прошу прощения, работает. Само условие в секции ГДЕ неправильно формулировал.
78. Darklight 19 13.06.19 17:30 Сейчас в теме
Очень сложная статья (и видимо сложный доклад) для восприятия теми, кто не в теме хотя бы на 98% - информация очень интересна и порой шокирующая, но не то что совсем не разжёвана, но часто попросту совсем труднопонятна - автор мечется из стороны в сторону, говорит/пишет много слов - но сложить из них реальное представление обсуждаемых процессов и предлагаемых действий к оптимизации - почти нереально. Автор много говорит о том, что надо что-то там настраивать, но очень мало говорит о том, что же надо настраивать (не говоря уже о том – как настраивать). Я конечно понимаю, что доклад был и так не малый, и более детальное повествование туда не запихнуть, но реально - это статья раззадоривает аппетит, но конкретики даёт очень мало - а где хоть немного ясно о чём речь, то почти всегда отсутствуют обоснования и альтернативные рассуждения (а в деле оптимизации одна единственная точка зрения редко бывает верной для большинства случаев). В общем - статья хороша как понимание того, что известная тебе правда не всегда бывает истиной - но из этого не следует что полученная новая правда - тоже является истиной. Иди - и разбирайся с этим самостоятельно - разжёвывать тебе тут не обязаны! Ну, может новый доклад будет попонятнее (и более узкоспециализированный, не пытающийся охватить сразу всё) Интересно, но очень тяжело это всё воспринимать, даже человеку «в теме».
Rustig; dmurk; +2 Ответить
80. dmurk 266 13.06.19 17:49 Сейчас в теме
(78) Задавайте вопросы, с удовольствием разжуём
120. Rustig 1172 28.06.19 07:53 Сейчас в теме
(78) какой-нибудь мастер-класс напрашивается
86. Zlohobbit 159 14.06.19 09:20 Сейчас в теме
Добрый день!
Относительно
...
А когда вы делаете «Выбрать()», результат запроса попадает на диск. Получается, что если вы из запроса хотите выбрать 4 строчки, то кластер 1С сначала запишет весь результат где-нибудь у себя на медленный диск, а потом эти 4 строчки начинает открывать TCP-соединениями и отдавать вашему клиенту
...
Это отчасти правда, только в единственном случае:
Если используется 32-битная версия платформы, и размер результата запроса превосходит размер имеющейся памяти, то данные будут записаны на диск, а затем считаны оттуда в процессе вызовов Выборка.Следующий().
Лучше не делать таких утверждения, так как это потом переносится из "уст в уста"!
Источник:
https://its.1c.ru/db/v8std/content/725/hdoc/_top/%D1%80%D0%B5%D0%B7%D1%83%D­0%BB%D1%8C%D1%82%D0%B0%D1%82%20%D0%B7%D0%B0%D0%BF%D1%80%D0%B­E%D1%81%D0%B0%20%D0%BD%D0%B0%20%D0%B4%D0%B8%D1%81%D0%BA
Rustig; kote; +2 Ответить
90. dmurk 266 14.06.19 12:14 Сейчас в теме
(86) Источник недостоверный. Протестировано на толстом клиенте с разрешенными управляемыми формами, версия 8.3.11, 64 битный клиент, 64-битный кластер.
92. Zlohobbit 159 15.06.19 18:39 Сейчас в теме
(90)
Только что проверил procmon'ом на версии 8.3.14.1630 (https://releases.1c.ru/version_files?nick=Platform83&ver=8.3.14.1630).
Как замерял:
- настроил ТЖ (чтобы убедиться, что платформа пишет файлы);
- создал обработку которая выбирает на сервере и обходит записи (Выборка.Следующий()) в цикле;
- открыл procmon на сервере;
- сделал exclude лишних событий, include WriteFile. Фильтр по рабочему процессу;
- что локально, что на другой машине выполнял запрос.

В итоге рабочий процесс кроме ТЖ ничего не писал.
Вопрос, каким образом вы производили замеры? Каким образом заметили такое поведение?
93. dmurk 266 16.06.19 16:10 Сейчас в теме
(92) В том-то и дело, что контролировал через Procmon, а сейчас не могу добиться повторения тогдашней ситуации. Платформа не менялась с мая 2018-го. Видимо, данное поведение зависит от загруженности сервера.
95. fredly_nightly 19.06.19 08:38 Сейчас в теме
Интересно, как раз недавно читал статью по поводу формулы в поле запроса. Аж зарегистрировался, интересно стало. https://infostart.ru/public/1075458/
Выходит СКД может некорректно на такие реагировать?
96. dmurk 266 19.06.19 14:25 Сейчас в теме
(95) Не только СКД может некорректно реагировать. Также замечена неправильная работа встроенного конструктора запросов при обработке булевских выражений в секции ИМЕЮЩИЕ

в приведенном автором примере, для того чтобы исключить ошибку СКД, лучше использовать конструкцию
ГДЕ "" В (Валюты.Наименование, Валюты.Код)
99. wingdog 25.06.19 09:28 Сейчас в теме
Здравствуйте.
хотелось бы уточнить несколько нюансов:
1. откуда информация об обмен между процессорами через PCI-E шину? там 2-3 "линии" UPI (ранее QPI) с пропускной способностью 9,6GT\s на линию. не могли бы вы указать источник вашей информации?
2. что вы имели ввиду, говоря про то, что Xeon не умеет применять NUMA? хотелось бы тогда понять как работают 2-4-8S конфигурации и увидеть какую-то документацию, подтверждающую ваше мнение по этому вопросу.
3. о каких лицензиях на таблицы или файлы данных SQL идёт речь? можно ли увидеть документацию по этому вопросу?
спасибо
100. dmurk 266 26.06.19 14:33 Сейчас в теме
1. Согласен, ошибся
2. Имелся ввиду массовый негативный опыт использования, как, например, здесь https://software.intel.com/en-us/forums/intel-moderncode-for-parallel-architectures/topic/379378
3. Данная информация получена опытным путем. После вашего вопроса найдено краткое упоминание в справке по настройке CPU/IO affinity mask для MSSQL - https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/affinity-mask-server-configuration-option?view=sql-server-2017
Licensing Issues
Dynamic affinity is tightly constrained by CPU licensing. SQL Server does not allow any configuration of affinity mask options that violates the licensing policy.
101. wingdog 26.06.19 17:26 Сейчас в теме
2. никакого "массового негативного опыта" нет - иначе гипервизоры бы не работали так как надо, да и множество других приложений испытывали проблемы. линк, который вы привели, описывает возможную проблему с системной платой или BIOS,а не процессорами Xeon.
3. вы опытным путём получили ограничения по таблицам или файлам данных БД SQL от системы лицензирования????
это что-то невероятное.
CPU Affinity не имеет никакого отношения к таблицам и файлам данных.

я очень прошу вас изменить трактовки (а лучше вообще убрать то, что совсем не соответствует действительности и не подтверждается где-либо ещё, в т.ч. и вами) некоторых абзацев вашей статьи.
102. dmurk 266 26.06.19 17:56 Сейчас в теме
(101) Без проблем. Сейчас это конспект выступления. Есть конкретные предложения? По изменению трактовок?
Насчет пункта (3) - это не подлежит изменению, это результат 1,5 месяца анализа поведения.
103. wingdog 26.06.19 18:29 Сейчас в теме
(102)
давайте остановимся на пункте 3, так как по первым двум у нас, как мне показалось, есть понимание некоторой не точности (или ошибочности) формулировок.

итак, есть результаты анализа поведения, которые однозначно можно трактовать как ограничения на размеры таблиц и\или файлов данных MS SQL 2017 в зависимости от используемой редакции продукта, я верно изложил?
где-то можно ознакомиться с этими результатами, так как, если вдруг они окажутся правильными - это повод для разбирательств с MS, причём очень серьёзных.
Было бы очень хорошо, если бы эти результаты были в кейсе (с номером) в саппорте MS, и был бы результат кейса.
104. dmurk 266 26.06.19 22:04 Сейчас в теме
(103) Нет, не верно, видимо прочитав доклад вы упустили общий смысл настроек MS SQL для 1С.

В бесплатной редакции MS SQL 2017 (Developer Edition) наблюдается следующее поведение: запросы к таблицам СУБД 1С не выполняются параллельно при любых настройках, запросы к временным таблицам, размещаемым в tempdb выполняются параллельно при назначении количества файлов в PRIMARY GROUP идентично настройке опции maxdop, что и послужило основанием для покупки пакета лицензий MS SQL 2017 на 32 ядра.

Платный вариант MS SQL выполняет запросы параллельно ровно в пределах оплаченного количества лицензий, увеличение количества ядер до 64-х не приводит к параллельному выполнению планов запросов более чем на 32-х CPU.

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

На этом тикет по вопросу (3) я также закрываю.
105. wingdog 26.06.19 22:31 Сейчас в теме
(104)
Developer Edition бесплатна только для разработки, а не для использования в продуктивной среде. не вводите людей в заблуждение.
MAPDOX и прочие параметры не имеют отношения к вопросу о лицензировании.
процитию вас:
"Что дает «размножение» tempdb? Дело в том, что tempdb – это единственная таблица в MS SQL, на которую не распространяются условия лицензирования. Поэтому даже если вы используете Developer Edition, tempdb у вас сможет параллельно работать с 8 файлами. Но с вашими базами данных tempdb будет работать в один поток."
и повторю свой вопрос:
какие тут лицензионные условия? (tempdb - не таблица, раз уж на то пошло).

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

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

закрывать вопросы, или не закрывать - решать, конечно же, вам. но если, вдруг, на вашем выступлении найдутся люди типа меня - вам придётся что-то отвечать, кроме каких-то тайных "анализов поведения".
106. dmurk 266 26.06.19 22:46 Сейчас в теме
(105)

- не mapdox а maxdop, не вводите людей в заблуждение
- лицензионная модель MS SQL "по ядрам" задействует счетчики лицензий на:
а) обработку данных в памяти MSSQL
б) чтение/запись данных между CPU и файлом клиентской СУБД
- одновременно с файлом работает не более одного CPU
- т.к. данные одновременно обрабатываются в памяти и пишутся на диск, то минимальное количество задействованных лицензий - 2
- в докладе ни слова про расход лицензий на таблицы СУБД
- вы видимо не знакомы с термином "Временная таблица"?

Что конкретно вам пояснить для устранения недопониманий?
107. dmurk 266 26.06.19 22:49 Сейчас в теме
(105) А также на Developer Edition сделано огромное количество статей и докладов о том, как MS SQL сливает Постгресу. Поэтому факт есть факт, все крутят 1С на Developer'е, а потом делают круглые глаза
108. dmurk 266 26.06.19 23:03 Сейчас в теме
(105) Licensing Issues
Dynamic affinity is tightly constrained by CPU licensing. SQL Server does not allow any configuration of affinity mask options that violates the licensing policy.

перевожу специально для вас заявление от Майкрософт:
ЛИЦЕНЗИОННЫЕ ОГРАНИЧЕНИЯ
Динамическая маска соответствия жёстко ограничена лицензированием CPU. SQL Server запрещает любую конфигурацию флагов маски соответствия, которая будет нарушать лицензионные условия.

разжёвываю:
- При попытке руками выставить количество флажков использования процессоров суммарно на расчетных и на IO назначениях ядер больше, чем в вашем лицензионном пакете, приводит к сообщению об ошибке.
- Динамическое назначение флагов маски соответствия выполняется, если не ошибаюсь, при запуске MS SQL и не меняется до рестарта, количество флагов в динамической маске соответствия ТАКЖЕ не может превышать количество реальных лицензий.
- Developer Edition не содержит реальных лицензий поэтому клиентские СУБД крутятся на лицензии 1 CPU + 1 I/O.
- Схему лицензирования CAL не проверял, но судя по заявлению от Майков, вопрос подлежит исследованию, возможно отсутствие дополнительных процессорных лицензий при наличии любого количества пользователей
- частично жёсткие ограничения лицензирования в Developer Edition можно обходить, перенося расчетную часть во временные таблицы 1С

выводы:
- Судя по массовой нужной и не нужной миграции разработчиков типовых 1С из регистров накопления во временные таблицы, они все поголовно сидят на Developer, нагрузочные тесты крутят на Developer, и пребывают в святой уверенности что так быстрее потому как ВТ, а не потому что у них нет лицензий
- Мы будем продолжать наблюдать тесты сливов MS SQL Postgres'у в специальных условиях тестирования, ибо даже до вас достучаться у меня пока не получается
AlexandrSmith; +1 Ответить
111. sergathome 27.06.19 17:19 Сейчас в теме
(108) Не поленился - сходил на девоп (2017DE), подёргал аффинити маск - сколько хочешь выставляй, все грузятся. Ни о каком ограничении в 1 ядро и речи нет. Вообще у вас странные понятия о лицензировании, там как минимум, 2 стратегии - стандарт и энтерпрайз, про энтерпрайз не скажу, а стандарт не описывается формулой 1-ядро = 1-лицензия, там сложнее всё...
вывод делать не буду, ага, почитал с интересом
112. dmurk 266 27.06.19 17:37 Сейчас в теме
(111) Давайте договоримся вернуться к этому вопросу через неделю. Я постараюсь на выходных разгрузить рабочий сервер и провести документирование различий между 2017DE и 2017EE. Так как исходные данные не включались в доклад чтобы не утомлять широкую аудиторию, то выложу в комментах
acanta; sergathome; +2 Ответить
132. dmurk 266 07.07.19 13:09 Сейчас в теме
(111) И вы оказались абсолютно правы, Developer ведет себя идентично. Прикладываю скриншоты тестирования, Enterprise даже оказался несколько медленнее, видимо из-за количества баз, которые на нем крутятся
Прикрепленные файлы:
acanta; sergathome; +2 Ответить
110. dmurk 266 27.06.19 15:27 Сейчас в теме
Спасибо всем поддержавшим мой доклад в первом туре голосования Event 2019, в связи с низким интересом к теме доклада, выступление отменяю. Всем успехов!

тема доклада:
"SQL для 1С: пишем правильно, красиво, сложно"

важность использования NULL полей;
использование таблицы значений без создания временной таблицы;
раздвигаем источник данных по вертикали;
алгоритмы:
- массовое левое соединение
- гашение партий запросом
- распределение стоимости с построчным округлением
- управляемый расчет итогов в таблицах с иерархией справочников
приемы анализа и оптимизации сложных запросов;
наложение блокировок запросами;
моментальные транзакции движений.
Rustig; acanta; +2 Ответить
121. Rustig 1172 28.06.19 08:11 Сейчас в теме
(110) что значит "Доклад принят"? зачем отменять выступление ? на ИС поток информации сменяется ежечасно... можно пропустить что-то интересное и полезное... вы например начали выступать в 2013, я про вас узнал 28.06.2019 - подписался на ваши публикации... понимаете , о чем я ?
я к тому что интерес к докладам есть...
124. triviumfan 10 28.06.19 11:12 Сейчас в теме
(121) Конечно, есть. Я хотел проголосовать, но почему-то не могу. Нету ссылки. Наверное, Дмитрий отменил и она исчезла.
125. dmurk 266 29.06.19 08:56 Сейчас в теме
(121) Спасибо, доклад действительно принят. Информация поступила с задержкой в сутки.
134. YPermitin 3268 26.07.19 15:37 Сейчас в теме
(0) Дмитрий, Ваш доклад считаю одним из лучших на конференции, все построено логично, информативно и интересно.

Жаль, что концовка оказалось такой ужатой из-за тайминга. Очень интересно было бы до конца послушать :)

[Не знаю почему, но сообщение прикрепилось в эту ветку]
126. dmurk 266 29.06.19 08:58 Сейчас в теме
Спасибо, ссылка для голосования убрана, так как доклад принят, готовлюсь.
131. Fox-trot 92 01.07.19 09:22 Сейчас в теме
Видимо, не все знают, что SQL в качестве полей умеет использовать результаты вычисления условий. Мне кажется, что это же условие гораздо понятнее записывать так, как показано на слайде.

я продолжил бы так: "Тем более, что 1С сам за вас это сделает"
133. Балабас 164 26.07.19 11:30 Сейчас в теме
Подскажите, где можно почитать про "множественную генерацию процессов для каждого соединения".
135. YPermitin 3268 26.07.19 15:38 Сейчас в теме
(0) (дублирую сообщение)

Дмитрий, Ваш доклад считаю одним из лучших на конференции, все построено логично, информативно и интересно.

Жаль, что концовка оказалось такой ужатой из-за тайминга. Очень интересно было бы до конца послушать :)
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Тюмень
зарплата от 65 000 руб.
Полный день

Консультант 1С (Бухгалтерия)
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Консультант 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день