Вот моя ситуация (SQL Server):
У меня есть веб-приложение, которое использует nHibernate для доступа к данным, и еще 3 настольных приложения. Все имеют доступ к одной и той же базе данных и могут использовать одни и те же таблицы одновременно.
Теперь, с помощью NH, я пакетирую выборки, чтобы загрузить агрегат со всей его иерархией - так что я бы увидел, что от 4 до 7 выборок выдаются одновременно (не уверен, имеет ли это значение).
Каждые несколько дней одно из приложений будет получать сообщение: «Транзакция выбрана жертвой тупика». (это обычно появляется на выбор)
Я попытался перейти на изоляцию моментальных снимков в базе данных, но это не помогло - в итоге я получил:
Транзакция изоляции моментального снимка прервана
из-за конфликта обновлений. Вы не можете использовать
изоляция моментального снимка для доступа к таблице
«...» прямо или косвенно в
база данных "..." для обновления,
удалить или вставить строку, которая имеет
был изменен или удален другим
сделка. Повторите транзакцию или
изменить уровень изоляции для
обновить / удалить оператор.
Какие у вас есть предложения для этой ситуации? Что я должен попробовать или что я должен прочитать, чтобы найти решение?
EDIT:
На самом деле там нет рейдов :). Количество пользователей в день небольшое (я скажу 100 в день - с сотнями небольших заказов в напряженный день), база данных немного больше - около 2 ГБ и растет быстрее с каждым днем.
Это бизнес-приложение, которое обрабатывает заказы, электронные письма, отчеты, счета и тому подобное.
Ленивая загрузка в этом случае не подходит.
Полагаю, лучше всего внимательно посмотреть на эти индексы.