Как избежать блокировок базы данных - PullRequest
4 голосов
/ 29 января 2010

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

Это приложение j2ee, использующее JPA и спящий режим. База данных DB2 8.1 на Z / OS настроена на блокировку страниц (это требование для компании).

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

Существуют ли "лучшие практики" для снижения вероятности тупика?

1 Ответ

6 голосов
/ 29 января 2010

«Существуют ли« лучшие практики »по снижению вероятности тупика?»

Deadlock означает 2 (или более) процесса, 2 (или более) ресурса и два разных порядка доступа.

Процесс 1 должен получить A и B.

Процесс 2 должен получить B и ждать A.

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

Поскольку вы зашли в тупик на всей странице, трудно гарантировать, что все получат одну и ту же страницу, чтобы начать свою транзакцию.

Вы можете попытаться уменьшить конфликты, убедившись, что строки широко перемешаны между страницами.

Вы можете попытаться уменьшить конфликты, введя строку «Вы должны получить это первым», которая будет эффективно использовать однопоточные приложения.

...