Медленная работа программы Lers. Множество блокировок в базе данных [9146]

Медленно работает программа. Ресурсов на сервере приложений и базы данных достаточно. При анализе работы базы данных наблюдаются множественные блокировки процедуры LERS.dbo.sp_GetNodeIsHeatingSeasonNow;1.
Блокирующий выполняет процедуру

LERS.dbo.sp_DelPollTask;1
и блокирует пользователей при выполнении её кода:
DELETE FROM PollTask
WHERE ID = @TaskID

Блокируемый пытаются отработать код:

Добавляет сообщение в журнал сессии опроса.
*/
CREATE PROCEDURE [dbo].[sp_InsPollSessionLog]
@Messages AS PollSessionLogMessage READONLY – Список сообщений, которые нужно добавить в базу
AS
INSERT INTO PollSessionLog
(
PollSessionLog_PollSessionID
, PollSessionLog_DataDate
, PollSessionLog_Type
, PollSessionLog_Message
)
SELECT
PollSessionId,
[DateTime],
Importance,
[Message]
FROM
@Messages m
INNER JOIN
PollSession ps WITH (NOLOCK)
ON
ps.PollSession_ID = m.PollSessionId

А так же блокирует процессы:
/*

Добавляет в задание на опрос список точек учета.
*/
CREATE PROCEDURE [dbo].[sp_InsPollTaskMeasurePoint]
Идентификатор задания на опрос
@TaskId int
Список идентификаторов точек учета
, @MeasurePointPollSettings MeasurePointPollSettings READONLY
AS
Сохраняем параметры автоопроса.
INSERT INTO PollTaskMeasurePoint
(
TaskId
, MeasurePointId
, PerformTimeCorrection
, RequestedDataMask
, IsDefault
, StartIfDefaultFailed
)
SELECT
@TaskId
, MeasurePointId
, PerformTimeCorrection
, RequestedDataMask
, IsDefault
, StartIfDefaultFailed
FROM
@MeasurePointPollSettings
– Устанавливаем для точек учёта дату начала автоопроса.
MERGE
MeasurePoint WITH (HOLDLOCK) mp
USING
@MeasurePointPollSettings ps
ON
mp.MeasurePoint_ID = ps.MeasurePointId
AND ps.AutoPollStartDate IS NOT NULL
WHEN MATCHED THEN
UPDATE SET AutoPollStartDate = ps.AutoPollStartDate;

Сервер приложения имеет 16 процессоров CPU
CPU
AMD EPYC 7552 48-Core Processor

Maximum speed: 2,20 GHz
Sockets: 1
Virtual processors: 16
Virtual machine: Yes
L1 cache: N/A

Utilization 1%
Speed 2,20 GHz
Up time 9:18:00:37
Processes 78
Threads 1459
Handles 37340


Памяти 32Гб.

Сервер БД
CPU AMD EPYC 7552 48-Core Processor

Maximum speed: 2.20 GHz
Sockets: 1
Virtual processors: 16
Virtual machine: Yes
L1 cache: N/A

Utilization 7%
Speed 2.20 GHz
Up time 9:17:59:51
Processes 78
Threads 1604
Handles 40228
Памяти 64Гб.

Приложите, пожалуйста, все журналы ошибок вашего SQL Server.

Вот
sql logs lersdb.log (676 KB)

В системных журналах постоянно регистрируются такие ошибки. Хотя с сеть до сервера бд всё впорядке.

Ошибка выполнения запроса “GET /api/v0.1/Core/MeasurePoints/PollConnection/11391”. Истекло время ожидания ответа от базы данных.

Проверьте соединение сервера ЛЭРС УЧЕТ с SQL-сервером.

Мы проанализировали присланный вами журнал и каких либо перекрестных блокировок в нем не обнаружили. Если я правильно понял, в своем первом комментарии речь шла именно о них.

Данная ошибка не обязательно связана с проблемами в сети. Вполне возможно что мощности ПК, на котором установлен SQL Server, не хватает для формирования им ответов на запросы Сервера ЛЭРС УЧЕТ своевременно. Начиная с SQL Server 2017 (который у вас установлен) по нашим наблюдениям требуется более высокие характеристики ПК для нормальной работы данной СУБД.

Зайдите на ПК SQL Server, откройте Диспетчер задач и параллельно в ЛЭРС УЧЕТ запустите какую либо емкую задачу, например, формирование отчета по нескольким точкам за большой период. Посмотрите какая ззагруженность ПК SQL Server будет при этом.

Вот логи с блокировками.
sql logs lersdb.log (1.01 MB)

Если не сложно, пришлите, пожалуйста, ещё несколько файлов с подробностями дедлоков.
Как их сохранить показано на гифке:
deadlock_report_video.gif
Кроме того, отправьте нам журнал сервера ЛЭРС УЧЁТ за любой день, когда наблюдалась медленная работа, чтобы можно было понять что приводит к постоянным удалениям заданий на опрос.

Ещё, пожалуйста, сообщите что у вас выбрано в пункте “Детализация протоколов опроса” в системных параметрах на закладке “Опрос”.

Информационные, предупреждения, ошибки, критические ошибки.
server.2020-09-23.part001.rar (10 MB)
server.2020-09-23.part002.rar (10 MB)
server.2020-09-23.part003.rar (7.14 MB)
report.rar (6.63 KB)

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

Уточните, пожалуйста, используете ли вы Своднй монитор текущих в своей работе? В частности запускался ли Сводный монитор текущих 23.09.2020?

Если это “Сводка текущих” то целенаправленно не пользуемся.

Я правильно понимаю, она не могла быть запущена 23.09.2020?

Пользователь говорит нет

Спасибо за обращение! В следующей версии 3.37 появятся некоторые изменения, которые должны исправить ситуацию по заявленной вами проблеме. Пожалуйста, дождитесь выхода версии 3.37, установите ее и проверьте возникнет ли описанная вами ситуация в данной версии.

Версия 3.37 доступна для скачивания.