AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2006, 11:41   #1  
Sequel is offline
Sequel
Участник
 
53 / 13 (1) ++
Регистрация: 17.06.2005
Адрес: Новокузнецк
Блокировка ключа индекса
Столкнулся со следующей проблемой: выбираю для обновления строку из таблицы WMSShipment (таблица отгрузок) по полю ShipmentId (номер отгрузки). При этом, поскольку по полю ShipmentId стоит индекс, происходит блокировка на обновление ключа индекса со значением этой строки. Это все нормально и понятно - надо запретить другим пользователям выбирать эту строку на обновление. Но в таблице отгрузок еще есть индекс по полю статус, и значение ключа этого индекса тоже блокируется!!! Но статус - это ведь не уникальный индекс - в этой таблице всего несколько разных статусов, и это значит что теперь огромная часть таблицы будет заблокирована. К примеру если мы выберем всего 1 строку со статусом Активизировано, будут заблокированы все строки с таким статусом!!! Кто нибудь сталкивался уже с этим? Кто нибудь может сказать на какие именно индексы в SQL SERVER
накладывается блокировка обновления если у таблицы несколько индексов?
Работаем в Аксапте, Kernel Rollup 1, SQL Server 2005, подозреваю что 2000-й sql работает с блокировками на обновление так же
Старый 06.07.2006, 12:38   #2  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
в 2005-м сделали блокировку по строке? в 2000 по блокам. Блокируется блок целиком со всеми смежными значениями индекса, попавшими в этот блок. Это нормально Может дело не в статусе?

С уважением, itfs.
Старый 06.07.2006, 15:54   #3  
Sequel is offline
Sequel
Участник
 
53 / 13 (1) ++
Регистрация: 17.06.2005
Адрес: Новокузнецк
Протестировал на 2000-м SQL - и понял что ошибался - 2000-й таких блокировок на обновление не делает. В 2000-м блокируется только 1 индекс - тот по которому делается запрос на обновление
Старый 06.07.2006, 15:54   #4  
Sequel is offline
Sequel
Участник
 
53 / 13 (1) ++
Регистрация: 17.06.2005
Адрес: Новокузнецк
2 itfs:
Насчет блока и смежных значений не понял. Вот есть например табличка WMSShipment, в ней поле shipmentId по которому построен индекс. теперь если я сделаю select forupdate wmsShipment where wmsShipment=='00000001' то на значение ключа индекса '00000001' поставится блокировка обновления, и если другие пользователи попытаются сделать то же самое - их поток будет ждать пока не снимется эта блокировка. Это правильно - поскольку нельзя дать 2-м пользователям одновременно обновлять одну запись. Но проблема в том, что в приведенном выше примере у меня заблокируется еще и значение ключа индекса по полю Status. Т.Е. если в данной строке стоит статус "Активизировано", значение ключа "Активизировано" будет блокироваться. И когда другой пользователь будет выбирать другую строку этой таблицы, где поле статус тоже имеет значение "Активизировано", его процесс тоже захочет заблокировать значение ключа индекса, и не сможет этого сделать до тех пор пока его не разблокирует первый процесс.
Что касается блокирования блока целиком со смежными значениями индекса - единственное похожее что я знаю - блокировка диапазона значений индекса, но она применяется только с уровня изоляции транзакций Repeatable Read, т.е. в аксапте никогда не используется
Старый 06.07.2006, 16:08   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Sequel - просто приведите DML, план исполнения (опционально) и результаты sp_lock на обеих версиях
__________________
-ТСЯ или -ТЬСЯ ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как формируется в Axapta название табличного индекса для СУБД? dn DAX: База знаний и проекты 4 09.10.2007 16:21
Волшебное превращение неуникального индекса... IPv6 DAX: База знаний и проекты 4 10.01.2007 16:46
Блокировка ключа индексации velk DAX: Программирование 2 10.08.2005 12:01
Использование индекса по RecId не разрешено! 3oppo DAX: Программирование 1 25.07.2005 14:54
Отображение связных таблиц. Сплиттер. Автоувеличение индекса. Delete Action. sguryev DAX: База знаний и проекты 0 14.12.2001 06:15

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:30.