VACUUM
La sentencia VACUUM reconstruye la base de datos completa. Hay varias razones por las que una aplicación puede hacer esto:
- A menos que SQLite se esté ejecutando en el modo "auto_vacuum=FULL", cuando una gran cantidad de datos han sido borrados del fichero de la base de datos, esos datos dejan tras de si un espacio vacío, o páginas de base de datos "libres". Esto significa que el fichero de base de datos puede ser mayor de lo estrictamente necesario. Ejecutando VACUUM para reconstruir la base de datos se reclama ese espacio y se reduce el tamaño del fichero de base de datos.
- Inserciones, actualizaciones y borrados frecuentes pueden hacer que el fichero de base de datos quede fragmentado - donde los datos de una tabla o índice pueden estar dispersos a lo largo de todo el fichero de base de datos. Ejecutar VACUUM asegura que cada tabla y cada índice se almacena de forma contigua dentro del fichero de base de datos. En algunos casos, VACUUM puede incluso reducir el número de páginas parcialmente llenas en la base de datos, reduciendo aún más el tamaño del fichero de base de datos.
- Normalmente, el page_sizw de la base de datos tanto si la base de datos soporta auto_vaccum como si no debe ser configurado antes de que el fichero de base de datos sea creado. Sin embargo, cuando no se está en modo de escritura anticipada de registro, las propiedades page_size y/o auto_vacuum de una base de datos existente pueden ser modificadas usando el pragma page_size y/o auto_vacuum e inmediatamente después un VACUUM de la base de datos. Cuando se usa el modo de escritura anticipada de registro, sólo está soportado el cambio de la propiedad auto_vacuum usando VACUUM.
VACUUM sólo funciona en la base de datos principal. No es posible usar VACUUM en un fichero de base de datos añadida.
La sentencia VACUUM funciona mediente el copiado del contenido de la base de datos en un fichero de base de datos temporal y después se sobrescribe el original con el contenido del fichero temporal. Cuando se sobrescribe el original, se usa un diario de reversión o de escritura anticipada de registro de archivo WAL tal y como sería para cualquier transacción de base de datos. Esto significa que cuando se usa VACUUM con una base de datos, se requiere al menos el doble del tamaño del fichero de base de datos original en espacio de disco libre.
La sentencia VACUUM puede cambiar los ROWID de las entradas den cualquier tabla que no tenga una INTEGER PRIMARY KEY explícito.
Un VACUUM fallará si hay una transacción abierta, o si hay una o mas sentencias SQL activas cuando se ejecuta.
A partir de la versión 3.1 de SQLite, una alternativa al uso de la sentencia VACUUM para recuperar espacio después de haber borrado datos es el modo auto-vacuum, activado usando el pragma auto_vacuum. Cuando auto_vacuum está activo para una base de datos la liberación de páginas puede ser reclamada después de borrar datos, haciendo que el fichero se reduzca de tamaño, sin recontruir toda la base de datos usando VACUUM. Sin embargo, el uso de auto_vacuum puede provocar una fragmentación extra del fichero de base de datos. Y auto_vacuum no compacta las páginas llenadas parcialmente de la base de datos, como hace VACUUM.