Я запускаю пользовательский процессор в наборе строк, который, похоже, не работает параллельно. Базовый текстовый файл объемом ~ 1 ГБ сначала считывается в таблицу, которая разбита на разделы с помощью циклического перебора. «Извлечение» выполняется на 200 вершинах, но затем (в узле «Агрегат») обработка [которая выполняет различные сложные вычисления] происходит только на 2 вершинах, хотя параметр параллелизма намного выше этого. Есть ли специальный намек, который нужно использовать, чтобы заставить компилятор использовать больше вершин? Есть ли функция или свойство, которые необходимо переопределить, чтобы установить параллелизм и на этом этапе?
Контроль распараллеливания
Ответы (1)
Извините за задержку с ответом. Но это время отпуска :).
Приятно видеть, что фаза извлечения полностью уменьшена.
Не видя скрипт или сгенерированный план, немного сложно сказать, почему вы видите только 2 вершины в некоторых местах. Есть несколько причин, почему это может быть так:
- у вас недостаточно данных для увеличения масштаба.
- вашей агрегации требуется больше данных, и поэтому план имеет меньший параллелизм.
- ваша операция по своей сути менее параллельна.
- Оценка кардинальности данных оптимизатора отключена и выбирает недостаточный параллелизм. У нас есть некоторая способность намекать, но я скорее сначала увижу задание.
Обратите внимание, что пользовательские процессоры часто блокируют оптимизатор от проталкивания оптимизаций в сценарий (например, помогает использование параметра ТОЛЬКО ДЛЯ ЧТЕНИЯ) и могут отбрасывать оценки кардинальности.
Если вы пришлете мне сценарий, график вакансий и ссылку на вакансию в mrys в Microsoft, мы с командой изучим ее на следующей неделе после окончания праздников.
person
Michael Rys
schedule
30.12.2015
Я заметил, что оставил этот вопрос без ответа, поэтому позвольте мне закрыть цикл, чтобы сообщить сообществу о решении. Поскольку компилятор не видит, что делает пользовательский процессор, его сложнее распараллелить, и это должно быть вашим последним средством. Я привнес то, что делал пользовательский процессор, во встроенные инструкции u-sql С# настолько, насколько это возможно, и увидел заметную разницу. Спасибо, Майкл!
- person chi; 04.03.2016
Рад слышать! И если вы можете избежать использования пользовательских процессоров, переместив код в пользовательские функции, вы обычно получаете лучшую производительность и масштабируемость.
- person Michael Rys; 04.03.2016