Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Был недавно на семинаре посвященному ЦОД-ам, облакам. Было много рекламы и т.п. Многие утверждали что некоторые ЦОД-ы предоставляют практически безграничные возможности по масштабируемости систем. Лишь один из участников обмолвился о том что для некоторых задач ограничивающим фактором является частота одного процессора.
Действительно пообщавшись с некоторыми участниками я сделал вывод что понимания в этом вопросе нет. Есть отдельные задачи(чаще регламентные) как правило работающие в одном потоке которые если изначально не написать "правильным" образом с использованием параллельных вычислений то серверные ресурсы эффективно использоваться не будут.
У меня возникает вопрос, никто не в курсе как там с планами Microsoft в этом направлении?
Разумеется можно сказать что существующего инструментария для подобных задач хватает. Можно самому открыть нужное количество сессий(потоков), реализовать между ними взаимодействие и т.п. К сожалению не, всегда это применимо.Например когда определенное действие необходимо сделать параллельно в рамках единой транзакции.
К тому же это неудобно.
Итак, у меня несколько вопросов. Кто нибудь сталкивался с подобными проблемами? Есть ли какие то сведения на эту тему от вендора?(если этот вопрос закрытый то могу повторить тему в MSSQL club)
1 апр 11, 11:31    [10455878]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
не очень понятно о какой параллельности в рамках одной транзакции вы говорите...
чем не устраивает параллельный план выполнения от оптимизатора DBEngine?
1 апр 11, 12:00    [10456098]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Не едиными планами выполнения живы:) Хотя в этом плане тоже есть над чем поработать.(насколько я знаю паралелятся только операции со scan)
К примеру есть обработка в которой в цикле выполняются определенные запросы. Выполняются они последовательно а я хочу что бы выполнялись они параллельно(в разных потоках) и допустим логика задачи это позволяет. Т.е. что бы сессия сама открывала связанные с ней дополнительные потоки. Что бы обмен осуществлялся через общую память, что бы выполнение происходило в рамках единой транзакции.
С точки зрения синтаксиса не так много операций нужно добавить.
1 апр 11, 12:12    [10456197]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
МуМу
У меня возникает вопрос, никто не в курсе как там с планами Microsoft в этом направлении?
Позиция такая - делать распаралеливание средствами Database Engine, а не давать программистам инструменты.

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

Для существующего T-SQL есть распаралеливание в запросе, ещё можно себе представить распаралеливание для батча (хотя о конкретных планах Microsoft в этом направлении мне ничего неизвестно), но трудно представить распаралеливание средствами Database Engine в случае многих батчей или для многих вызовов хранимых процедур.
МуМу
Итак, у меня несколько вопросов. Кто нибудь сталкивался с подобными проблемами? Есть ли какие то сведения на эту тему от вендора?(если этот вопрос закрытый то могу повторить тему в MSSQL club)
Нужно формулировать потребности и говорить об этом Microsoft-у

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

Дедушка
чем не устраивает параллельный план выполнения от оптимизатора DBEngine?
Это же пока возможно только для одного запроса :-(
1 апр 11, 12:16    [10456229]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
Glory
Member

Откуда:
Сообщений: 104760
МуМу
К примеру есть обработка в которой в цикле выполняются определенные запросы. Выполняются они последовательно а я хочу что бы выполнялись они параллельно(в разных потоках) и допустим логика задачи это позволяет. Т.е. что бы сессия сама открывала связанные с ней дополнительные потоки. Что бы обмен осуществлялся через общую память, что бы выполнение происходило в рамках единой транзакции.

А результаты клиенту как будут возвращаться ? В произвольном порядке ? Что делать с сайд-эффектом ?
1 апр 11, 12:16    [10456230]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Glory
А результаты клиенту как будут возвращаться ? В произвольном порядке ? Что делать с сайд-эффектом ?
Результаты в порядке их возникновения. Ну, конечно, вменяемый программист не будет выводить результаты в паралельных блоках, если это не надо для программы.

Сайд-эффекты нужно рассматривать конкретно.

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

Никто не говорит, что это сделать просто и это будет добавлено в очередном серрвич-паке :-) , но идея, по моему, хорошая.

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

Т.е. когда на сокете будет сотня ядер, а на сервере тысяча, то выйграет та СУБД, которая к этому будет готова.

Сейчас проблему загрузки пытаются решить, например, переносом логики работы с данными на сервер приложения и использования key-value СУБД

А распаралеливание потоков выполнения (а не только выполнения одного запроса) на урове сервера СУБД позволит оставить работу с данными на нём.
1 апр 11, 12:32    [10456352]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

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

Но это конечно несколько надуманный пример. Если интересно могу привести другие примеры, пофантазировать на тему того каким образом можно было бы все это реализовать.
Есть конечно задачи более актуальные. Мне кажется что в TSQL реализовать многопоточность гораздо проще чем в том же фортране. Потому как это язык СУБД ориентированные на данные. К тому же в MSSQL уже есть механизм блокировок.
1 апр 11, 12:46    [10456475]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Насчет результатов возвращаемых клиенту - здесь все как в классической теории параллельных вычислений. Есть задачи которые могут выполняться параллельно а есть задачи которые выполняются строго последовательно. Результат клиенту должен возвращать один поток. Другое дело что в TSQL можно ставить точки по которым система будет понимать какие операции можно выполнять параллельно а какие нет. Т.е. например параллельно выполняются три запроса заполняя данные в темповые таблицы, затем когда все три выполнились эти данные соединяются посредством четвертого запроса и уже этот результат выводится в виде рекордсета клиенту. Разумеется для решения данной задачи необходимо продумать систему интерфейсов взаимодействия. Будь это переменные или темповые таблицы.
1 апр 11, 12:52    [10456545]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Основная сейчас проблема это то что подобный код нельзя писать централизованно. Это ухудшает восприятие.(например джоб в котором N задач в каждой из которых я прописываю взаимодействие и т.п.) Второй момент для меня более важный. Нельзя осуществлять многопоточность в рамках одной транзакции- вот это уже никак не обойти.
1 апр 11, 12:56    [10456582]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
Glory
Member

Откуда:
Сообщений: 104760
МуМу
А второе что бы выполнились максимально параллельно.
Я могу конечно сам разбить их по сессиям. Но если бы можно было включить параллелизм(указать размер пула) и менеджер задач сам бы начал для каждого батча создавать новый поток и выполнять в нем новую конструкцию. Вы скажете блокировки, деадлоки в рамках многопоточности? Варианты есть, решаются в рамках стандартной парадигмы.

И чем это будет отличаться от пула коннектов в том же ADO с его асинхронным выполнением множества запросов ?
1 апр 11, 14:52    [10457306]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
Glory
Member

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

CLR, которая использует стандартный пул коннектов ?
1 апр 11, 14:53    [10457313]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
То Glory. Я же уже написал. Удобство написания, простота кода. То есть не хочет программист использовать использовать многопоточность - пускай пишет все по старинке. А если хочет то использует допустим расширенный синтаксис. Но я подозреваю что это текущий трэнд ну или таковым станет через 3-и года максимум.
Ну и чего не хватает из функционала - это выполнять все параллельно в единой транзакции.
Насчет использования распределённой транзакции уже по-моему как то обсуждали.
1 апр 11, 15:13    [10457500]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
То alexeyvg. Я пожалуй подготовлю несколько примеров о том как приходится выкручиваться сейчас и о том как можно было бы сделать. Предложения по синтаксису тоже подготовлю.
Мое мнение что время уже настало. Раньше как то не сильно ощущалось. А теперь когда к примеру на регламентной задаче у клиента на 32-ядерном серваке не используется и 7-и процентов ресурсов уже сильно задумываешься на эту тему. Даже не смотря на то что гипотеза минского толком не работает на большом количестве процессоров все равно ускорение для некоторых задач в разы очень и очень ценно.
1 апр 11, 15:20    [10457570]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Glory
И чем это будет отличаться от пула коннектов в том же ADO с его асинхронным выполнением множества запросов ?
Хочу пояснить.

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

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

Мне такой подход кажется неверным - СУБД и разрабатывали как раз для задач обработки данных.

Вот и хочется изменить работу с данными и с потоком управления на СУБД так, чтобы помочь серверу распаралелить обработку.

Ну и хочется всё это делать не из внешней программы, а на сервере. Клиент вызывает интерфейс (хранимую процедуру), сервер обрабатывает (эффективно, с распаралеливаниями), и возвращает результат. Без вынесения логики на сервер приложений.
1 апр 11, 16:01    [10457950]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
МуМу
То alexeyvg. Я пожалуй подготовлю несколько примеров о том как приходится выкручиваться сейчас и о том как можно было бы сделать. Предложения по синтаксису тоже подготовлю.
Мое мнение что время уже настало. Раньше как то не сильно ощущалось. А теперь когда к примеру на регламентной задаче у клиента на 32-ядерном серваке не используется и 7-и процентов ресурсов уже сильно задумываешься на эту тему. Даже не смотря на то что гипотеза минского толком не работает на большом количестве процессоров все равно ускорение для некоторых задач в разы очень и очень ценно.
Спасибо. Надо над этой темой работать!
1 апр 11, 16:02    [10457959]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
AlexCzech
Member

Откуда:
Сообщений: 729
МуМу
Не едиными планами выполнения живы:) Хотя в этом плане тоже есть над чем поработать.(насколько я знаю паралелятся только операции со scan)
К примеру есть обработка в которой в цикле выполняются определенные запросы. Выполняются они последовательно а я хочу что бы выполнялись они параллельно(в разных потоках) и допустим логика задачи это позволяет. Т.е. что бы сессия сама открывала связанные с ней дополнительные потоки. Что бы обмен осуществлялся через общую память, что бы выполнение происходило в рамках единой транзакции.
С точки зрения синтаксиса не так много операций нужно добавить.


Теоретически для распаллеливания SQL-задач создан Service Broker. Практически для каждой задачи надо смотреть, стОит ли огород городить, или стоимость реализации схемы распаллеливания будет дороже, чем выигрыш от ее использования
1 апр 11, 21:51    [10459809]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
AlexCzech
Теоретически для распаллеливания SQL-задач создан Service Broker. Практически для каждой задачи надо смотреть, стОит ли огород городить, или стоимость реализации схемы распаллеливания будет дороже, чем выигрыш от ее использования
Вот в этом и проблема - огород городить. Про обходные варианты понятно - можно Service Broker использовать, джобы, разработать свою систему транзакций...

Но это не будут использовать всегда и везде - слишком сложно.

Вот не зря придумывают всякие OpenMP и Параллельный С++ - это ответ на меняющийся мир :-)
1 апр 11, 22:52    [10460093]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Топик: рассматривание сферического коня в вакууме.

+
МуМу
К примеру есть обработка в которой в цикле выполняются определенные запросы.
Imperative half brain detected.

бла-бла-бла
PM flying in Clouds detected.
[CENSORED]
Ссори, возражения есть на все многие предложения. Но скорее всего будет мегасрач.
Да и в написанных словах может быть не то, что хотел передать их автор.

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

А чё никто не упомянул о Parallel Data Warehouse?
2 апр 11, 00:42    [10460454]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Начал по ссылке расписывать, к сожалению "реконнект". Извините но,не стану опять повторяться.Сразу скажу,мне не стыдно признаться в незнании чего нибудь. Тем не менее, обвинить кого нибудоь в "оффтопе" или "сферическом коне в вакуме" и кинуть просто ссылку затем- это как минимумм не вежливо! Потрудитесь ответить хотя бы на один вопрос из переписки, желательно насчет распаралелливания в транзакции. Я, извините меня ,практик. Мне не важны парадигмы - мне важен результат. Впрочем как всегда, после длительного разбирательства - все уйдет в архив:(
2 апр 11, 05:58    [10460670]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Mnior
Топик: рассматривание сферического коня в вакууме.
Это как?

Mnior
А чё никто не упомянул о Parallel Data Warehouse?
PDW к данной теме имеет отношение только по совпадению одного слова :-)
2 апр 11, 11:27    [10460820]     Ответить | Цитировать Сообщить модератору
 Re: Параллельные вычисления для TSQL.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
МуМу
Я, извините меня, практик. Мне не важны парадигмы - мне важен результат.
В том то и дело, мне видеться из выше написанного ровно всё наоборот.

alexeyvg
Mnior
Топик: рассматривание сферического коня в вакууме.
Это как?
Очень просто, много абстрактных слов, мало конкретики.
МуМу говорит "я практик", б.м. так давайте говорить о конкретной задаче, или точнее наборе конкретных задач.
Если их обсуждение уйдёт в срач (в разные подходы и т.п.) значит "проблема надуманная", если нет то тогда "я плохо понял тему/вы плохо описали".
При надуманной В абстрактной проблеме можно уйти в схоластику и множественный подмен понятий.
С ваших же слов:
alexeyvg
Нужно формулировать потребности и говорить об этом Microsoft-у


alexeyvg
PDW к данной теме имеет отношение только по совпадению одного слова :-)
Хорошо, хорошо. Допустим. Но я продолжаю не фтыкать, в чём суть топика?
В чем отличие напрмиер от того же PDW?

МуМу
Потрудитесь ответить хотя бы на один вопрос из переписки, желательно насчет распаралелливания в транзакции.
  • Зачем всё валить в одну транзакцию?! Транзакциомания? Это всеголишь механизм из тысячи.
    Только не надо говорить что так проще думать. Если разработчик знает и использует мало механизмов - он убог, настоящий профессионал обязать знать всё и обязан постоянно использовать всё. Тогда ему будет легко использовать любой механизм. И только тогда он объективен.
    MS улучши микроскоп, т.к. молотком я пользоваться не умею

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


  • Ваши параллельные С++ это уже реализовано как раз в параллелизации запросов. Это именно оно и ничего другого. Если считаете механизм убогим скажите MS где и в чём конкретно. Это многого-процессорная масштабируемость.
    PDW это многого-серверная масштабируемость. Если задачу можно порезать вдоль, режьте и получайте профит. (Могу ошибаться в PDW, верю абстрактным словам и как Я их понимаю, ещё не щупал )

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

    И вообще, не должно быть вычислительных проблем ч.в., БД это не аппликейшн сервер. Мы обязаны всегда уметь распределять задачу во времени и пространстве. Нефиг всё подсчитывать в последний момент/в самом начале, никаких пиковых нагрузок.

    Кароче, сферического коня канкретную задачу в студию.

    PS: Никого ни в чём не обвиняю, это такой стиль повествования, в воздух, всем и никому конкретно. О сраче предупреждал.
  • 2 апр 11, 17:49    [10461531]     Ответить | Цитировать Сообщить модератору
     Re: Параллельные вычисления для TSQL.  [new]
    МуМу
    Member

    Откуда:
    Сообщений: 1134
    То Mnior. Ну например задача ускорения репликатора(самописного). Есть большая входящая очередь состоящая из простейших конструкций(insert,update,delite). Что бы система отставала минимально от рабочей необходимо применение изменений на подписчике максимально ускорить. В один поток это происходит значительно медленне чем в N потоков. Отсутсвие возможности распараллелить эти процессы в рамках единой транзакции не позволяет это сделать эффективно.
    Ну для начала так.
    2 апр 11, 18:23    [10461564]     Ответить | Цитировать Сообщить модератору
     Re: Параллельные вычисления для TSQL.  [new]
    МуМу
    Member

    Откуда:
    Сообщений: 1134
    Только предлагаю, не нужно обвинять сразу в отсутствии опыта, знаний и т.п.:) Попытайтесь вникнуть сначала в проблематику прежде чем обвинять. Эта задача уже решена, только вот решение могло бы быть проще если бы такая возможность была.
    2 апр 11, 18:28    [10461567]     Ответить | Цитировать Сообщить модератору
     Re: Параллельные вычисления для TSQL.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6723
    Забыл предупредить. Обсуждать буду задачу, а не как оптимально реализовать одно решение.
    Не могу говорить о решении, совершенно не понимая почему именно оно было выбрано в решении задачи.

    МуМу
    Ну например задача ускорения репликатора(самописного).
    штошто?
    2 апр 11, 18:38    [10461578]     Ответить | Цитировать Сообщить модератору
     Re: Параллельные вычисления для TSQL.  [new]
    МуМу
    Member

    Откуда:
    Сообщений: 1134
    Создана система репликации, некий аналог транзакционной репликации от микрософт. Цель задачи - ускорить процесс обмена.
    Есть таблица, очередь в которой хранится большое количество записей. Эти записи означают Insert,Update,Delite по первичному ключу определенной таблицы(таких таблиц много). Есть программка которая берет из этой таблицы записи, и на основании их начинает применять изменения. К каждой такой записи соответсвует номер транзакции. Важно что бы изменения применялись в рамках транзакции. Попадаются иногда очень большие транзакции, и хочется ускорить процесс их применения на подписчике. Решение уже готово, но есть недостатки обуслвленные сабжем.
    2 апр 11, 18:54    [10461608]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить