|
Блокировка объекта базы данных
|
|||
---|---|---|---|
#18+
Решаю такую проблему: есть ASP.NET MVC приложение. В нем работает фоном поток - достает из MS SQL Server объекты и обрабатывает их, делая REST вызовы к стороннему сервису. Когда один экземпляр приложения, то всё нормально. А вот если несколько, то возможна ситуация когда в один момент времени два экземпляра приложения ASP.NET достанут из базы один и тот же объект и будут обрабатывать его - например сделают два одинаковых вызова по REST API. Поэтому я решил добавить к объекту поле lock, сингнализирующее, что объект обрабатывается экземпляром приложения и другим экземплярам недоступен. Т.е некий аналог мьютекса. Вопрос - правильно ли я реализовал свою задумку: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Только когда ХП возвращает 1, то вызывавший её инстанс ASP.NET может работать с объектом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2020, 21:19 |
|
Блокировка объекта базы данных
|
|||
---|---|---|---|
#18+
gepard1980, Очередной велосипед... https://docs.microsoft.com/ru-ru/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver15 READPAST Указывает, что компонент Компонент Database Engine не считывает строки и страницы, заблокированные другими транзакциями. Если указан аргумент READPAST, блокировки уровня строк будут пропускаться, а блокировки уровня страниц — не будут. Компонент Компонент Database Engine будет пропускать строки вместо блокировки текущей транзакции до тех пор, пока блокировки не будут сняты. Например, предположим, что в таблице T1 есть один целочисленный столбец со значениями 1, 2, 3, 4, 5. Если транзакция A изменит значение 3 на 8, но еще не будет зафиксирована, то инструкция SELECT * FROM T1 (READPAST) возвратит значения 1, 2, 4, 5. Параметр READPAST главным образом используется для устранения конфликта блокировок при реализации рабочей очереди, использующей таблицу SQL Server. Средство чтения очереди, использующее аргумент READPAST, пропускает прошлые записи очереди, заблокированные другими транзакциями, до следующей доступной записи очереди, не дожидаясь, пока другие транзакции снимут свои блокировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2020, 22:05 |
|
Блокировка объекта базы данных
|
|||
---|---|---|---|
#18+
gepard1980 Вопрос - правильно ли я реализовал свою задумку: Должно быть как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2020, 22:32 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1685631]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 163ms |
0 / 0 |