Eu estava recentemente lutando com um problema semelhante. Descobriu-se que o banco de dados não tinha índices em chaves estrangeiras. Isso fez com que a Oracle bloqueasse muito mais registros do que o necessário, o que rapidamente levou a um impasse durante a alta simultaneidade.
Aqui está um excelente artigo com muitos detalhes, sugestões e detalhes sobre como corrigir um impasse:http://www.oratechinfo.co.uk/deadlocks.html#unindex_fk