powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Совпадение порядка вызова с порядком исполнения на MSSQL.
20 сообщений из 20, страница 1 из 1
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967500
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня интересует вопрос по проведению следующего эксперимента(сейчас его возможности провести нет).
Есть 1000-а потоков, соединений с MSSQL. Эти соединения открыты на самом SQL сервере. На каждом из них готова уже конструкция и ждет команды execute. В управляющем потоке разыгрывается случайным образом очередь вызова, от 1 до 1000. Эта очередь записывается в лог(ЛогОчереди). Затем управляющий поток запускает все потоки на исполнение, предварительно запустив профайлер(трассы, расширенные события). Интересует в каких случаях очередь из лога будет расходиться с очередью вызова в профайлере, как часто это будет происходить?
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967519
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
Затем управляющий поток запускает все потоки на исполнение, предварительно запустив профайлер(трассы, расширенные события)
Имеется в виду - будет запускать в порядке очереди, но в параллельных потоках, а не одну команду после завершения другой?

МуМу
Интересует в каких случаях очередь из лога будет расходиться с очередью вызова в профайлере, как часто это будет происходить?
Думаю, формулу вам никто не скажет :-)

Очевидно, это будет зависеть от времени между запуском команд.
Например, управляющий поток запускает команды последовательно по одной в час.
Или, управляющий поток запускает команды последовательно по одной в такт процессора. (а 1000 потоков работают на 1000 ядрах)
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967740
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу,

С чего бы она расходилась? А вот выполнения потоков могут расходиться с очередностью их постановки.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967782
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
С чего бы она расходилась? А вот выполнения потоков могут расходиться с очередностью их постановки.
У МуМу вопрос, соответствует ли очерёдность выполнения, очерёдности постановки команд на выполнение, как я понял.

В сиквеле есть некоторое количество потоков исполнения, и оно не равно количеству коннектов.
Соответственно, эти потоки будут "разбирать" в свои очереди проступающие в коннектах команды, а потом их последовательно исполнять (параллельно с остальными потоками).
Значит, если интенсивность запуска команд настолько высока, что очереди на исполнение у потоков непустые, порядок исполнения команд не будет соответствовать порядку запуска исполнения в коннектах.
Но заранее рассчитать это, вывести "формулу", как я представляю, невозможно.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967800
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Владислав Колосов
С чего бы она расходилась? А вот выполнения потоков могут расходиться с очередностью их постановки.
У МуМу вопрос, соответствует ли очерёдность выполнения, очерёдности постановки команд на выполнение, как я понял.

В сиквеле есть некоторое количество потоков исполнения, и оно не равно количеству коннектов.
Соответственно, эти потоки будут "разбирать" в свои очереди проступающие в коннектах команды, а потом их последовательно исполнять (параллельно с остальными потоками).
Значит, если интенсивность запуска команд настолько высока, что очереди на исполнение у потоков непустые, порядок исполнения команд не будет соответствовать порядку запуска исполнения в коннектах.
Но заранее рассчитать это, вывести "формулу", как я представляю, невозможно.


На сервере могут быть ещё пулы ресурсов, которые могут оказывать влияние на возникающую последовательность.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967860
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я знаком поверхностно с работой Win, по-моему работа по переключения задач определяется системой, которая при равных приоритетах потоков вносит элемент случайного выбора, если не хватает ядер. Но вот стартовать обработка врят ли может в порядке, отличном от порядка поступления запросов. Сомневаюсь, что SQL сервер откладывает начало обработки подключения.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967885
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

У SQL Server свой собственный, cooperative scheduler, в отличие от виндового, который preemptive. Там другая логика, например если поток получает квант процессора, но работать не готов потому что ждет чего-то еще, то он сразу отдает CPU. Винду такие вещи не волнуют, насколько я помню, она поровну все делит.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967890
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
У SQL Server свой собственный, cooperative scheduler, в отличие от виндового, который preemptive. Там другая логика, например если поток получает квант процессора, но работать не готов потому что ждет чего-то еще, то он сразу отдает CPU. Винду такие вещи не волнуют, насколько я помню, она поровну все делит.
Очень даже волнуют -- поток, который висит на объекте синхронизации, сразу депланируется и пока объект не засигналится, поток шедулиться больше не будет. И, самое интересное, именно этот механизм использует MSSQL для управления своими потоками, ибо другого как бы нет.

По сабжу - в сложных мультипоточных системах говорить о каком-то порядке выполнения чего-то в разных потоках без какой-либо синхронизации, направленной на обеспечение порядка выполнения, смысла не имеет. Если кажется, что вот же он, порядок имеется, то, во-первых, или где-то происходит неявная синхронизация (на io, например), а, во-вторых, в других условиях этот порядок запросто может стать другим.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39967893
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
На сервере могут быть ещё пулы ресурсов, которые могут оказывать влияние на возникающую последовательность.

Владислав Колосов
по-моему работа по переключения задач определяется системой, которая при равных приоритетах потоков вносит элемент случайного выбора, если не хватает ядер.
Да, а это всё уже определяет последовательность выполнения, это как бы следует из того, что потоков исполнения в сиквеле несколько.
Ennor Tiegael
Винду такие вещи не волнуют, насколько я помню, она поровну все делит.
Поровну и одновременно, очевидно, разделить нельзя, потому что количество ядер небольшое, плюс, кроме ядер, есть другие ресурсы, обращения к которым не может происходить одновременно, без очереди.

Т.е., концептуально, вытесняющая многозадачность Windows превращается в кооперативную (хотя и контролируемую системой, а не приложением), из за постановки потоков в очередь на доступ к ресурсам.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968007
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну собственно интерес исключительно академический. Ну например есть копия одной и той же базы на разных серверах. Запускаем в одном потоке последовательность операций на изменение. Затем такую же последовательность на другом сервере. По факту применения одинаковых последовательностей - видим одинаковые базы данных. Потом берем все то же самое делаем в разных потоках. И тут... к сожалению базы могут в конце выполнения последовательностей стать разными по составу. Даже если у нас есть последовательность вызовов на первом сервере, на втором мы не можем в многопоточной среде обеспечить такой же порядок.(ну либо задержки большие что неприемлимо) Если был бы какой нибудь аналог блокировки-мьютекса. Типа execute в одном потоке выполнил но обязательно ждешь его подтверждения выполнения на сервере и только после этого выполнение execute следующего потока приступает и так далее. А сейчас пульнул вникуда и далее как сервер забрал и запустил он уже решает.(зависит от нагрузки, распределения по нума узлам и т.п.)
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968028
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была мысль, давным давно на подобных механизмах кластер распределенный построить. Но увы , из за подобных архитектурных ограничений это технически не возможно. (На Постгри подобную возможность с учетом исходников не проверял). В результате обмен данными между серверами было решено реализовать через получение данных с помощью триггеров только в онлайн(после каждого батча на изменение), ну и последовательность выполнения реализуется через блокировочные механизмы центрального сервера. Впрочем я уже совсем скоро статейку на эту тему опубликую.(проверяю некоторые старые предположения, мало ли вдруг они не верные)
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968073
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
Если был бы какой нибудь аналог блокировки-мьютекса. Типа execute в одном потоке выполнил но обязательно ждешь его подтверждения выполнения на сервере и только после этого выполнение execute следующего потока приступает и так далее.
Так это и будет однопоточное выполнение, что для вас неприемлемо по скорости.

Тут же концептуальная проблема отсутствия гарантированного порядка выполнения в многопоточной системе, в параллельных вычислениях, а не проблема отсутствия какой то функции в АПИ.

Так что поставленная техническая задача не решается никак.
А бизнес задача решается определением зависимостей, и синхронизацией (механизмом гарантированного порядка выполнения) зависимых команд.
Но определить зависимости в общем случае, для произвольной БД и произвольных команд, невозможно.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968093
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я к тому, что старт запроса - вещь вполне контролируемая, а вот его выполнение и окончание - уже нет. В процессе работы они могут обгонять, отставать. СкАчки, одним словом.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968182
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз гарантия старта не вполне контролируемая вещь. Например запуская с клиента вызов, из за долгого пинга у вас нет гарантий о времени его выполнения на сервере, и даже выполняя его на сервере в нагруженной многопоточной среде у вас также нет гарантий порядка выполнения. Впрочем проведите эксперимент и убедитесь.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968186
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя пожалуй я придумал способ обеспечить порядок выполнения. Через проверку в бесконечном цикле уже понятно(определение номера последовательности и ожидания), еще подумаю как экономичней сделать через блокировки(пока не придумывается).
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968315
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МуМу
Хотя пожалуй я придумал способ обеспечить порядок выполнения.

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

Т.е. если удастся запускать на 2х серверах команды в нужной последовательности, в результате получатся 2 разные БД. (конечно, это зависит от содержания команд, может, и не получатся)
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968550
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё точнее - обеспечить независимость результата выполнения запросов от их последовательности.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968559
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А ещё точнее - обеспечить независимость результата выполнения запросов от их последовательности.
Это применимо к сферической системе в вакууме, у реально эксплуатируемых систем такого свойства нет.

PS Вообще, в большинстве реальных систем не удастся повторить БД даже при одинаковой последовательности вызовов, но у МуМу это не так, иначе бы не возник этот топик.
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39968580
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg

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

тут даже если снятую трассу накатывать, всё равно никто не подпишеться в идентичности
...
Рейтинг: 0 / 0
Совпадение порядка вызова с порядком исполнения на MSSQL.
    #39970084
Фотография МуМу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пару мысленных экспериментов и экспериментов показали что решить задачу многопоточного воспроизведения один в один практически не возможно. Ну то есть в одном потоке все тривиально, но в многопоточной реализации даже если нет стайтментов и операции все примитивные типа I,U,D по первичному ключу, все равно дерево блокировок может отличаться. Время старта нельзя гарантировать не то что время завершения.
Тем не менее с некоторыми ограничениями задача решается. То есть можно переигрывать и откатывать. То есть можно проверять статус и в особо "узких" многопоточных запросах при проигрывании можно расставлять маркеры блокировки. А в некоторых случаях просто признавать определенных частях "трассы" что воспроизведение не приводит к повторяемым результатам.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Совпадение порядка вызова с порядком исполнения на MSSQL.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]