noções básicas do programador de impasse banco de dados

Impasse, creio que todos estão familiarizados com, franqueza, não são tanto comer sua bacia, olhando para o outro, resultando em nada para comer todos os lados.


Por exemplo, um comerciante comprou uma coisa, vai completar uma série de operações de banco de dados muito complexos, que pode ser simplificada em duas operações, a quantidade de contas A -50, em seguida, a quantidade de negócios é de 50. Ao mesmo tempo, as pequenas empresas também completou dois apenas esta última operação, analisou um reembolso A, de modo que a quantidade de negócios por 100, 100 para aumentar a quantidade de A conta. Então, na frente de uma operação que fizemos modificações Um bloqueio de linha da conta, a conta será reduzida em 50 A, mas a transação não for concluída, a necessidade de aumentar 50 a comerciante conta. Operando atrás de um bloqueio de linha fez negócios, a conta do comerciante, menos 100, se a transação não for concluída também é necessário aguardar bloqueios de linha começar a, em seguida, aumentar a quantidade de contas 100.

Desta forma, a transação anterior para bloqueios de linhas tiradas do usuário, esperando para bloquear o negócio por trás da transação comercial adquire um bloqueio, à espera de bloqueios de usuário, duas pessoas podem não ser atendidos, a transação não pode ser concluída, a formação de um impasse. Então, quando o MySQL encontrou impasse, como é que você faz isso? MySQL é por uma tal configuração, innodb_lock_wait_timeout. Ou seja, se os dois lados em um impasse, depois de mais de desta vez, os dois lados solta, mais uma vez, desta vez no caso de ele não entre em conflito. No entanto, se esse tempo é muito longo, não podemos permitir que os usuários esperar por algumas dezenas de segundos e repetir isso, se colocarmos este tempo é muito curto, para que eles possam ser respeitados como lesão acidental, teve esta declaração irá executar a implementação de dois segundos, o tempo de espera definido resultados é de um segundo, a operação final é rolada para trás, para igualar a seco branco.

MySQL também fornece outra função é verificar o impasse, innodb_deadlock_detect, se ligar este interruptor tempo, cada vez que uma instrução é executada não obter o bloqueio, ele irá para atravessar o outro segmento, ver se ele é um impasse . Em circunstâncias normais, eu não recomendo transformando essa opção, por exemplo, se existem 1,000 tópicos atualizar simultaneamente a mesma linha, cada transação está apenas fazendo uma coisa só porque os outros 999 tópicos ficar trancado, é necessário atravessam um ao outro, para ver se a formação de um bloqueio, o que resulta em sobrecarga significativa.

Então, como podemos evitar esse impasse encontrou isso? Eu acho que deve ser no tempo de design de negócios, eles tentam evitar uma possível situação de impasse. Primeiro de tudo, devemos evitar o exemplo acima de tal projeto razoável, por que não vamos ser capazes de fazer o pagamento para as restituições são projetados para operar montante usuário, então a quantidade de empresas que operam fazer? Nós já mencionado anteriormente, o alto grau de Sql concorrente declaração sobre a volta de coisas, mais propício para a eficiência da transação. Enquanto reduz a possibilidade de impasse, fazer as duas coisas.

Acho que você gosta

Origin www.cnblogs.com/sharan-coco/p/12641822.html
Recomendado
Clasificación