sql >> Base de Datos >  >> RDS >> Mysql

Rendimiento de bloqueo de nivel de fila de InnoDB:¿cuántas filas?

No está del todo claro lo que estás preguntando. El bloqueo garantiza que solo un usuario intente modificar una fila determinada en un momento dado. El bloqueo a nivel de fila significa que solo la fila que están modificando está bloqueada. Las alternativas habituales son bloquear toda la tabla durante la modificación o bloquear algún subconjunto de la tabla. El bloqueo a nivel de fila simplemente reduce ese subconjunto de filas al número más pequeño que aún garantiza la integridad.

La idea es permitir que un usuario modifique una cosa sin impedir que otros usuarios modifiquen otras cosas. Sin embargo, vale la pena señalar que, en algunos casos, esto puede ser algo así como un falso positivo, por así decirlo. Algunas bases de datos admiten el bloqueo a nivel de fila, pero hacen que un bloqueo a nivel de fila sea considerablemente más costoso que bloquear una parte más grande de la tabla, lo suficientemente más costoso que puede ser contraproducente.

Editar:Tu edición de la publicación original ayuda, pero en realidad no mucho. En primer lugar, los tamaños de las filas y los niveles de hardware involucrados tienen un gran efecto (insertar una fila de 8 bytes en una docena de discos duros SAS de 15 000 seccionados es solo un poco más rápido que insertar una fila de un megabyte en un disco duro de una sola clase de consumidor). ).

En segundo lugar, se trata en gran medida de la cantidad de usuarios simultáneos, por lo que el patrón de inserción marca una gran diferencia. 1000 filas insertadas a las 3 AM probablemente no se noten en absoluto. 1000 filas insertadas uniformemente a lo largo del día significa un poco más (pero probablemente solo un poco). 1000 filas insertadas como un lote justo cuando otros 100 usuarios necesitan datos inmediatamente podrían hacer que despidan a alguien (especialmente si uno de esos 100 es el propietario de la empresa).