jueves, 3 de mayo de 2012

Select en Mysql sin commitear

Cuando tenemos proceso que realizan muchos insert en la base de datos, cuando digo muchos estoy diciendo cientos de miles o millones, es mas rápido para motor de base de datos que se vuelquen muchos juntos, para eso realizamos un commit cada una cierta cantidad de ciclos, depende de muchas cosas si el "muchos" es de a 10, 100, o 100000, eso lo tienen que analizar en cada caso.

Pero cuando estamos probando, queremos en seguida (no esperar los 100mil registros) saber si esta funcionando o no, entonces lo que tenemos que hacer realizar un select en la base de datos pero necesito ver los datos que no se impactaron, es decir los que no se commitearon todavía.

Para esto basta con el browser mysql o mismo por consola ejecutar lo siguiente:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
 
Luego de ejecutar esto cada consulta que realicemos se van a mostrar todos los registros los commiteados y los no commiteados.
Si queremos volver a solo ver los commiteados cambiamos
READ UNCOMMITTED
por
READ COMMITTED
 
La definición del comando es la siguiente
 
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } 
 
 

No hay comentarios: