Tempo aproximado para leitura:00:04:00 min
Ocorrência
Durante o processamento do sistema, ocasionalmente ocorre um travamento de duas ou mais threads de banco em uma mesma tabela.
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) – ADVPL – A partir da versão 12.1.16
Causa
Este erro ocorre por conta de um evento chamado deadlock, ao qual a transação 1 tenta efetuar o bloqueio de uma tabela, porém essa tabela já se encontra travada pela transação 2, contudo a transação 1 precisa da tabela a qual a transação 2 está travando:

Solução
Utilizar o parâmetro MV_FATTRAV para efetuar travamento (lock) sob demanda dos registros.
Por padrão o Protheus efetua o lock total da tabela ao efetuar um operação de manipulação de dados, uma vez que este parâmetro esteja configurado com uma das tabelas acima (SA1, SA2 ou SB2), será efetuado um espécie de lock on demand (travamento sob demanda), ao qual ao invés de travar a tabela completamente, irá tratar apenas o registro utilizado na operação, diminuindo a possibilidade de deadlock.
Lembrando que a utilização deste parâmetro diminui a possibilidade de deadlock durante o processamento de rotinas que manipulem as três tabelas acima citadas, contudo não extingue a possibilidade da ocorrência do mesmo.
Saiba mais
Parâmetro MV_FATTRAV
0 Comentários