2012-05-14 5 views
2

В последнее время я наблюдаю какой-то тупик случайным образом один или два раза в день, поэтому я посмотрел код &, который мы помещаем в одну транзакцию. В то же время я хочу увеличить ini_trans до 5 на Oracle, чтобы он мог обрабатывать параллельный доступ. Приложение использует схему «app_user», которая вызывает схему «app_admin» (app_admin владеет таблицей). & одновременно осуществляется одновременный доступ к базе данных несколькими экземплярами приложения. Должен ли я увеличить ini_trans на app_user или app_admin или на обоих ?. Благодарю.Oracle Deadlock

+0

1) В чем именно ваше сообщение об ошибке? 2) Вы просмотрели файл трассировки, созданный для тупика? Он расскажет вам, какие объекты задействованы. 3) Вы уверены, что это не вызвано тем, что ваш код запрашивает ресурсы в непоследовательном порядке? Я видел много тупиков, но никогда, потому что некоторые настройки Oracle были слишком низкими. –

+0

1. Ошибка SQL: 60, SQLState: 61000 ORA-00060: ТУПИК обнаружена во время ожидания ресурса Не удалось синхронизировать состояние базы данных с сессией org.hibernate.exception.LockAcquisitionException: Не удалось выполнить JDBC пакетного обновления 2. Да, был задействован объект, я исправил код для обработки всего в одной транзакции, чтобы убедиться, что он не вызывает приложение. 3. Некоторое время в этой области не было изменения кода, и все это внезапно началось после добавления нескольких ограничений на базу данных, которая обеспечивает целостность данных. Благодарю. – user1388356

+0

Какие ограничения вы добавили? Вы добавили новые индексы? Возможно, что тот же самый запрос создаст тупик, если план запроса изменится между выполнением. Например, один сеанс использует полное сканирование таблицы и обновляет строки в порядке A B. И другой сеанс использует индекс и обновляет строки в порядке B A. –

ответ

1

Я думаю, что это было бы MAXTRANS, которое вы бы хотели рассмотреть, а не INITRANS, но в 10.2 вверх оно устарело, а по умолчанию используется значение 255.

Есть ли какие-либо растровые индексы? Они хороши для того, чтобы вызывать споры.

+0

Нет индексов bitmap, только обычные индексы. Я читал эту страницу http://www.dba-oracle.com/t_initrans.htm и думал, что мне нужно увеличить INITRANS. Я использую Oracle 10g, когда я проверил запрос ini_trans = 1 & max_trans = 255. 1.Какой мне нужно изменить ini_trans или max_trans? и 2. Каковы наилучшие значения для этих двух ?. Благодарю. – user1388356

+0

Сколько пользователей, по вашему мнению, будет одновременно получать доступ к блоку в таблице? –

+0

Параллелизм обрабатывается JBOSS Container Managed Persistence, может быть примерно у нас есть 50 или 100 экземпляров JMS. Все экземпляры будут использовать одну и ту же пользовательскую схему «app_user» для доступа к таблицам app_admin. – user1388356

2

Here описал возможные причины проблемы. Следующий совет помог мне: «индексировать внешний ключ, а тупик исчезает». Проверьте внешние ключи, ссылаясь на таблицу, и попробуйте их индексировать.