Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FAQ - Вопросы - ответы - советы - Базы данных

Вопрос:

[MSSQL] Работаю на D3+BDE+ODBC и если в транзакции изменена какая-то таблица, то для другого пользователя блокируестя вся таблица, до окончания транзакции. Как лечить?

Ответ:

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

	UPDATE ORDERS SET CUSTOMER_ID=NULL
		FROM ORDERS(PAGLOCK) WHERE CUSTOMER_ID=32;

(из статьи, потом вспомню, какой. AA)

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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог