Когда мне следует беспокоиться о размере транзакции? - PullRequest
1 голос
/ 14 февраля 2009

У меня есть функция, где нам нужно объединить записи пользователей. Пользователь выбирает пользователя, которого нужно оставить, и пользователя, которого нужно удалить.

У нас есть 59 связей с записями пользователей в нашей базе данных, поэтому для каждой из них мне нужно сделать:

UPDATE (Table) set UserNo=(userToKeep) WHERE UserNo=(userToDiscard)

, а затем УДАЛИТЬ userToDiscard и их пользовательские настройки (118).

Должен ли я беспокоиться о размере транзакции? Это MS-SQL 2005.

Могу ли я что-нибудь сделать?

Спасибо

Ответы [ 4 ]

3 голосов
/ 14 февраля 2009

Вы проверяли, сколько времени на самом деле занимает процесс? Как часто пользователи объединяются?

Если у вас есть индексы для идентификатора пользователя в каждой из этих таблиц (и я думаю, что в любом случае это будет нормально), то даже с 59 таблицами это не займет слишком много времени для выполнения этих обновлений и удалений. Если вы на самом деле объединяете пользователей только пару раз в неделю, то такой небольшой всплеск не должен быть проблемой. В худшем случае, кто-то должен ждать дополнительные пару секунд, чтобы сделать что-то один или два раза в неделю.

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

0 голосов
/ 15 февраля 2009

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

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

0 голосов
/ 15 февраля 2009

Слияние пользователей не похоже на функцию, которая будет использоваться очень часто. Учитывая это, есть вероятность 98%, что вам не нужно беспокоиться о размере транзакции (оставшиеся 2% зарезервированы для возможных взаимоблокировок)

0 голосов
/ 14 февраля 2009

Это зависит от того, насколько велика ваша пользовательская таблица и какие у вас индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...