Saltar al contenido

PostgreSQL: ¿cómo ejecutar VACUUM desde el código fuera del bloque de transacciones?

Intenta comprender el código correctamente antes de adaptarlo a tu trabajo y si ttienes algo que aportar puedes decirlo en los comentarios.

Solución:

Después de más búsquedas, descubrí la propiedad de nivel de aislamiento del objeto de conexión psycopg2. Resulta que cambiar esto a 0 lo sacará de un bloque de transacciones. Cambiar el método de vacío de la clase anterior a la siguiente lo resuelve. Tenga en cuenta que también restauré el nivel de aislamiento a lo que era anteriormente por si acaso (parece ser 1 por defecto).

def vacuum(self):
    old_isolation_level = self.conn.isolation_level
    self.conn.set_isolation_level(0)
    query = "VACUUM FULL"
    self._doQuery(query)
    self.conn.set_isolation_level(old_isolation_level)

Este artículo (casi al final de esa página) proporciona una breve explicación de los niveles de aislamiento en este contexto.

Si bien el vacío completo es cuestionable en las versiones actuales de postgresql, forzar un ‘análisis de vacío’ o ‘reindexar’ después de ciertas acciones masivas puede mejorar el rendimiento o limpiar el uso del disco. Esto es específico de postgresql y debe limpiarse para hacer lo correcto para otras bases de datos.

from django.db import connection
# Much of the proxy is not defined until this is done
force_proxy = connection.cursor()
realconn=connection.connection
old_isolation_level = realconn.isolation_level
realconn.set_isolation_level(0)
cursor = realconn.cursor()
cursor.execute('VACUUM ANALYZE')
realconn.set_isolation_level(old_isolation_level)

Desafortunadamente, el proxy de conexión proporcionado por django no brinda acceso a set_isolation_level.

Además, también puede obtener los mensajes dados por Vacío o Analizar usando:

>> print conn.notices #conn is the connection object

este comando imprime una lista con el mensaje de registro de consultas como Vacío y Análisis:

INFO:  "usuario": processados 1 de 1 páginas, contendo 7 registros vigentes e 0 registros não vigentes; 7 registros amostrados, 7 registros totais estimados   
INFO:  analisando "public.usuario"

Esto puede ser útil para los administradores de bases de datos ^^

Aquí puedes ver las comentarios y valoraciones de los usuarios

Si te gusta el tema, puedes dejar una división acerca de qué te ha parecido esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *