Что такое блокирующие, тупиковые проблемы в финансовых операциях?

Подзапрос SQL - когда следует использовать "with (nolock)"

В одном местном финансовом учреждении меня упрекнули их программисты за то, что я выразил им свое мнение о том, что (одержимость их программистов) (б) проблемами блокировки в их базах данных MS SQL Server 2005 не имеет для меня особого смысла.

Каковы возможные проблемы с возможной блокировкой, блокировкой, взаимоблокировкой, если финансовые операции никогда не обновляются, не удаляются и даже неправильные операции (часть «транзакций»?) исправляются путем вставки (добавления) новых корректирующих записей в базу(ы)?
Как это называется по-английски? В других языках это называется сторно, сторноед (?) операции/записи.

Так вот, как я понимаю, "транзакции" действительно никогда не откатываются и никогда не бывает некорректных/несуществующих записей, только не актуализированные.

Обновление:
Я искал в Google слово storno и не смог найти никаких результатов с его определением на английском языке или его использованием в английских текстах.
Я нашел определение для storno (латинскими буквами) только на итальянском языке.
Но бухгалтерский учет был изобретены в Италии и многие итальянские бухгалтерские термины используются в других языках, например, в русском бухгалтерском учете (банковском деле).
Я тоже думал, что это международная практика учета финансовых операций, не так ли?

Update2:
С.Лотт дал мне ссылку на То, как транзакции сторнируются в приложении ERP, имеет большое значение! говорить, что сторн — это сторн-транзакция.

Ну, это не правильно. Сторно - это не только транзакция, это любая операция (часть транзакции), исправляющая некорректную операцию, хотя 2 операции вместе могут показаться обратной транзакцией (состоящей из 2-х операций - зачисления и списания по целевому и исходному счетам).

Итак, сторно не является общей практикой финансового учета во всем мире?

В любом случае, я хотел бы избежать обсуждения деталей/методов/условий бухгалтерского учета и ограничить вопрос контекстом, когда записи никогда не удаляются и не обновляются.

Каковы возможные проблемы с блокировкой, блокировкой, взаимоблокировкой, производительностью в этом контексте?


person Gennady Vanin Геннадий Вани&    schedule 01.10.2010    source источник
comment
Другие языки? А можно конкретно?   -  person S.Lott    schedule 01.10.2010
comment
Вы говорите об этом? richardatopenbravo.blogspot.com/2010/02/   -  person S.Lott    schedule 01.10.2010
comment
@ S.Lott, опубликуй свой ответ. Я голосую за это, так как это полезно для меня. Смотрите мое обновление в основном посте   -  person Gennady Vanin Геннадий Вани&    schedule 01.10.2010


Ответы (1)


«Сторно-транзакции» или «Реверсивные транзакции» хорошо резюмируются. Во многих местах.

http://richardatopenbravo.blogspot.com/2010/02/way-that-transactions-are-reversed-in.html

http://help.sap.com/saphelp_46b/helpdata/en/d2/6f921f415e11d182b10000e829fbfe/content.htm

http://forum.wordreference.com/showthread.php?t=1875166

Не путайте внедрение программного обеспечения с бухгалтерским учетом. Разумная реализация может обойтись минимальной блокировкой. Однако это ничего не значит. Возможно, вы заслужили упрек, потому что программное обеспечение (а) плохо спроектировано и (б) требует тщательной блокировки из-за плохого дизайна.

Какие возможны проблемы...?

Поскольку мы не знаем, насколько хорошо или плохо написано программное обеспечение, об этом невозможно догадаться. Они могут знать что-то о своей системе, чего не знали вы.

Простая система сторно-транзакций должна быть простой в реализации. На самом деле, это должно быть тривиальным.

Пара таблиц «только для вставки» все еще может столкнуться с взаимоблокировками, если во время вставки используется блокировка на уровне страницы.

Таблица A, страница 1 содержит вставку в транзакцию X.

В таблице B на странице 2 есть вставка в транзакции Y.

В таблице B на странице 2 есть вставка в транзакции X.

Таблица A, страница 1 содержит вставку в транзакции Y.

Единственный способ избежать взаимоблокировок — заставить всю систему использовать одну таблицу. Или ограничить все транзакции одной таблицей. Или используйте единую блокировку для всей базы данных.

Если у вас есть операции с несколькими таблицами (и блокировка на уровне страницы), у вас все равно будут потенциальные взаимоблокировки даже при операциях только для вставки. Понятно, что редко, но все же возможно.

person S.Lott    schedule 01.10.2010
comment
Или используйте единую блокировку для всей базы данных. Э, это называется однопользовательская система. Конечно, вы устранили взаимоблокировки, но сериализовали все транзакции. - person PerformanceDBA; 02.11.2010
comment
... даже с операциями только для вставки. Понятно, что это редко, но все же возможно. Это не редкость. Вставки вызывают блокировки в различных точках: куча; индексные страницы; когда строки должны быть перемещены. Когда количество пользователей увеличивается, количество блокировок и, следовательно, взаимоблокировок увеличивается. Это обычное дело. - person PerformanceDBA; 02.11.2010
comment
@PerformanceDBA: блокировка SQL-сервера — это не то же самое, что тупик. При наличии одного блокируемого ресурса тупиковые ситуации логически невозможны. - person S.Lott; 02.11.2010
comment
@PerformanceDBA: вставки вызывают блокировки в разных точках. Верно, но они редко вызывают взаимоблокировку, потому что транзакции вставки — как правило — используют мало ресурсов и мало конкурируют за ресурсы. - person S.Lott; 02.11.2010
comment
@S.Lott: я повторюсь. Единственный способ избежать взаимоблокировок — заставить всю систему использовать одну таблицу. Это совершенно неверно, SQL-сервер будет блокировать (и, следовательно, блокировать и, следовательно, взаимоблокировать) столько же внутри таблицы. В многопользовательской системе вы только что гарантировали, что блокировки расположены близко друг к другу (а не распределены по многим таблицам) и, таким образом, гарантировали больше блокирующих блокировок и взаимоблокировок. Поскольку вы ничего не знаете о блокировке SQL Server, я предлагаю вам (а) не писать в этой теме и (б) не спорить с теми, кто знает. - person PerformanceDBA; 03.11.2010
comment
@S.Lott: потому что транзакции вставки - как правило - требуют мало ресурсов и мало борьбы за ресурсы. Опять чепуха. Очевидно, вы понятия не имеете, что такое транзакция. Вставка - это оператор (в пределах xact), а не транзакция ... если у вас нет транзакций, что означает отсутствие целостности данных, безопасности или согласованности. Черт, если у вас проблемы с блокировкой, вы просто удаляете транзакции. Веселый. И вкладыши действительно требуют значительных ресурсов. Почитайте тему, прежде чем писать дальше. - person PerformanceDBA; 03.11.2010
comment
@PerformanceDBA: при наличии только одного ресурса взаимоблокировка невозможна. Тупик требует нескольких ресурсов. Это вопрос определения. Если вся система находится в одной таблице, единственная и единственная таблица эффективно сериализует все блокировки. Но без борьбы за ресурсы тупик невозможен. Если у вас есть система баз данных с недетерминированной блокировкой нескольких скрытых ресурсов, взаимоблокировка теоретически возможна. Я бы не стал использовать эту систему в качестве примера чего-либо, кроме проблем, вызванных недетерминированной блокировкой. - person S.Lott; 03.11.2010
comment
@PerformanceDBA: Очевидно, вы понятия не имеете, что такое транзакция. Хорошо знать. Мой 30-летний опыт работы со вставными транзакциями показывает, что они редко блокируются. Мне жаль, что ваши транзакции вставки так плохо себя ведут. Я заметил, что транзакции вставки обычно содержат в основном операторы вставки. И они, как правило, приобретают ресурсы в надежном, детерминированном порядке и редко заходят в тупик. Очевидно, что ваш опыт отличается от моего. Я не бросаю вызов вам. Мой опыт, кажется, отличается от вашего. Я не понимаю, почему, но вы, конечно же, счастливы указать на это. Наслаждаться. - person S.Lott; 03.11.2010
comment
@S.Lott: Тот факт, что, даже после того, как вы указали на вышеизложенное, что требует точности от способного человека, вы продолжаете говорить о вставках транзакций, подкрепляет точку зрения (уже доказано) что вы ничего не знаете о транзакциях. Я не буду заниматься этим. Хватит тратить время людей попусту. - person PerformanceDBA; 03.11.2010
comment
@PerformanceDBA: Что? вы продолжаете говорить о вставных транзакциях. Вопрос касается Storno Accounting, который в значительной степени основан на вставных транзакциях; обычно один иногда два оператора вставки. Какова ваша позиция? Как мы можем избежать разговора о транзакциях вставки (CRUD — часть C)? Какую точку вы пытаетесь сделать? - person S.Lott; 03.11.2010
comment
@Slott: Э-э, вы упустили контекст, прочитайте вопрос еще раз, он (неоднократно) о блокировках, блоках и взаимоблокировках; во-вторых, в системе только для вставки. А вы публикуете 101К пунктов полной дезинформации. Перелистывание туда-сюда во время допроса разрушило ваш авторитет. Посмотрите, сможете ли вы различать финансовые и SQL-транзакции при написании. Хватит тратить время людей попусту. - person PerformanceDBA; 03.11.2010
comment
@PerformanceDBA: Понятно. Очень ясно. Перелистывание туда-сюда во время допроса разрушило ваш авторитет. Что бы это ни значило, вы абсолютно правы. Спасибо, что прояснили это. Это действительно очень помогает уточнить и исправить ответ. Я обязательно приму к сведению ваш совет. - person S.Lott; 03.11.2010