powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
23 сообщений из 23, страница 1 из 1
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39842996
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги.
Возник вопрос:
Есть сайт. На сайт могут коннектиться разные пользователи.
Весь сайт работает на условно одной базе (несколько баз, но на одном сервере).
Хочу профилировщиком посмотреть,, при каких действиях на сайте в какие базы идут данные.
Но тут выяснилось, что сайт работает с базой через штук 50 различных сервисов.

В рамках разных сервисов, разные пользователи сайта обращаются к базе с одного и того же пользователя (NTUserName, LoginName).
Но для каждого сервиса используется свой @@SPID.

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

Кто сталкивался с подобной проблемой - можете подсказать, как в таком случае поступать (переделать всю сервисную архитектуру вне рамок моих компетенций/возможностей, интересует именно как можно обойти проблему).
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39842999
Что мешает под каждый сервис свой логин сделать? И все логины включить потом в группу, чтобы права у всех можно было удобно менять.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843049
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey SyrovatchenkoЧто мешает под каждый сервис свой логин сделать? И все логины включить потом в группу, чтобы права у всех можно было удобно менять.
Что значит под каждый сервис свой логин?
Под 50 сервисов - 50 логинов - так это отладку через профилировщик никак не упростит.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843072
Есть такая классная штука в классе ConnectionStringBuilder - ApplicationName. Если леньки под каждый сервис заводить свой логин и иметь порядок, то ок. Задавая ApplicationName для каждого сервиса можно будет отслеживать от кого запрос.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843079
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>поток данных очень плотный - по 50 событий в секунду и больше
Профайлер это уже не модно. XEvents ваш друг.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843113
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257>поток данных очень плотный - по 50 событий в секунду и больше
Профайлер это уже не модно. XEvents ваш друг.
Спасибо за подсказку, не слышал раньше про такое.
Почитал - очень полезная тема!
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843132
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Бердышев,

Вы не правильно делаете. При таком потоке данные профилировщика необходимо сохранять в файл локально или в локальную базу, иначе завалите сервисы. Затем уже просматривать в оффлайне.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843142
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Профайлер это уже не модно. XEvents ваш друг.XEvents вместо профайлера не решит проблему.
ПРроблема же в идентификации.
Как понять, какие события относятся к нажатию кнопки в проге разработчиком, если прогу мучают ещё 1000 пользователей, а никакой идентификации запроса нет?
ИМХО, нужно как то предусматривать логирование в архитектуре, в сервисах, притом в режиме с логированием можно использовать другой App Name, тогда разработчики могут просто накладывать фильтр, ведь разработчиков не так много, как пользователей. Если это вообще возможно, конечно, ведь в сервисах могут быть и асинхронные процессы.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843148
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgSERG1257Профайлер это уже не модно. XEvents ваш друг.XEvents вместо профайлера не решит проблему.
ПРроблема же в идентификации.
Как понять, какие события относятся к нажатию кнопки в проге разработчиком, если прогу мучают ещё 1000 пользователей, а никакой идентификации запроса нет?
ИМХО, нужно как то предусматривать логирование в архитектуре, в сервисах, притом в режиме с логированием можно использовать другой App Name, тогда разработчики могут просто накладывать фильтр, ведь разработчиков не так много, как пользователей. Если это вообще возможно, конечно, ведь в сервисах могут быть и асинхронные процессы.
Вы правы насчёт того, что проблему это не решило...
Думал, можно в контекст какой-нибудь произвольный дополнительный параметр передавать - но ничего подобного в XEvents нет.

Переписывать же 50 сервисов ради меня одного никто тоже не будет.
Пока думаю что делать, скорее всего придётся просто забить...
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843155
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр БердышевДумал, можно в контекст какой-нибудь произвольный дополнительный параметр передавать - но ничего подобного в XEvents нет.Так вы же ничего не можете сделать в принципе.

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

Так что 100% без кореркции архитектуры/сервисов эту проблему не решить.

Просто сейчас подумайте на эту тему, а когда/если проблемой озаботятся ваши коллеги, предложите решение, и что бы оно было достаточно комплексным, удобным, а не "заткнуть дыру".
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843157
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр БердышевВы правы насчёт того, что проблему это не решило...
Думал, можно в контекст какой-нибудь произвольный дополнительный параметр передавать - но ничего подобного в XEvents нет.Единственно, если как то косвенно (типа, прога передаёт какой нибудь GUID обрабатываемого документа, а вы фильтруете запроссы по тексту, по вхождению этого GUID)
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843182
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр БердышевВ итоге в профилировщике нельзя нормально отфильтровать данные ни по пользователю, ни по SPIDМожно фильтровать по Hostname + ClientProcessID. Если в ваших сервисах Hostname не используется каким-то экзотическим образом.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843184
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg.
Так что 100% без кореркции архитектуры/сервисов эту проблему не решить.Вопрос, а есть ли проблема? Пока что были озвучены только хотелки - хочу смотреть что сервисы в базе делают при действия пользователя на сайте. Практическое применение то какое?
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843201
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindalexeyvgТак что 100% без кореркции архитектуры/сервисов эту проблему не решить.Вопрос, а есть ли проблема? Пока что были озвучены только хотелки - хочу смотреть что сервисы в базе делают при действия пользователя на сайте. Практическое применение то какое?Какое практическое применение отладки, трассировки, профайлинга?
Ну, это удобно для разработки.
И полезно для эксплуатации (для выявления каких то проблем, что бы инженер видел не окно "что то пошло не так", а всю цепочку выполнения.
invmМожно фильтровать по Hostname + ClientProcessID. Если в ваших сервисах Hostname не используется каким-то экзотическим образом.Это же невозможно сделать, не меняя сервисы.
Если сервис, например, сохраняет в очередь (в памяти) какие то запросы от клиентов, а потом в других потоках выполняет эти запросы, в нескольких коннектах к сиквелу, то с чего он будет передавать какой то там "Hostname + ClientProcessID"?
Нужно будет поменять сервисы, что бы они это делали. Допустим, передавали бы некий "идентификатор бизнес-запроса" насквозь, каким то образом привязывали бы его ко всем действиям, обращениям к внешним сервисам и т.д. В частности, при коннекте к сиквелу писали бы его в тот же Hostname, AppName и т.п. Или идентификатор сессии клиента.

И это ещё мы не берём случаи, когда, при обработки такой очереди, сервис не делает оптимизацию по клиентам, например, делает общий запрос на несколько запросов клиента (к примеру, если нескролько клиентов ищут что то в близких геообластях, то можно сделать общий запрос по общей геообласти; в общем, что то типа оптимизации запросов в дисковых очередях)
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843223
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имо под "сервисом" надо понимать метод.
Без исходников веб-приложения не узнаешь - какой метод какие процедуры выполняет. Раз ве что можно собрать данные в отдельный файл и медитировать над старт-стопами и SPID. Но это мало что даст для понимания реализации веб-методов.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843304
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЭто же невозможно сделать, не меняя сервисы.
Если сервис, например, сохраняет в очередь (в памяти) какие то запросы от клиентов, а потом в других потоках выполняет эти запросы, в нескольких коннектах к сиквелу, то с чего он будет передавать какой то там "Hostname + ClientProcessID"? https://docs.microsoft.com/en-us/sql/relational-databases/sql-trace/sql-trace?view=sql-server-2017 ClientProcessID 9 The ID assigned by the host computer to the process where the client application is running. This data column is populated if the client process ID is provided by the client.То же самое, что и host_process_id в sys.dm_exec_sessions.
Причем тут вами перечисленное?
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843397
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm https://docs.microsoft.com/en-us/sql/relational-databases/sql-trace/sql-trace?view=sql-server-2017 ClientProcessID 9 The ID assigned by the host computer to the process where the client application is running. This data column is populated if the client process ID is provided by the client.То же самое, что и host_process_id в sys.dm_exec_sessions.
Причем тут вами перечисленное?В вашей цитате речь о ClientProcessID от сиквельного клиента, а сиквельный клиент - сервисы - топикстартеру недоступен. Ему доступен только клиент этих сервисов, то есть клиент клиента.

Как я понимаю, есть множество компов в разных компьютерных сетях, на них запущено множество сервисов.
Эти сервисы открывают множество коннектов к разным SQL серверам.
Приложение дёргает какой то сервис (или несколько), возможно даже как веб-сервис, не передавая туда, разумеется, никаких ClientProcessID (то есть что то оно передаёт, но это, во первых, не ClientProcessID, а какой то другой идентификатор, во вторых, сервис на него забивает, и никак больше не использует).
Далее сервисы что то делают, возможно, для работы с данными дёргая процедуры на сиквеле. Они это делают из своих коннектов, передавая сиквелу свой ClientProcessID (всегда одинаковый для одного сервиса)

И вот задача - при клике в приложении понять, какие вызовы на сиквеле относятся к этому клику?

Вот, к примеру, мы тут на форуме постим посты, как мне оттрейсить все действия на сиквеле, которые были вызваны нажатием "Опубликовать" именно с моего компа, из моего окошка браузера? Не внося изменений в код сервера sql.ru? Какой ClientProcessID передаётся из моего браузера в коннект к сиквелу?
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843431
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgВ вашей цитате речь о ClientProcessID от сиквельного клиента, а сиквельный клиент - сервисы - топикстартеру недоступен. Ему доступен только клиент этих сервисов, то есть клиент клиента.ТС хочет фильтровать результаты в профайлере ничего не меняя в инфраструктуре. Я предложил вариант.
Идентификация сервиса по Host+ClientProcessID уже проблема ТС.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843439
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmalexeyvgВ вашей цитате речь о ClientProcessID от сиквельного клиента, а сиквельный клиент - сервисы - топикстартеру недоступен. Ему доступен только клиент этих сервисов, то есть клиент клиента.ТС хочет фильтровать результаты в профайлере ничего не меняя в инфраструктуре. Я предложил вариант.
Идентификация сервиса по Host+ClientProcessID уже проблема ТС.
Мдя...
Александр Бердышевпри каких действиях на сайте в какие базы идут данные.
Только гильотина... только логирование на бекенде... какой к лешему профайлер?!
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843490
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserТолько гильотина... только логирование на бекенде... какой к лешему профайлер?Да, наверное, это лучше всего.
Но варианты имеются, в том числе для фильтрации в профайлере.
Так что, повторю, нужно проработать разные механизмы, к тому времени, когда начальство созреет.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843528
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
+1

Был в похожей ситуации как ТС, когда-то, работал на проекте, где была такая архитектура:
Клиент -> Application Server (SOAP Web Services) -> SQL Server.
Все заморочки с правами, пользователями, группами были реализованы на Application Server. Грубо говоря, на веб-сервисе вызывался метод CheckUser, потом методы DoSomeBusinessAction.

Все, что касается любых идентификаторов клиента DoSomeBusinessAction в соединении с SQL Server - никак не могло сказать, кто из клиентов сделал этот вызов (если только для DoSomeBusinessAction не требовалось имя пользователя). Нормально задействовать Profiler в такой истории не получится, также как xEvents, сиквелу просто неоткуда брать эти данные, если клиент их не передает, точнее передает одно и то же.

Но у меня другая задача была, чем у ТС. Мне Profiler был нужен для выявления проблем производительности, так что без разницы, кто вызывает долгий запрос, я его и так могу по длительности отловить. Но когда нужно было все-таки идентифицировать, я либо:
- Включал логирование на веб-сервере (у нас был IIS), там то ли надо было что-то установить, то ли просто включалось, уже не помню - но для разработчика - усилий ноль. Все пишется в XML файл, ты потом просто смотришь, видишь все методы, все значения параметров, время и т.д. Минус - сильно возрастает нагрузка, нужно включать краткосрочно, для отладки.
- Либо, разбирал вручную парные вызовы CheckUser и DoSomeBusinessAction. Если приложение не нагружено (у нас так и было), с определенной вероятностью, можно сказать, что два последовательных вызова относятся к одному и тому же веб-методу, который определяет бизнес-логику.

В любом случае без манипуляций на промежуточном слое между клиентом и SQL Server не обойтись.
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843530
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehow,
автор- Включал логирование на веб-сервере (у нас был IIS), там то ли надо было что-то установить, то ли просто включалось, уже не помню - но для разработчика - усилий ноль. Все пишется в XML файл, ты потом просто смотришь, видишь все методы, все значения параметров, время и т.д. Минус - сильно возрастает нагрузка, нужно включать краткосрочно, для отладки.
Да включается трассировка iis вполне в 2 клика. Главное не надолго, объёмы на нагруженных сервисах будут приличные, потом трасса вполне красиво открывается и разгребается
...
Рейтинг: 0 / 0
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
    #39843536
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Ну значит примерно правильно помню, спасибо за уточнение.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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