Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Límite de inserts en mysql

Estas en el tema de Límite de inserts en mysql en el foro de Mysql en Foros del Web. Buenos días, me gustaría saber como funciona exactamente cuando se hace un INSERT en una tabla MySql. Se ponen los inserts en una cola? Tengo ...
  #1 (permalink)  
Antiguo 28/08/2013, 05:49
 
Fecha de Ingreso: agosto-2012
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Límite de inserts en mysql

Buenos días,

me gustaría saber como funciona exactamente cuando se hace un INSERT en una tabla MySql. Se ponen los inserts en una cola?

Tengo varias aplicaciones que hacen INSERTS a una tabla, en esa misma tabla también hago un SELECT y UPDATE con otra aplicación.

El tiempo de ejecución de SELECT y UPDATE me varía dependiendo de los INSERTS (más aplicaciones que hacen inserts más tarda, 1 sola aplicación haciendo inserts más rápido es)

No se si me he explicado bien.

Gracias.
  #2 (permalink)  
Antiguo 28/08/2013, 07:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Límite de inserts en mysql

Cualquier base de datos, y no sólo MySQL, se verá afectada por una alta concurrencia sobre la misma tabla. Eso es más que obvio.
Las complicaciones y lentitud que se generan en la lectura tienen que ver con lo que se denomina "lectura consistente", cosa que representa uno de los mayores dolores de cabeza para todo sistema multiusuario.
Piénsalo de esta forma: si lees X registros para luego actualizarlos, y mientras los estás leyendo se siguen insertando registros, ¿qué es lo que debe devolver? ¿Devuelve lo que estaba al momento de iniciar tu lectura, o lo que está al momento de terminarla?
Te puedes imaginar que no es lo mismo.
Además, supongamos que dos usuarios acceden al mismo registro, y los dos pretenden modificarlo en diferentes acciones. ¿Quién lo modifica?
Si a este caso le agregas que el primero de ellos modifica un dato que el segundo usa para realizar la actualización (en el WHERE), ¿cuál sería el efecto al momento de que el segundo confirme la modificación?
Simple: Fallaría.

Esta breve reseña te puede dar una idea que programar procesos concurrentes no es una tarea fácil, y consultas simples de SELECT para hacer después UPDATEs, no se escribe simplemente así. Hay que usar recursos, como por ejemplo transacciones, para hacer que todo sea consistente. e incluso preparar el sistema de BBDD para que sea altamente disponible, cosa que puede implicar o no sistemas distribuidos.

En otras palabras, es probable que tengas que rever el diseño de procesos y concurrencia, para que tu sistema sea estable, seguro y soporte la concurrencia que mencionas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/08/2013, 04:27
 
Fecha de Ingreso: agosto-2012
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Límite de inserts en mysql

Actualmente hago lo siguiente:


Aplicación 1:

SELECT id_campo1, campo2
FROM tabla
ORDER BY id_campo1
LIMIT 100;

....

UPDATE tabla SET campo2='' WHERE id_campo1='' ... ;

.....


Aplicación 2:

INSERT INTO tabla (id_campo1, campo2)
VALUES ('1','valor'),('2','valor'),('3','valor')....;



Con lo cual, solo se hace un SELECT de X registros los cuales hago el UPDATE de ellos, no hay ninguna aplicación más que haga esto.

El resto de aplicaciones, solo hacen el INSERT.



Referente a las transacciones:

Entonces debería hacer que haga las cosas en cola? es decir:

1.- Insert
2.- Select + Update

y esto indefinidamente.
  #4 (permalink)  
Antiguo 29/08/2013, 08:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Límite de inserts en mysql

Cita:
Con lo cual, solo se hace un SELECT de X registros los cuales hago el UPDATE de ellos, no hay ninguna aplicación más que haga esto.

El resto de aplicaciones, solo hacen el INSERT.
En realidad, debes estudiar el tema de transacciones, concurrencia y bloqueo de tablas, para poder entender lo que debes hacer con tu aplicación. No es simplemente que hagas una cosa u otra. Existen sintaxis específicas y procedimientos para realizar acciones en sistemas concurrentes.
El manual de referencia lo explica con bastante claridad, y hay numerosos y completos libros sobre el asunto.
Cita:
Entonces debería hacer que haga las cosas en cola? es decir:

1.- Insert
2.- Select + Update

y esto indefinidamente.
No.
La cola no la haces tu. La hace el DBMS.
Para eso se diseñaron precisamente los sistemas de gestión de bases de datos (vulgamrmente conocidos como SGBD o DBMS), como MySQL, Oracle, SQL Server y demás...
Tu misión es aprender cómo usar lo que se necesita y utilizarlo.

El tema central es que si existe un proceso de inserciones que esté corriendo al mismo tiempo que otro lectura/actualización, siempre tendrás problemas de performance y consistencia que afecten.
Como desarrollador de BBDD lo que debes hacer es asegurarte que no sólo se pueda hacer rápidamente la inserción, sino que eso no afecte la lectura y actualizacion, o lo haga con el menor impacto posible.

Dale una leída a este capitulo, para mejor comprensión:
MySQL::15.10. Bloqueo y modelo de transacciones de InnoDB

http://www.programacion.com/articulo...s_en_mysql_242
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:37.