Memorias de un DBA

Un blog dedicado a contribuir a la comunidad SQL Server en español

Manejo de Páginas en Memoria

with 3 comments

Como ya se ha mencionado anteriormente, SQL Server es un motor de base de datos que trabaja en memoria, es decir que antes de retornar un resultado al usuario o de modificar algun registro en la base de datos, antes debe tener las páginas de datos en memoria, si es que estas aún no se encuentran en memoria, estas deben ser traidas desde los “Datafiles” hasta el “Buffer Cache” donde se almacenaran.

Dentro del “Buffer Cache” se tienen paginas “Clean” y “Dirty”. Las paginas “Clean” son las paginas que han sido traidas desde los “Datafiles” y no han cambiado, es decir la pagina de memoria es una copia exacta de la pagina que se encuentra en los “Datafiles”. Las páginas “Dirty”, como ya lo deben suponer, son las paginas que han sido modificadas y como ya no son iguales a su página origen que se encuentra en disco, se les llama asi.

Las páginas “Clean” son mantenidas en memoria para mejorar la performance de las consultas. Estas paginas son eliminadas de la memoria cuando se necesita espacio en la memoria de servidor, a este fenomeno se le llama “Memory Preasure”. Adicionalmente a esto SQL Server tiene un proceso de sistema que se llama “Lazy Writter” el cual despierta cada cierto tiempo para poder mantener una cierta cantidad de páginas libres en la memoria y va deshechando las páginas que no han sido tocadas en un tiempo determinado, esto lo hace a traves de un algoritmo LRU (Least Recently Used).

Los cambios realizados en las páginas “Dirty” son bajados a los “Datafiles” cuando se da un proceso llamado “Checkpoint”, el cual baja a los “Datafiles” todos los cambios realizados a las páginas den memoria. La frecuencia de ejecución de los check ponints es muy importante debido a que dependiendo de que tan seguido se ejecuten los “Checkpoints”, el proceso de recuperación de la base de datos se data tardara menos en terminar. Esto lo explicaremos en otro post en detalle. Es importante mencionar que cuando se da el checkpoint en la base de datos, las paginas “Dirty” se mantienen en memoria pero son marcadas como páginas “Clean”.

Otro punto importante a tener en cuenta es que las paginas cuando son subidas a memoria, no son subidas individualmente sino que el motor de base de datos sube a memoria el “Extend” completo donde se encuentra la página. Es decir que sube ocho paginas de 8kb, en total 64 kb de información.

Ahora un poco de ejemplos, en el siguiente video mostrare a mas detalle el manejo de estas paginas dentro de la memoria de SQL Server. Espero sea de utilidad.

Los archivos de los ejemplos realizados pueden ser descargados aqui

Written by dbamemories

agosto 18, 2011 a 9:35 pm

3 comentarios

Subscribe to comments with RSS.

  1. Hola !
    Gracias por la info que compartes es muy interesante. Con respecto a este tema yo tengo una pregunta y espero la respondas a pesar que este post fue escrito en 2011.

    Un checkpoint sería igual que un commit? O cual sería la diferencia ?

    Espero pueda seguir posteando nuevos temas !

    Saludos

    JPierre PTang

    noviembre 20, 2015 at 3:31 pm

    • Hola, para responder tu duda, no son lo mismo, un commit escribe en el transaction log la confirmación de la transacción para hacerla duradera, más las páginas aun pude estar en memoria. Un checkpoint baja las páginas de memoria a disco sin necesidad de una operación de commit. Espero haber resuelto tu duda.

      dbamemories

      noviembre 20, 2015 at 9:17 pm


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: