Параллелизм SQL CLR - PullRequest
       12

Параллелизм SQL CLR

0 голосов
/ 16 октября 2018

У меня есть хранимая процедура, которая вызывает функцию CLR.Они оба находятся в одной базе данных.Функция CLR вызывает веб-сервис.Проблема в том, что временная метка SQL на 40 секунд раньше, чем временная метка веб-службы.Это означает, что ни SQL, ни веб-сервис не могут обрабатывать много вызовов параллельно.

Я могу просматривать журналы, которые веду, когда вызывался SP.Как узнать, когда была вызвана функция CLR?

1 Ответ

0 голосов
/ 16 октября 2018

Есть ли что-нибудь в хранимой процедуре, которая выполняется перед вызовом функции SQLCLR?

В общем, если вы хотите увидеть, что происходит в режиме реального времени, у вас есть три варианта:

  1. SQL Server Profiler
  2. Расширенные события
  3. Аудит базы данных

Первые два позволят вам наблюдать за событиями, как они происходят, и вы можете видеть, чтоВремя начала и продолжительность каждого оператора:

Третий вариант, Аудит, позволяет вам легко записывать события в файл журнала, который вы можете просматривать через системный TVF.Вы можете перехватить SCHEMA OBJECT ACCESS и затем отфильтровать на уровне аудита сервера (требуется либо для спецификаций аудита базы данных, либо для спецификаций аудита сервера) для объектов, имеющих имя хранимой процедуры или функции.Вы не сможете увидеть уровень детализации, который вы получаете с первыми двумя опциями, а также не сможете увидеть разбивку отдельных операторов в хранимой процедуре, но это довольно легкий механизм для захвата этих событий, если онипроисходит, когда вас нет рядом, чтобы посмотреть через первые две опции.

При этом вы видите задержки с вызовом веб-службы и если этот вызов веб-службы выполняется более чем двумя сеансами одновременнои если эти одновременные вызовы веб-службы относятся к одному и тому же URI, то вы работаете с максимальным числом подключений по умолчанию на URI, равным 2. Когда этот предел достигнут, все дополнительные вызовы к этому URI удерживаются до тех пор, пока один из2 звонка завершены.Вы можете увеличить это максимальное количество соединений для каждого URI, установив свойство ConnectionLimit класса ServicePoint, которое само по себе является свойством HttpWebRequest (и любым другим * WebRequest):

_MyHttpWebRequest.ServicePoint.ConnectionLimit = 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...