Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Блокируется таблица в MS SQL Server

Delphi , Базы данных , SQL

Блокируется таблица в MS SQL Server

Автор: Nomadic

По умолчанию, оператор UPDATE в MS SQL Server пытается поставить эксклюзивную табличную блокировку. Вы можете обойти это, используя ключевое слово FROM в сочетании с опцией PAGLOCK для использования MS SQL Server страничных блокировок вместо эксклюзивной табличной блокировки:

UPDATE orders SET customer_id=NULL FROM orders(PAGLOCK) WHERE customer_id=32;

Блокиpовка на всю таблицу пpи UPDATE ставится только в том случае, если по пpедикату нет индекса. Так, можно пpосто пpоиндексиpовать таблицу orders по полю customer_id, и не забывать делать UPDATE STATISTIC, хотя будет работать и с PAGLOCK. Просто не факт, что UPDATE всегда делает табличную блокировку.

Статья обсуждает распространенный вопрос в MS SQL Server, где заявка на обновление таблицы пытается занять исключительный блокировку таблицы, что может привести к проблемам с производительностью и блокировке других запросов. Автор предлагает использовать клаузу FROM с опцией PAGLOCK, чтобы использовать блокировку на уровне страниц вместо блокировки на уровне строк.

Основной пункт статьи заключается в том, что при обновлении таблицы без указания конкретного индекса или хинтов блокировки SQL Server по умолчанию будет принимать исключительную блокировку таблицы. Это может привести к проблемам с производительностью и блокировке других запросов, которые требуют доступа к той же таблице.

Автор предлагает две решения:

  1. Создать индекс на столбце customer_id в таблице orders. Это позволит SQL Server использовать более эффективный механизм блокировки, который является блокировкой на уровне страниц.
  2. Использовать опцию PAGLOCK с клаузой FROM в заявке на обновление. Это заставит SQL Server использовать блокировку на уровне страниц вместо блокировки на уровне строк.

Статья также отмечает, что даже если вы создадите индекс и используете опцию PAGLOCK, заявка на обновление может все еще занять блокировку таблицы, если нет обновления статистики (т.е., UPDATE STATISTICS). Это подчеркивает важность регулярного обновления статистик для часто обновляемых таблиц.

В целом, статья предоставляет ценные сведения о механизмах блокировки в MS SQL Server и предлагает практические решения для улучшения производительности и уменьшения проблем с блокировкой.

Оператор UPDATE в MS SQL Server может быть обойдан использованием страничных блокировок вместо эксклюзивной табличной блокировки с помощью ключевого слова FROM и опции PAGLOCK.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: SQL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:24:07/0.0033938884735107/0