Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги. Возник вопрос: Есть сайт. На сайт могут коннектиться разные пользователи. Весь сайт работает на условно одной базе (несколько баз, но на одном сервере). Хочу профилировщиком посмотреть,, при каких действиях на сайте в какие базы идут данные. Но тут выяснилось, что сайт работает с базой через штук 50 различных сервисов. В рамках разных сервисов, разные пользователи сайта обращаются к базе с одного и того же пользователя (NTUserName, LoginName). Но для каждого сервиса используется свой @@SPID. В итоге в профилировщике нельзя нормально отфильтровать данные ни по пользователю, ни по SPID, а поток данных очень плотный - по 50 событий в секунду и больше - очень геморройно ловить нужные запросы. Кто сталкивался с подобной проблемой - можете подсказать, как в таком случае поступать (переделать всю сервисную архитектуру вне рамок моих компетенций/возможностей, интересует именно как можно обойти проблему). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 14:21 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Что мешает под каждый сервис свой логин сделать? И все логины включить потом в группу, чтобы права у всех можно было удобно менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 14:31 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Sergey SyrovatchenkoЧто мешает под каждый сервис свой логин сделать? И все логины включить потом в группу, чтобы права у всех можно было удобно менять. Что значит под каждый сервис свой логин? Под 50 сервисов - 50 логинов - так это отладку через профилировщик никак не упростит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 15:52 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Есть такая классная штука в классе ConnectionStringBuilder - ApplicationName. Если леньки под каждый сервис заводить свой логин и иметь порядок, то ок. Задавая ApplicationName для каждого сервиса можно будет отслеживать от кого запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 16:25 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
>поток данных очень плотный - по 50 событий в секунду и больше Профайлер это уже не модно. XEvents ваш друг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 16:36 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
SERG1257>поток данных очень плотный - по 50 событий в секунду и больше Профайлер это уже не модно. XEvents ваш друг. Спасибо за подсказку, не слышал раньше про такое. Почитал - очень полезная тема! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 17:47 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Александр Бердышев, Вы не правильно делаете. При таком потоке данные профилировщика необходимо сохранять в файл локально или в локальную базу, иначе завалите сервисы. Затем уже просматривать в оффлайне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 18:42 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
SERG1257Профайлер это уже не модно. XEvents ваш друг.XEvents вместо профайлера не решит проблему. ПРроблема же в идентификации. Как понять, какие события относятся к нажатию кнопки в проге разработчиком, если прогу мучают ещё 1000 пользователей, а никакой идентификации запроса нет? ИМХО, нужно как то предусматривать логирование в архитектуре, в сервисах, притом в режиме с логированием можно использовать другой App Name, тогда разработчики могут просто накладывать фильтр, ведь разработчиков не так много, как пользователей. Если это вообще возможно, конечно, ведь в сервисах могут быть и асинхронные процессы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 19:24 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
alexeyvgSERG1257Профайлер это уже не модно. XEvents ваш друг.XEvents вместо профайлера не решит проблему. ПРроблема же в идентификации. Как понять, какие события относятся к нажатию кнопки в проге разработчиком, если прогу мучают ещё 1000 пользователей, а никакой идентификации запроса нет? ИМХО, нужно как то предусматривать логирование в архитектуре, в сервисах, притом в режиме с логированием можно использовать другой App Name, тогда разработчики могут просто накладывать фильтр, ведь разработчиков не так много, как пользователей. Если это вообще возможно, конечно, ведь в сервисах могут быть и асинхронные процессы. Вы правы насчёт того, что проблему это не решило... Думал, можно в контекст какой-нибудь произвольный дополнительный параметр передавать - но ничего подобного в XEvents нет. Переписывать же 50 сервисов ради меня одного никто тоже не будет. Пока думаю что делать, скорее всего придётся просто забить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 19:40 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Александр БердышевДумал, можно в контекст какой-нибудь произвольный дополнительный параметр передавать - но ничего подобного в XEvents нет.Так вы же ничего не можете сделать в принципе. Сервисы делают коннекты, выполняют запросы, независимо от того, что вы там наменяли в вашем приложении. Они же на то и сервисы, что бы быть независимыми. Так что 100% без кореркции архитектуры/сервисов эту проблему не решить. Просто сейчас подумайте на эту тему, а когда/если проблемой озаботятся ваши коллеги, предложите решение, и что бы оно было достаточно комплексным, удобным, а не "заткнуть дыру". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 20:10 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Александр БердышевВы правы насчёт того, что проблему это не решило... Думал, можно в контекст какой-нибудь произвольный дополнительный параметр передавать - но ничего подобного в XEvents нет.Единственно, если как то косвенно (типа, прога передаёт какой нибудь GUID обрабатываемого документа, а вы фильтруете запроссы по тексту, по вхождению этого GUID) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 20:12 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
Александр БердышевВ итоге в профилировщике нельзя нормально отфильтровать данные ни по пользователю, ни по SPIDМожно фильтровать по Hostname + ClientProcessID. Если в ваших сервисах Hostname не используется каким-то экзотическим образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 21:55 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
alexeyvg. Так что 100% без кореркции архитектуры/сервисов эту проблему не решить.Вопрос, а есть ли проблема? Пока что были озвучены только хотелки - хочу смотреть что сервисы в базе делают при действия пользователя на сайте. Практическое применение то какое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 22:06 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
MindalexeyvgТак что 100% без кореркции архитектуры/сервисов эту проблему не решить.Вопрос, а есть ли проблема? Пока что были озвучены только хотелки - хочу смотреть что сервисы в базе делают при действия пользователя на сайте. Практическое применение то какое?Какое практическое применение отладки, трассировки, профайлинга? Ну, это удобно для разработки. И полезно для эксплуатации (для выявления каких то проблем, что бы инженер видел не окно "что то пошло не так", а всю цепочку выполнения. invmМожно фильтровать по Hostname + ClientProcessID. Если в ваших сервисах Hostname не используется каким-то экзотическим образом.Это же невозможно сделать, не меняя сервисы. Если сервис, например, сохраняет в очередь (в памяти) какие то запросы от клиентов, а потом в других потоках выполняет эти запросы, в нескольких коннектах к сиквелу, то с чего он будет передавать какой то там "Hostname + ClientProcessID"? Нужно будет поменять сервисы, что бы они это делали. Допустим, передавали бы некий "идентификатор бизнес-запроса" насквозь, каким то образом привязывали бы его ко всем действиям, обращениям к внешним сервисам и т.д. В частности, при коннекте к сиквелу писали бы его в тот же Hostname, AppName и т.п. Или идентификатор сессии клиента. И это ещё мы не берём случаи, когда, при обработки такой очереди, сервис не делает оптимизацию по клиентам, например, делает общий запрос на несколько запросов клиента (к примеру, если нескролько клиентов ищут что то в близких геообластях, то можно сделать общий запрос по общей геообласти; в общем, что то типа оптимизации запросов в дисковых очередях) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 23:16 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
имо под "сервисом" надо понимать метод. Без исходников веб-приложения не узнаешь - какой метод какие процедуры выполняет. Раз ве что можно собрать данные в отдельный файл и медитировать над старт-стопами и SPID. Но это мало что даст для понимания реализации веб-методов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 01:04 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
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. Причем тут вами перечисленное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 10:37 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
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 передаётся из моего браузера в коннект к сиквелу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 12:24 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
alexeyvgВ вашей цитате речь о ClientProcessID от сиквельного клиента, а сиквельный клиент - сервисы - топикстартеру недоступен. Ему доступен только клиент этих сервисов, то есть клиент клиента.ТС хочет фильтровать результаты в профайлере ничего не меняя в инфраструктуре. Я предложил вариант. Идентификация сервиса по Host+ClientProcessID уже проблема ТС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 12:57 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
invmalexeyvgВ вашей цитате речь о ClientProcessID от сиквельного клиента, а сиквельный клиент - сервисы - топикстартеру недоступен. Ему доступен только клиент этих сервисов, то есть клиент клиента.ТС хочет фильтровать результаты в профайлере ничего не меняя в инфраструктуре. Я предложил вариант. Идентификация сервиса по Host+ClientProcessID уже проблема ТС. Мдя... Александр Бердышевпри каких действиях на сайте в какие базы идут данные. Только гильотина... только логирование на бекенде... какой к лешему профайлер?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 13:03 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
buserТолько гильотина... только логирование на бекенде... какой к лешему профайлер?Да, наверное, это лучше всего. Но варианты имеются, в том числе для фильтрации в профайлере. Так что, повторю, нужно проработать разные механизмы, к тому времени, когда начальство созреет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 13:51 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
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 не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 14:54 |
|
||
|
Как нормально пользоваться профилировщиком запросов при сервис-ориентированной архитектуре
|
|||
|---|---|---|---|
|
#18+
SomewhereSomehow, автор- Включал логирование на веб-сервере (у нас был IIS), там то ли надо было что-то установить, то ли просто включалось, уже не помню - но для разработчика - усилий ноль. Все пишется в XML файл, ты потом просто смотришь, видишь все методы, все значения параметров, время и т.д. Минус - сильно возрастает нагрузка, нужно включать краткосрочно, для отладки. Да включается трассировка iis вполне в 2 клика. Главное не надолго, объёмы на нагруженных сервисах будут приличные, потом трасса вполне красиво открывается и разгребается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39843148&tid=1687476]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 396ms |

| 0 / 0 |
