Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировки на строки, (rowlock,updlock,readpast) не работают 
V
    Опции темы
cra6
Дата 29.10.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: нет
Всего: 2



Добрый день,
Работаю над многопоточным приложением(java-spring-hiberneit-Oracle-Mssql)
Имееться множество одинаковых потоков(от 5 и больше) которые ломятся в базу и выбирают для себя записи-задания
Для MSSQl это делается  следующей транзакцией:
Код

select top(50) * from table with (rowlock,updlock,readpast) where THREADID is null
Update Message m set m.threadId = :threadId where m in ()


Данный подход стабильно приводит к дедлокам
Решил с помощью tablockx:
Код

select top(50) * from table with (tablockx) where THREADID is null

Вопрос почему могут не работать (rowlock,updlock,readpast)?
(Уровень изоляции READ COMMITTED).

ЗЫ. Для Оракла работает следующий вариант
Код

"select * from ( " +   "select * " +
   "from  table " +
                 "where  TS_NOTIFICATIONMESSAGES.TS_THREADID is null ) " +
              "where rownum <= :rowLimit for update of TS_ID skip locked")

PM MAIL   Вверх
Akina
Дата 29.10.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Цитата(cra6 @  29.10.2010,  15:48 Найти цитируемый пост)
Уровень изоляции READ COMMITTED

Мало. Такую транзакцию надо сериализовать.
С другой стороны я не понимаю, почему не сделано наоборот- сперва попросить сервер выбрать себе задания (update), и лишь потом читать, что для этого потока выбрано сервером. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cra6
Дата 29.10.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: нет
Всего: 2



Цитата(Akina @ 29.10.2010,  16:16)
С другой стороны я не понимаю, почему не сделано наоборот- сперва попросить сервер выбрать себе задания (update), и лишь потом читать, что для этого потока выбрано сервером.

Не знаю как это сделать учитывая что процесс должен отобрать заданное количество сообщений(    
select top(50))Подразумевается апдейт с подзапросом?
И является ли tablockx аналогом SERIALIZABLE? Стоит ли менять то что сейчас работает?

Это сообщение отредактировал(а) cra6 - 29.10.2010, 16:39
PM MAIL   Вверх
Akina
Дата 29.10.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Код

update ... from (select top ...) ...
Посмотри тупо примеры к update в MSDN - особенно самый последний.
Цитата(cra6 @  29.10.2010,  17:36 Найти цитируемый пост)
 является ли tablockx аналогом SERIALIZABLE? 

Вообще-то нет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 29.10.2010, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 10
Всего: 161



Цитата(cra6 @  29.10.2010,  14:48 Найти цитируемый пост)
skip locked

Я надеюсь Вы в курсе, что этот модификатор документирован только в 11.2 версии и использование его для  младших версий - не лигитивно.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
cra6
Дата 29.10.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: нет
Всего: 2



Спасибо

Это сообщение отредактировал(а) cra6 - 31.10.2010, 16:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.