Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou tanto um grande problema em meu banco de dados, devido às seguintes questões:
1 - O mesmo está MUITO normalizado, com chaves estrangeiras para tudo quando é lado e muitas tabelas de relacionamento.
2 - Ele está sendo acessado por várias pessoas (cerca de 300) simultaneamente, ou seja: As linhas de suas tabelas são alteradas a todo instante por usuários diferentes.
3 - Rotinas grandes que buscam dados muito específicos. Muito INNER JOIN entre tabelas robustas.
4 - Banco de Dados muito extenso. Mais de 70 tabelas, algumas delas com mais de 10 milhões de linhas.
Bom, sei que foi feita muita coisa errada na montagem deste banco e que o mesmo não deveria estar assim, mas como estou sozinho neste projeto, não tenho tempo, saco e nem condições de re-estruturá-lo sozinho.
O problema real é: Às vezes updates simples (como UPDATE X SET Y = Y + Z + 1) retornam o erro "Deadlock found when trying to get lock." e isso está causando erros terríveis na integridade do mesmo.
Péssima solução adotada por mim: Tentar dar o UPDATE 5 vezes. Assim que o retorno do banco for positivo, parar de tentar.
Porém não tem como eu colocar esse WHILE em todos os lugares! Tem alguma variável do banco que permite pré configurar isso?
Exemplo tosco para facilitar o entendimento: procuro algo do tipo repeat_query_when_deadlock_is_found = 5.
Agradeço desde já a atenção de todos. Peço desculpas pela falta de fluidez do texto e qualquer ajuda ou observação é válida.
Carregando comentários...