Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. По-рекоммендации MS решил попробовать READ_COMMITTED_SNAPSHOT изоляцию. Хочу посмотреть как она отрабатывает при одновременном UPDATE одной и той-же строки двумя транзакциями Включил в бд этот режим: Код: sql 1. Проверил через Код: sql 1. Единичка выставилась. Тестирую: создаю два потока, которые открывают ReadCommited транзакции и меняют имя у User1. Транзакция 1 применяет свои изменения Транзакция 2 просто закрывается без (Exception) В профайлере никаких ошибок небыло. Причем если делаю Snapshot изоляцию, то отрабатывает ок: кидает исключение, что другая транзакция уже изменил запись. Может я немного не понял и READ_COMMITTED_SNAPSHOT не должна давать исключение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 17:59 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTi, авторМожет я немного не понял и READ_COMMITTED_SNAPSHOT не должна давать исключение? не должна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 18:00 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
TaPaKGLeBaTi, авторМожет я немного не понял и READ_COMMITTED_SNAPSHOT не должна давать исключение? не должна Оо т.е. если у меня два потока меняют одни данные, то я даже не узнаю ничего? Видимо только Snapshot isolation спасает от всех бед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 18:04 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTi Тестирую: создаю два потока, которые открывают ReadCommited транзакции и меняют имя у User1. Транзакция 1 применяет свои изменения Транзакция 2 просто закрывается без (Exception) В профайлере никаких ошибок небыло. Причем если делаю Snapshot изоляцию, то отрабатывает ок: кидает исключение, что другая транзакция уже изменил запись. Может я немного не понял и READ_COMMITTED_SNAPSHOT не должна давать исключение? Может вы код покажете, которым тестируете? И текст исключения, который у вас там якобы должен быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 18:11 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 18:21 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
Вообще, snapshot isolation сделали не для того, чтобы знать, что "два потока меняют одни данные", а немного для другого. Update conflict -- это на сдачу получилось. Поизучайте пессимистические и оптимистические блокировки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 18:44 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичВообще, snapshot isolation сделали не для того, чтобы знать, что "два потока меняют одни данные", а немного для другого. Разве? wikiIn databases, and transaction processing (transaction management), snapshot isolation is a guarantee that all reads made in a transaction will see a consistent snapshot of the database (in practice it reads the last committed values that existed at the time it started), and the transaction itself will successfully commit only if no updates it has made conflict with any concurrent updates made since that snapshot . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 19:04 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
Хорошо, не так выразился. IL Snapshot поддерживается производителями СУБД в основном не для этого. Добиться того, чего вы хотите, можно разными способами, а вот уменьшить конкуренцию за данные при использовании других уровней изоляции -- практически никакими другими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 19:30 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTi, можно и на "низких" уровнях изоляции, в таблицу(ы) добавьте колонку __row_version rowversion Код: sql 1. вместе со строкой при выборке на клиента выбирайте и значение __row_version Код: sql 1. при update/delete добавляйте в предикат and __row_version = @old_sys_version Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. EF примерно так работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 19:40 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
+ -- на клиенте посмотрите если ни одной строки не обновлено @@rowcount ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 19:42 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTi, RCSI сделан для развода читателей и писателей. При этом надо всегда огдлядываться на бизнес-логику, позволяет ли вам такой подход. Если нужно - поднимайте уровень изоляции для ваших изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2018, 08:49 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTiОо т.е. если у меня два потока меняют одни данные, то я даже не узнаю ничего? Видимо только Snapshot isolation спасает от всех бед. главная фишка RCSI консистентный набор на момент старта query. блокировочный RC же пихает в набор неконсистентную кашу, плюс читатели блокирует писателей, создавая угрозы дедлоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 08:00 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
churupaha, Действительно, можно же rowcount проверять... Теперь у меня дилема появилась. Я могу использовать Read_committed_shapshot и проверять rowcount, и могу использовать snapshot_isolation и ловить исключения. Оба варианта используют temp_db и не накладывают блокировки. Что мне лучше выбрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 17:05 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTi, Но учитывая, что у Read_committed_snapshot есть проблемы с фантомным чтением, то видимо один Snapshot_Isolation решает от всех бед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 17:19 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTi, откуда вы всё это генерируете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 17:21 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
TaPaK, Запросы? Из EntityFramework ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 17:23 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
TaPaK, (не редактируются тут комментарии...) У меня в системе есть куча сервисов, которые параллельно изменяют некоторые параметры у пользователя. Надо сделать, чтобы не было ошибок. Вот и ломаю голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 17:34 |
|
||
|
READ_COMMITTED_SNAPSHOT и конкурентная запись
|
|||
|---|---|---|---|
|
#18+
GLeBaTiTaPaK, (не редактируются тут комментарии...) У меня в системе есть куча сервисов, которые параллельно изменяют некоторые параметры у пользователя. Надо сделать, чтобы не было ошибок. Вот и ломаю голову. для этого достаточно управлять изоляцией конкретных действий, а не всего сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 17:43 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39677864&tid=1689357]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 378ms |

| 0 / 0 |
