macs Posted September 19, 2023 Report Share Posted September 19, 2023 Pessoal, estou com um problema constante de lock de registro no meu sistema. Alguém já passou por algo parecido? Existe alguma configuração diferente de Autocommit? Todos os comandos que manipula dados no sistema segue essa sequência: Exemplo: SR_BeginTransaction() TRY nErr := ::oConexao:exec( SR_SQLCodeGen( apCode, aValues, ::oConexao:nSystemID ) ) SR_CommitTransaction() CATCH oErr SR_RollBackTransaction() MsgInfo( oErr:Description ) RETURN END SR_EndTransaction Erro retornado: SQLExecDirect Error (1205) Lock wait timeout exceeded; try restarting transaction - Lock wait timeout exceeded; try restarting transaction Command sent to database : UPDATE `requisicoes_exames` SET `sit_exame` = 'I' WHERE `id_requisi` = 781 AND `id_tpexame` = 1 Steatment handle : Connection handle : RetCode : 1205 SR_MYSQL:RUNTIMEERR Linha : 904 SR_MYSQL:EXEC Linha : 394 Quote Link to comment Share on other sites More sharing options...
alex2002 Posted September 19, 2023 Report Share Posted September 19, 2023 Boa noite meu amigo. Isso daí possivelmente é configuração de ambiente do MySQL. Você tem que mudar alguns campos no arquivo de configuração do MYSQL/MariaDB. O campo principal aí deve ser: o wait_timeout O meu arquivo My.INI do MariaDB é assim: /////////////////////////////////////////////////////////// [mysqld] datadir=C:\Program Files\MariaDB 10.6\data port=3307 innodb-page-size=16384 innodb_buffer_pool_size=5096M max_allowed_packet = 64M wait_timeout = 6000 skip-name-resolve sql-mode = "" sysdate-is-now = 1 innodb = FORCE innodb-strict-mode = 1 general_log = 0 # CACHES AND LIMITS # tmp-table-size = 16M max-heap-table-size = 16M query-cache-type = 0 query-cache-size = 0 max-connections = 100 thread-cache-size = 50 open-files-limit = 65535 table-definition-cache = 1024 table-open-cache = 2048 # INNODB # innodb-flush-method = O_DIRECT innodb-log-files-in-group = 2 innodb-log-file-size = 64M innodb-flush-log-at-trx-commit = 1 innodb-file-per-table = 1 innodb-buffer-pool-size = 2G [client] port=3307 plugin-dir=C:/Program Files/MariaDB 10.6/lib/plugin ///////////////////////////////////////////////////////////////////////////// Lembrando que esta configuração é a que coloco para maioria dos clientes e rodam sistemas pesados. Um abraço, Alexandre Pereira Quote Link to comment Share on other sites More sharing options...
macs Posted September 20, 2023 Author Report Share Posted September 20, 2023 Obrigado amigo... irei testar e darei um feedback se o problema foi resolvido! Outra coisa, você está usando o MariaDb ou MySql? Qual a versão? Quote Link to comment Share on other sites More sharing options...
emotta Posted September 20, 2023 Report Share Posted September 20, 2023 Você está colocando um MSGINFO dentro de um BEGIN/END TRANSACTION, vc nunca deve fazer isso pois se acontece algum erro a mensagem será apresentada na tela e até o usuário dar ok a sua transação fica aberta e isso gera um lock no banco. Outro detalhe é que você deve fazer suas transações de forma que se der esse tipo de erro sejam repetidas por algumas vezes. É comum o banco de dados, por algum motivo, dar por exemplo deadlock e o correto é ser feito o rollback e ser enviado o mesmo comando e então o banco aceita. Se não sabe o que é deadlock sugiro pequisar no youtube sobre o assunto, basicamente ocorre quando uma conexão fica aguardando o unlock de outra conexão e essa outra fica aguardando o unlock da primeira conexão, ou seja, uma fica esperando a outra e o servidor do banco precisa escolher uma pra derrubar e priorizar a outra. Pesquise sobre o assunto. Eu não trabalho com MySql, mas o que disse acima são informações úteis para qualquer banco de dados que você trabalhe. O comportamento acima é de qualquer SGDB. Abraços Quote Link to comment Share on other sites More sharing options...
alex2002 Posted September 20, 2023 Report Share Posted September 20, 2023 12 horas atrás, macs disse: Obrigado amigo... irei testar e darei um feedback se o problema foi resolvido! Outra coisa, você está usando o MariaDb ou MySql? Qual a versão? De um modo geral uso o MariaDB 10.6, mas os clientes trabalham com as mais variadas versões. Inclusive alguns usam o MySQL mesmo. Mas esta configuração de ambiente é para o MariaDB, porém os campos são os essenciais para configuração de ambos (Maria/MySQL). Um abraço, Alexandre Pereira Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted October 16, 2023 Report Share Posted October 16, 2023 Fou muito bom aprender sobre "deadlock" neste link: https://www.youtube.com/watch?v=HnB1e21tuvA Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.