Я разрабатываю функцию, которая будет использоваться в качестве монитора хода выполнения процессов.
Я буду охватывать 40-50 потоков, на завершение которых может потребоваться несколько минут или даже часов, и они обновят свой статус до данных.
Из веб-приложения я создам механизм опроса, который будет считывать состояние процессов, используя одно чтение каждые 0,5 секунды.
Мне нужно оптимизировать таблицу для нескольких записей в секунду и одного чтенияза 0,5 сек.Мне все равно, если я прочитал грязное состояние, потому что это просто для мониторинга процесса, это не так критично.
Это таблица, которую я использую
CREATE TABLE [cmn].[ProcessProgress]
(
[id] [bigint] NOT NULL,
[status] [smallint] NOT NULL,
[step] [int] NOT NULL,
[max_step] [int] NOT NULL,
CONSTRAINT [PK_ProcessProgress] PRIMARY KEY CLUSTERED
(
[id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
GO
И выберите с помощью(NOLOCK)
Полагаю, мне нужно использовать
SELECT * FROM [cmn].[ProcessProgress] (NOLOCK)
Нужно ли использовать транзакцию со специальным ISOLATION LEVEL
или достаточно (nolock)
?Или (nolock)
заставит думать хуже?
Можете ли вы предложить наиболее оптимальное решение этой проблемы?