В своем приложении для отслеживания транспортных средств я использую базу данных sqlServer, в которой есть очень заполненная и часто используемая таблица VehilcePosition, в которой хранятся все местоположения транспортных средств. для отображения последних местоположений транспортного средства мне нужно запросить таблицу путем самостоятельного присоединения и групповой функции MAX на dateTime. Я уже помещал индексы в столбцы, но запрос на чтение занимает некоторое время и получает общую блокировку, которая блокирует вставку в таблицу. Поскольку эта таблица обновляется (ВСТАВКА строк) и читается чаще всего. приложение в основном останавливается из-за исключения из-за тайм-аута из-за общей блокировки во время чтения и монопольной блокировки во время записи. Мне нужно предложение, как я могу оптимизировать свою базу данных, чтобы избежать такой ситуации. Я использую ПК с Core i7 (не сервер), есть единственное решение для обновления оборудования на некоторых серверных машинах.
Проблема с NOLOCK в том, что иногда вы будете получать неправильные ответы.
Аппаратное обеспечение тоже не проблема.
Лучшее решение - использовать SQL Server «Изоляция зафиксированного моментального снимка при чтении». Это параметр уровня базы данных, который возвращает читателю последнюю версию строки во время обновления строк. Часто это решение проблем такого типа.
Другое решение - использовать разбиение таблицы, но это функция Enterprise Edition (и Developer Edition). При секционировании таблиц в SQL 2008 вы можете указать автоматическое снятие блокировки, при котором блокировки будут увеличиваться только до уровня секционирования. Если у вас достаточно разделов (разрешено 15 000), большинство запросов не будут блокироваться.
Но изоляция моментальных снимков с фиксацией чтения - лучшее решение.
но запрос на чтение занимает некоторое время и получает общую блокировку, которая блокирует вставку в таблицу
Вам не нужны блокировки, скажите SQL Server не ставить там блокировки. На это есть подсказка.
Я использую ПК с Core i7 (не сервер), есть ли единственное решение для обновления оборудования до некоторых
серверные машины.
Между прочим, это больше о том, чтобы «научиться правильно использовать sql server, прочитав документацию», что при обновлении нового оборудования. Например, NOLOCK приходит мне в голову как способ сказать запросу чтения не блокировать строки.