Para executar um aplicativo de two-phase
commit, revise as seguintes recomendações para evitar
que um processamento de uma região ou mensagem pare devido
à contenção de recursos.
- Tenha tantas regiões do
programa de processamento de mensagens (MPP, message processing program) quantas possíveis em execução
para assegurar que os aplicativos de two-phase commit não compitam
por uma região, pois uma transação dentro do aplicativo de two-phase commit
usa uma região de MPP pela duração da transação inteira do two-phase
commit.
- Se for executado um número de transações do IMS
dentro de uma transação de two-phase commit, ao menos essa quantidade de regiões de MPP deverá estar disponível
para evitar parar o aplicativo de two-phase commit.
- Para se proteger contra uma transação que talvez fique aguardando muito
tempo pelos recursos, configure um valor de tempo limite apropriado
para cada interação que esteja ocorrendo na transação global.
- Evite um número excessivo de interações de banco de dados executando em uma transação two-phase commit. Se diversas transações do IMS forem usadas
em uma transação de two-phase commit, elas poderão competir ou bloquear
uma tentativa de atualizar ou modificar os mesmos dados. Para evitar esse
problema, grave um aplicativo que impedirá que um usuário processe entradas
duplicadas na mesma operação de two-phase commit.
- Considere
configurar o gerenciador interno de bloqueio de recursos (IRLM, internal resource lock manager)
ou o gerenciador de bloqueios do Program Isolation (PI) para usar um tamanho de bloco
que seja tão pequeno quanto a menor entrada nesse banco de dados. Tamanhos maiores de blocos
podem ter duas transações competindo pelas entradas que podem até mesmo não serem iguais, mas ainda
residirem próximas no disco.
- Se forem executadas diversas interações usando a mesma transação do IMS no mesmo banco de dados do IMS em uma transação global (unidade de trabalho),
cada interação com essa transação do IMS deve ser executada em uma região separada do MPP. A transação do IMS deverá ter um valor SCHDTYP=PARALLEL
e PARLIM=0, para indicar que a transação do IMS poderá executar em várias regiões MPP e que sempre atenderá aos requisitos de planejamento (o número de mensagens será maior que zero) para processar cada interação em uma nova região MPP.
- Se uma região for interrompida
e nenhum valor de tempo limite de execução for configurado,
será possível terminar a tentativa de executar uma transação que esteja interrompendo a região do MPP
ao emitir um comando /STOP REGION do IMS
com o parâmetro para encerrar a transação de forma anormal. Por exemplo, /STOP REGION reg# ABDUMP tranname.
Esse comanda recupera a transação para essa interação específica e libera
a região do MPP.