У нас есть веб-приложение, построенное с использованием ASP.NET 4.0 (C#), и мы используем SQL Server 2005 в качестве бэкэнд.Частые блокировки SQL Server 2005
само приложение является механизмом документооборота, где каждая запись засвидетельствована четырьмя ролевыми каналами в течение 18 дней в месяц.
У нас примерно 200 тыс. Записей, которые поступают 1-го числа каждого месяца.
в течение 18 дней - некоторые люди ищут и подтверждают записи, тогда как администратор системы может изменять право собственности на эти записи.
Мой вопрос или беспокойство в том, что мы часто сталкиваемся с проблемами взаимоблокировки в базе данных.
У некоторых пользователей может быть 10000 записей в их кошечке, и они пытаются засвидетельствовать все записи за один раз, тогда как системный администратор может также изменить право собственности на несколько тысяч записей, и в этот момент мы получаем тупик и даже когда два или более пользователя с ладонями счетов пытаются засвидетельствовать - мы получаем тупики.
Мы активно используем хранимые процедуры с транзакциями. Есть ли способ кодирования таких ситуаций?
или просто избегать взаимоблокировок.
Извинения за то, что вы спрашиваете в такой случайной манере, но любые подсказки или советы приветствуются, и если вам нужна дополнительная информация, чтобы поднять эту проблему, то дайте мне знать.
благодаря
Brilliant; спасибо за ваши предложения - позвольте мне немного почитать. –
Еще две вещи: 4) Во время транзакции вы должны исключить любое взаимодействие с пользовательским интерфейсом (так что избегайте «начинать транзакцию, ждать ввода пользователя, вставлять данные, завершать транзакцию»). 5) Если у вас длительные транзакции, которые влияют на многие строки, вы можете сохранить эти строки в переменных таблицы и выполнить окончательные модификации данных в конце транзакции (например, «BEGIN TRAN; ... INSERT INTO @TableVarA SELECT ... FROM. ..UPDATE @TableVarA ... INSERT INTO @TableVarB ... DELETE @TableVarB ... INSERT dbo.TableA SELECT FROM @TableVarA; UPDATE dbo.TableB SET ... FROM @TableVarB; COMMIT; '). Я использовал это решение с хорошими результатами. –