From: | Mario González Troncoso <gonzalemario(at)gmail(dot)com> |
---|---|
To: | Jairo Graterón <jgrateron(at)gmail(dot)com> |
Cc: | Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Particionamiento |
Date: | 2023-09-26 19:47:50 |
Message-ID: | CAFsReFVsm-UcVHkBqOgmHxD=LdFzRk3njm9RJhA3+oTigUW62A@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Tue, 26 Sept 2023 at 16:39, Jairo Graterón <jgrateron(at)gmail(dot)com> wrote:
>
> Hola Mario,
>
> La tabla no está particionada, y se pueden borrar los registros usando sólo el num_ruc
>
> podría usar también delete from comprobantes where num_ruc in ('aaaa','bbbb','cccc','dddd','eeee')
> pero hay clientes que tienen históricos de millones de registros y puede tardar un par de horas en ejecutar la operación.
>
Creo que te estas complicando demás. Con lo que comentas, suena que el
problema va en el modelo porque parece que no puedes identificar
fácilmente a quienes no son tus clientes.
Ahora si tu intención es meramente usar particiones, creo que ya
tienes tu respuesta.
> La idea del particionamiento es poder hacer drop table comprobante_num_ruc y recuperar el espacio además de llevar
> el registro de cuáles clientes se realizó la limpieza.
>
> pg_rewrite voy a revisarlo.
>
> El mar, 26 sept 2023 a las 15:20, Mario González Troncoso (<gonzalemario(at)gmail(dot)com>) escribió:
>>
>> On Tue, 26 Sept 2023 at 13:43, Jairo Graterón <jgrateron(at)gmail(dot)com> wrote:
>> >
>> > Saludos lista
>> >
>> > Tengo un requerimiento sobre liberar el espacio ocupado por registros de ventas de
>> > los clientes que ya no tienen relación comercial con nosotros.
>> >
>> > Actualmente la tabla comprobantes tiene 2mil millones de registros, debido a que
>> > tiene registros de históricos de ventas proporcionados por el estado para controlar
>> > la emisión única de comprobantes.
>> >
>> > Cada cliente tiene su identificador único num_ruc junto con el número de comprobante es la clave primaria.
>> >
>> > Hacer un delete from comprobantes where num_ruc='xxx' no es óptimo ya que es lento y el espacio no se recupera en el disco, usamos servicios en la nube y cobran por espacio ocupado.
>> >
>>
>> Pero si entiendo bien, si tienes que borrar los registros de algunos
>> clientes y parte de la clave primaria es el identificador del cliente,
>> ¿por qué tienes que indicar el número de comprobante para borrar?
>> Cuando creaste la table, creaste particiones? Sino lo hiciste, no
>> puedes transformar una tabla normal a una particionada [1]
>>
>> Asumiendo que es una tabla normal yo pensaría en estas 2 opciones:
>> a) Buscaría un filtro para ejecutar "DELETE FROM comprobantes WHERE
>> <FILTRO>..." Y ejecutaría VACUUM FULL al final para devolver el
>> espacio al sistema operativo
>> b) Usaría pg_rewrite [2] para generar un nuevo esquema de tablas con
>> particiones. esto significaría tener suficiente espacio en disco para
>> duplicar la tabla.
>>
>> Personalmente no he usado `pg_rewrite` pero lo que mencionas se puede
>> hacer con esta extensión.
>>
>> [1] https://www.postgresql.org/docs/current/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE
>> [2] https://www.cybertec-postgresql.com/en/pg_rewrite-postgresql-table-partitioning/
>>
>> > Así que me gustaría sus experiencias si han implementado particionamiento de tablas ya que veo que no es necesario hacer delete sino drop table.
>> >
>> > Haciendo cálculos tendríamos la tabla maestra y 8mil tablas relacionadas por cada cliente asociado.
>> >
>
From | Date | Subject | |
---|---|---|---|
Next Message | Jairo Graterón | 2023-09-26 19:50:12 | Re: Particionamiento |
Previous Message | Jairo Graterón | 2023-09-26 19:39:22 | Re: Particionamiento |