Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
TaPaK, Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 11:15 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
TaPaK, Дело было на 2014, может сейчас пофиксили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 11:16 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
a_voronin TaPaK, Код: sql 1. 2. а всё таки мы не знаем что RCSII СОВСЕМ НЕ РАВНО SNAPSHOT о чём в общем я и написал, что SNAPSHOT имеет ограничение, а вот при чём он здесь??? всё таки сжигаем рыжих по привычки, коллего :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 11:17 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Idol_111 Вы даете возможность читать грязные данные. лажа какая-то. RCSI всегда выдает последнюю закоммиченную версию. в Азуре это вообще дефолт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 11:39 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Yasha123 RCSI всегда выдает последнюю закоммиченную версию Не совсем. Последнюю законченную до начала стейтмента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 11:45 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
msLex Yasha123 RCSI всегда выдает последнюю закоммиченную версию Не совсем. Последнюю законченную до начала стейтмента. я к тому, что ничего незакоммиченного, т.е. грязного, не даст. а закоммичено ли на начало транзакции или на начало стэйтмента, в данном контексте меняет мало, данные закоммичены ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 12:30 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Yasha123 msLex пропущено... Не совсем. Последнюю законченную до начала стейтмента. я к тому, что ничего незакоммиченного, т.е. грязного, не даст. а закоммичено ли на начало транзакции или на начало стэйтмента, в данном контексте меняет мало, данные закоммичены ну это да, не зря же он RC, хоть и SI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 12:36 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
msLex, ну вот некоторые же умудряются читать "грязные данные" и виноват у них в этом RCSI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2019, 13:07 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Кнюпель Idol_111 Бизнес может сломаться. Правила же могут поменяться. Вы даете возможность читать грязные данные. Косяки не предсказуемы. Это надо тестировать на глубоком уровне. Конечно, можно не париться если у вас программа типа 2+2, так блокировок бы не было в таком случая, я полагаю. Ну погуглите что ли, на первой же странице по русски. не, это не верно, во первых мы очевидно не используем уровень Snapshot, а RC, который превратится в RCSI, так что с бизнесом проблем точно не будет. Интересуют есть-ли какие-то технические подводные камни, на которые можно напороться на практике. Вот вам пример, когда RCSI ломает логику: списание денег со счета клиента в параллельных транзакциях. Код: sql 1. 2. 3. 4. 5. 6. При обычном RC вторая транзакция будет ждать окончания первой. При включении RCSI обе пройдут нормально, но в каком состоянии окажется счет - хз: может оказаться отрицательным, а может получиться так, что списание из первой транзакции совсем исчезнет. Я в свое время столкнулся с этим, и вылечил его, емнип, добавлением хинта READCOMMITTEDLOCK. Но! Сначала вам нужно проанализировать ваш код и идентифицировать места, в которых такое изменение поведения возможно. После чего думать, как это исправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2019, 02:16 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Ennor Tiegael Вот вам пример, когда RCSI ломает логику: списание денег со счета клиента в параллельных транзакциях. Код: sql 1. 2. 3. 4. 5. 6. При обычном RC вторая транзакция будет ждать окончания первой. При включении RCSI обе пройдут нормально, но в каком состоянии окажется счет - хз: может оказаться отрицательным, а может получиться так, что списание из первой транзакции совсем исчезнет. Я в свое время столкнулся с этим, и вылечил его, емнип, добавлением хинта READCOMMITTEDLOCK. Но! Сначала вам нужно проанализировать ваш код и идентифицировать места, в которых такое изменение поведения возможно. После чего думать, как это исправить. насколько понимаю, ваше предположение неверно. При обычном RC вы точно также можете отправить аккаунт в минус если первая транзакция сделает свой if exists(), а затем вторая сделает его-же, select его не заблокирует и оба if exists() отработают, после чего отработают оба update. Сделать что вы хотите можно как раз хинтом UPDLOCK на select, который, как я понимаю, в RCSI будет вести себя точно так-же, как и в RC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2019, 09:32 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Кнюпель, Это пример из головы, реальный код был несколько сложнее. Там были доп. проверки, что состояние счета на момент if exists такое же, как и при update. При этом никаких хинтов не требовалось. После включения RCSI начались проблемы - вторая транзакция начала отваливаться с ошибкой, вместо того, чтобы ждать. Я не знаю, что у вас за система, может вам это пофиг. Нам не было, поэтому я полез разбираться. В общем случае, везде где у вас предполагается сериализованный доступ к данным, RCSI может подгадить, подсунув старую версию записи вместо того, чтобы встать на блокировку. А так-то да, штука отличная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2019, 14:39 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Ennor Tiegael, емнип, вторая транзакция должна свалиться с ошибкой "данные были изменены" при попытке фиксации. Обе читают, обеим достаточно, но кто успел раньше - тот и выиграл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2019, 15:24 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов Ennor Tiegael, емнип, вторая транзакция должна свалиться с ошибкой "данные были изменены" при попытке фиксации. Обе читают, обеим достаточно, но кто успел раньше - тот и выиграл. Это про снапшот транзакция. При RCSI такого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2019, 16:03 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Ennor Tiegael В общем случае, везде где у вас предполагается сериализованный доступ к данным, RCSI может подгадить, подсунув старую версию записи вместо того, чтобы встать на блокировку. А так-то да, штука отличная. Я даже затрудняюсь придумать реалистичный сценарий, где это может произойти. Результаты любого select без хинта по определению нельзя использовать позднее в транзакции если требуется что-бы данные не изменились, поэтому нельзя надеятся на блокировку выставленную другим писателем в другой транзакции. А как только появляется хинт - поведение RCSI и RC становится идентичным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2019, 08:14 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Кнюпель Результаты любого select без хинта по определению нельзя использовать позднее в транзакции если требуется что-бы данные не изменились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2019, 10:16 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Мнение об ужасности и пакостях от RCSI (с т.зр проблем в бизнес-логике) имхо сильно преувеличено [Ааппликухи на] Oracle работает так по умолчанию уже десятилетиями и прекрасно себя чувствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2019, 13:31 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
invm Вы попробуйте это рассказать современным (да и не очень) БД-писателям - они на вас будут смотреть как на идиота. в Read Committed select не расставляет блокировки, их надо вручную ставить, поэтому никаких изменений от RCSI в плане логики я например не вижу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2019, 13:38 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Кнюпель в Read Committed select не расставляет блокировки и именно поэтому до появления RCSI sql server назвали "блокировочником". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2019, 17:33 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Glebanski Мнение об ужасности и пакостях от RCSI (с т.зр проблем в бизнес-логике) имхо сильно преувеличено [Ааппликухи на] Oracle работает так по умолчанию уже десятилетиями и прекрасно себя чувствует. Glebanski, не совсем так, насколько я знаю, пока хватает ОЗУ для хранения версий - все замечательно, но как только версии сбрасываются на диск - всё очень плохо. Иллюзии о безмятежности Оракл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2019, 12:48 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Слухи об ужасах многоверсионности, как обычно, сильно преувеличены. Теперь по существу. Во-первых, для начала неплохо было бы провести расследование и выяснить, это всё же блокировки, или нет. Особой проблемы в этом не вижу, хоть это и прод. Во-вторых здесь было начали правильно говорить, что некисло было бы для начала протестировать работу приложения, но потом всё скатилось в спор насчёт грязного чтения. Никакого грязного чтения при мультиверсионности, по крайней мере, по умолчанию не будет. Но логика работы всё же поменяется. Так, например, если некая транзакция начала менять некие данные, и не успела из закоммитить, то селект от другой транзакции будет ждать, пока отпустится блокировка, и прочитает актуальную версию данных. А в случае версионности вторая транзакция прочитает просто старую версию. И вот здесь надо решить, а это поведение оно вообще устраивает клиента и разработчиков? А не повлияет это каким-то образом на бизнес-логику софтины? Ещё один момент это как эта хрень скажется на производительности и размерах tempdb. Тут вот не к ночи помянули Oracle. Так вот там на самом деле всё хорошо. Главное это следить, чтобы у UNDO сегмента было достаточно места, и хорошо бы его на быстрые диски положить. И чтобы оно параллельно ещё писалось/читалось. И в MS SQL, по наблюдениям, тоже всё неплохо. Надо только таким же образом следить за tempdb. Другое дело, что кривая апликуха может сожрать место в tempdb и нагрузить её, потому в архитектуре этот момент тоже должен учитываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2019, 23:26 |
|
||
|
Включить версионность для борьбы с блокировками
|
|||
|---|---|---|---|
|
#18+
Очень лысый Но логика работы всё же поменяется. Так, например, если некая транзакция начала менять некие данные, и не успела из закоммитить, то селект от другой транзакции будет ждать, пока отпустится блокировка, и прочитает актуальную версию данных. А в случае версионности вторая транзакция прочитает просто старую версию. И вот здесь надо решить, а это поведение оно вообще устраивает клиента и разработчиков? А не повлияет это каким-то образом на бизнес-логику софтины? как я уже написал сверху, я не могу придумать ни одной ситуации из реальной жизни где это было бы проблемой, в RC я не полагаюсь на блокировку писателем из другой транзакции, я ее сам заблокирую хинтом в самом начале, что-бы ее никто не изменил. В стандартном RC без хинтов запись вернется либо до того, как ее успела изменить другая транзакция, либо после (повисев на блоке), а какой вариант именно - непредсказуемо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2019, 08:17 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39896284&tid=1686847]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 474ms |

| 0 / 0 |
