Медленно работает программа. Ресурсов на сервере приложений и базы данных достаточно. При анализе работы базы данных наблюдаются множественные блокировки процедуры 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;
Мы проанализировали присланный вами журнал и каких либо перекрестных блокировок в нем не обнаружили. Если я правильно понял, в своем первом комментарии речь шла именно о них.
Данная ошибка не обязательно связана с проблемами в сети. Вполне возможно что мощности ПК, на котором установлен SQL Server, не хватает для формирования им ответов на запросы Сервера ЛЭРС УЧЕТ своевременно. Начиная с SQL Server 2017 (который у вас установлен) по нашим наблюдениям требуется более высокие характеристики ПК для нормальной работы данной СУБД.
Зайдите на ПК SQL Server, откройте Диспетчер задач и параллельно в ЛЭРС УЧЕТ запустите какую либо емкую задачу, например, формирование отчета по нескольким точкам за большой период. Посмотрите какая ззагруженность ПК SQL Server будет при этом.
Если не сложно, пришлите, пожалуйста, ещё несколько файлов с подробностями дедлоков.
Как их сохранить показано на гифке:
Кроме того, отправьте нам журнал сервера ЛЭРС УЧЁТ за любой день, когда наблюдалась медленная работа, чтобы можно было понять что приводит к постоянным удалениям заданий на опрос.
Ещё, пожалуйста, сообщите что у вас выбрано в пункте “Детализация протоколов опроса” в системных параметрах на закладке “Опрос”.
По присланным журналам нам удалось выяснить, что во время воспроизведения ошибки происходило удаление большого количества заданий принудительного опроса. Сейчас анализируем на каком этапе они появились.
Уточните, пожалуйста, используете ли вы Своднй монитор текущих в своей работе? В частности запускался ли Сводный монитор текущих 23.09.2020?
Спасибо за обращение! В следующей версии 3.37 появятся некоторые изменения, которые должны исправить ситуацию по заявленной вами проблеме. Пожалуйста, дождитесь выхода версии 3.37, установите ее и проверьте возникнет ли описанная вами ситуация в данной версии.