sql >> Base de Datos >  >> RDS >> SQLite

SQLite VACÍO

Resumen :en este tutorial, explicaremos por qué necesita usar SQLite VACUUM comando y mostrar cómo usarlo para optimizar el archivo de la base de datos.

¿Por qué necesita SQLite VACUUM? comando

En primer lugar, cuando elimina objetos de la base de datos, como tablas, vistas, índices y activadores, o elimina datos de las tablas, el tamaño del archivo de la base de datos permanece sin cambios. Porque SQLite simplemente marca los objetos eliminados como libres y los reserva para usos futuros. Como resultado, el tamaño del archivo de la base de datos siempre crece.

En segundo lugar, cuando inserta o elimina datos de las tablas, los índices y las tablas se fragmentan, especialmente para la base de datos que tiene una gran cantidad de inserciones, actualizaciones y eliminaciones.

En tercer lugar, las operaciones de inserción, actualización y eliminación crean bloques de datos no utilizados dentro de las páginas individuales de la base de datos. Disminuye el número de filas que se pueden almacenar en una sola página. Por lo tanto, aumenta el número de páginas para sostener una tabla. Debido a esto, aumenta la sobrecarga de almacenamiento de la tabla, lleva más tiempo leer/escribir y disminuye el rendimiento de la memoria caché.

SQLite proporciona el VACUUM comando para abordar los tres problemas anteriores.

SQLite primero copia los datos dentro de un archivo de base de datos a una base de datos temporal. Esta operación desfragmenta los objetos de la base de datos, ignora los espacios libres y vuelve a empaquetar páginas individuales. Luego, SQLite copia el contenido del archivo de la base de datos temporal al archivo de la base de datos original. El archivo de base de datos original se sobrescribe.

Porque el VACUUM El comando reconstruye la base de datos, puede usarlo para cambiar algunos parámetros de configuración específicos de la base de datos, como el tamaño de página, el formato de página y la codificación predeterminada. Para hacer esto, establece nuevos valores usando pragma y luego vacía la base de datos.

El SQLite VACUUM comando

El VACUUM El comando no cambia el contenido de la base de datos excepto los valores de ID de fila. Si usa INTEGER PRIMARY KEY columna, el VACUUM no cambia los valores de esa columna. Sin embargo, si usa ID de fila sin alias, el VACUUM El comando restablecerá los valores de ID de fila. Además de cambiar los valores de ID de fila, el VACUUM El comando también crea el índice desde cero.

Es una buena práctica realizar el VACUUM Comando periódicamente, especialmente cuando elimina tablas o índices grandes de una base de datos.

Es importante tener en cuenta que el VACCUM El comando requiere almacenamiento para contener el archivo original y también la copia. Además, el VACUUM El comando requiere acceso exclusivo al archivo de la base de datos. En otras palabras, el VACUUM El comando no se ejecutará correctamente si la base de datos tiene una declaración SQL pendiente o una transacción abierta.

Actualmente, a partir de la versión 3.9.2, puede ejecutar VACUUM comando en el main base de datos, no el archivo de base de datos adjunto.

Aunque SQLite habilita el modo de vacío automático que activa el proceso de vacío automáticamente con algunas limitaciones. Es una buena práctica ejecutar el VACUUM comando manualmente.

Cómo ejecutar SQLite VACUUM comando

A continuación se muestra cómo ejecutar el VACUUM comando:

VACUUM;Code language: SQL (Structured Query Language) (sql)

Asegúrese de que no haya ninguna transacción abierta mientras ejecuta el comando.

La siguiente declaración habilita el modo de vacío automático completo:

PRAGMA auto_vacuum = FULL;Code language: SQL (Structured Query Language) (sql)

Para habilitar el vacío incremental, utilice la siguiente instrucción:

PRAGMA auto_vacuum = INCREMENTAL;Code language: SQL (Structured Query Language) (sql)

La siguiente declaración desactiva el modo de vacío automático:

PRAGMA auto_vacuum = NONE;Code language: SQL (Structured Query Language) (sql)

VACUUM con un INTO cláusula

Aquí está la sintaxis del VACUUM con INTO cláusula:

VACUUM schema-name INTO filename;Code language: SQL (Structured Query Language) (sql)

El VACUUM declaración con un INTO mantiene el archivo de base de datos original sin cambios y crea una nueva base de datos con el nombre de archivo especificado. La nueva base de datos tendrá el mismo contenido lógico que la base de datos original, pero completamente vacío.

El filename en el INTO La cláusula puede ser cualquier expresión SQL que se evalúe como una cadena. Debe ser una ruta a un archivo que no existe o a un archivo vacío, o el VACUUM INTO comando dará como resultado un error.

El VACUUM El comando es muy útil para generar copias de seguridad de una base de datos en vivo. Es seguro transaccional, ya que la base de datos generada es una instantánea coherente de la base de datos original. Sin embargo, si un apagado no planificado o un apagón interrumpen el comando, la base de datos generada podría dañarse.

La siguiente declaración usa el VACUUM INTO comando para generar una nueva base de datos con el nombre de archivo chinook_backup.db cuyos datos se copian del main esquema del chinook base de datos:

VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Code language: JavaScript (javascript)

En este tutorial, ha aprendido por qué necesita usar SQLite VACUUM comando y cómo ejecutarlo para optimizar la base de datos.