fundamentos del programador de bases de datos de estancamiento

Punto muerto, creo que todo el mundo está familiarizado con, hablar claro, hay tanto comiendo su cuenco, mirando el uno al otro, lo que no hay manera de comer todos los lados.


Por ejemplo, un comerciante compró una cosa, va a completar una serie de operaciones de bases de datos muy complejos, que pueden simplificarse en dos operaciones, la cantidad de cuentas A -50, entonces la cantidad de negocios es 50. Al mismo tiempo, las pequeñas empresas también completaron dos sólo esta última operación, revisaron un reembolso A, por lo que la cantidad de negocios por 100, 100 para aumentar la cantidad de una cuenta. Así, frente a una operación que hicimos modificaciones Un bloqueo de registro de la cuenta, la cuenta se reducirá en un 50 A, pero la transacción no se ha completado, la necesidad de aumentar de 50 a cuenta de comerciante. Operando detrás de un bloqueo de registro Negocio hecho, la cuenta del comerciante menos 100, si la transacción no se ha completado también es necesario esperar a que los bloqueos de fila reciben Atléticos, a continuación, aumentar la cantidad de cuentas 100.

De esta forma, la operación anterior a bloqueos de registro tomadas del usuario, a la espera para bloquear el negocio detrás de la transacción comercial adquiere un bloqueo, a la espera de bloqueos de usuario, dos personas no se puede cumplir, la transacción no se puede completar, la formación de un callejón sin salida. Por eso, cuando se encontró con Mysql punto muerto, ¿cómo hacerlo? MySQL es por tal configuración, innodb_lock_wait_timeout. Es decir, si las dos partes en un punto muerto, después de más de este tiempo, las dos partes en libertad, una vez más, esta vez en caso de que no entre en conflicto. Sin embargo, si este tiempo es demasiado largo, no podemos dejar que los usuarios esperan a unas pocas decenas de segundos y vuelva a intentarlo, si ponemos este tiempo es demasiado corto, por lo que se pueden adherir a como lesión accidental, tenía esta declaración, se ejecutará la aplicación de dos segundos, el conjunto de resultados de tiempo de espera es de un segundo, el final de la transacción se deshace, igual al blanco seco.

MySQL también proporciona otra función es comprobar el punto muerto, innodb_deadlock_detect, si nos volvemos este interruptor a tiempo, cada vez que se ejecuta una instrucción no recibe la cerradura, se irá para atravesar el otro hilo, ver si es un callejón sin salida . En circunstancias normales, no recomiendo girar este interruptor, por ejemplo, si hay 1.000 hilos actualizar simultáneamente la misma fila, cada transacción sólo está haciendo una sola cosa, porque los otros 999 hilos se bloquean, es necesario atravesar entre sí, para ver si la formación de un punto muerto, lo que resulta en una sobrecarga significativa.

Entonces, ¿cómo podemos evitar este estancamiento se encontró con ella? Creo que debe haber en el tiempo de diseño de negocios, que tratan de evitar una posible situación de bloqueo. En primer lugar, debemos evitar el ejemplo anterior de dicho diseño razonable, ¿por qué no ser capaces de hacer el pago de los reembolsos están diseñados para funcionar cantidad de usuarios, entonces la cantidad de empresas que operan hacer? Ya hemos mencionado anteriormente, el alto grado de concurrentes SQL declaración sobre la parte posterior de los asuntos, más propicio a la eficiencia de la operación. Al tiempo que reduce la posibilidad de estancamiento, hacer ambas cosas.

Supongo que te gusta

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