Pregunta

Así que después de leer en DOP / PHP / MySQL: transacción frente ejecución directa en lo que respecta a los problemas de rendimiento que estaba pensando lo hice algunas investigaciones sobre el bloqueo de tablas en MySQL.

http://dev.mysql.com/ doc / RefMan / 5,0 / en / de mesa locking.html

  

bloqueo de tablas permite a muchas sesiones   leer desde una mesa al mismo tiempo,   pero si quiere una sesión para escribir en un   tabla, primero debe obtener exclusiva   acceso. Durante la actualización, todos los demás   sesiones que quieran acceder a este   en particular tabla debe esperar hasta que el   actualización se realiza.

Esta parte me llamó la atención sobre todo porque la mayoría de nuestras consultas habrá cambios en lugar de inserciones. Me preguntaba si se crea una tabla llamada foo en el que todas las actualizaciones / inserciones se llevaron a cabo y luego una vista llamada foo_view (una copia de foo, o tal vez foo y una articulación de varias otras mesas más foo) en el que se produjeron los selecciona, seguiría siendo producirse este problema de bloqueo?

Es decir, seleccionaría las consultas en foo_view todavía tienen que esperar a una actualización a fin de foo?

Otra pregunta breve preguntó mi colega. ¿Esto afecta el almacenamiento en caché? Es decir. Si se almacena en caché el SELECT se golpeó el caché y los resultados de retorno, o va a esperar a que el bloqueo de terminar primero?

¿Fue útil?

Solución

Su punto de vista experimentará el mismo bloqueo como las tablas subyacentes.

Desde la página de MySQL Referencia sobre de bloqueo :

  

MySQL otorga bloqueos de tabla de escritura como   siguiente:

     
      
  1. Si no hay bloqueos en la tabla, poner un bloqueo de escritura en él.
  2.   
  3. Si no, poner la solicitud de bloqueo en la cola de bloqueo de escritura.
  4.   
     

MySQL otorga leer la tabla de bloqueos como   siguiente:

     
      
  1. Si no hay bloqueos de escritura sobre la mesa, puso un bloqueo de lectura en él.
  2.   
  3. Si no, poner la solicitud de bloqueo en la cola de bloqueo de lectura.
  4.   

Es importante mencionar que esto depende del motor de base que está utilizando. MyISAM seguirá los pasos anteriores y bloqueo toda la tabla (incluso si es dividido en varias particiones) donde un motor como InnoDB hará fila de bloqueo nivel en su lugar.

Si usted no está llegando a los puntos de referencia de rendimiento necesarios con MyISAM y que ha demostrado su cuello de botella está a la espera de bloqueos de tabla a través de actualizaciones, sugeriría cambiar el motor de almacenamiento de la tabla de InnoDB.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top