Si es correcto, esa debería ser lo mejor mover los datos de una tabla a
otra pero la política de la empresa exige eliminar sus datos luego de
romper la relación comercial.

Y se requiere un procedimiento fácil y rápido para realizar la limpieza.


El mar, 26 sept 2023 a las 17:35, Enrique Herrera Noya (<
enrique.herreran...@gmail.com>) escribió:

>
> aquí me surge que mas que el SQL en si, es un tema de la gestión de datos,
> tenemos por costumbre, " dale echale datos no mas la bbdd aguanta" (donde
> trabajo, estamos en las mismas pero por inserción)
>
> estuvimos dándole vueltas como solucionar el tema, y miramos fuera de la
> caja:
>
> del archivo histórico solo necesitamos unos años hacia atrás, por ende
> solo una vez debimos esperar bastante tiempo en proceso  , las siguientes
> iteraciones siempre es menor el movimiento de datos
>
> historicobig contiene el historial de 5 años hacia atrás, historico5
> contiene los últimos 5 años, de esa forma , en el big se usa un sql no
> necesariamente optimizado
> y en le historico5 , es mucho menor los teras, así que se demora menos el
> proceso , para la auditoria estarán todos los datos, y para el borrado sera
> mas fácil.
>
> cuando los datos en historico5 son mas viejos de 5 años, se mueven  a
> historicobig
>
> espero te ayuden estas ideas
>
>
>
>
>
> El 26-09-23 a las 18:16, Horacio Miranda escribió:
>
>
>
> On 26/09/2023, at 5:34 PM, Jairo Graterón <jgrate...@gmail.com> wrote:
>
> Hola Enrique
> la tabla tiene la siguiente definición
>
>
> Tirate el \d comprobante
>
> No veo el indice que mencionas en la definición.
>
> create table comprobante
> (
>    id bigserial not null,
>    num_ruc varchar(11) not null,
>    num_comprobante bigint not null,
>    fecha date not null,
>    monto numeric(10,2),
>    estatus char(1) not null, -- 0 anulado, 1 activo
>    primary key(id),
>    unique (num_ruc, num_comprobante)
> );
> para buscar rápidamente un cliente tenemos el siguiente índice
> create index idx_num_ruc on comprobante(num_ruc);
>
>
> El unique num_ruc,num_comprobante en el fondo es un trigger, Tirate los
> explain (buffers,analyze delete ….
>
> De la operación, esto te puede decir por que se demora tiempo.
>
> Cuando se establece la relación comercial el estado(GOB) nos envía el
> histórico de los comprobantes del cliente para cuando se realicen
> ciertas operaciones se pueda validar el estatus, la fecha y el monto.
>
>
> Esto suena a que debes revisar por el tiempo que debes tener los
> registros, puede que tengas que mantener 6 años de registros.
>
>
> Ciertamente para eliminar un cliente se puede usar *delete from
> comprobante where num_ruc='999999' *pero mensualmente se asocian o se van
> entre 100 a 200 clientes y
> el delete se vuelve lento para borrar millones de registros, es un
> procedimiento que requiere autorización y registro de auditoría.
>
>
> Si te preocupa el tamaño, revisa que estes usando compresión.
>
> Se decidió no borrar ya que creaba mucho I/O en el disco que afecta el
> desempeño del sistema, ahora esa tabla va por los 2mil millones y sigue
> creciendo.
>
>
>
> Puedes desactivar los sorts, cuando borres, esto optimiza las busquedas
> secuenciales en postgresql para borrar cosas masivas. Todo depende del plan
> de ejecución de tu operación.
>
>
>
> El mar, 26 sept 2023 a las 16:11, Enrique Herrera Noya (<
> enrique.herreran...@gmail.com>) escribió:
>
>>
>> veamos si te entiendo
>> tienes por un lado *num_ruc *y por otro
>> *num_comqrobante *
>>
>> y la clave primaria la creas concatenando  *cla**pri = 
>> num_ruc.**num_comprobante
>> *
>>
>> como el numero de comprobante siempre es mayor el mas reciente puedes
>> determinar desde que año quieres borrar basándote en el correlativo
>>
>> ahora bien si quiere borrar todo lo relacionado a un cliente, bastaría
>> usar una condición donde *cla**pri** sea menor a 
>> **num_ruc.**num_ultimocomprobante
>> *y que ademas *num_ruc **= num_rucaborrar *, de esta forma usas la clave
>> primaria lo que sera mas rápido que usar en la sentencia solo *num_ruc *que
>> no es clave primaria
>>
>>
> Borrado por clave primaria ( que tiene un indice Implicito ), es siempre
> más rápido. Dado que en este caso el indice es de una columna simple.
>
>
>
>>
>>
>> El 26-09-23 a las 12:11, Jairo Graterón escribió:
>>
>> 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.
>>
>>
> Esto no es mucho, estas seguro que el espacio se te va en esto ? yo tengo
> una base de datos que me genera 2M de registros diarios.
>
>
>> Cada cliente tiene su identificador único *num_ruc* junto con el número
>> de comprobante es la clave primaria.
>>
>>
> No es mejor, cuando hagan un refactor que hagan una columna que refleje el
> dato? num_cliente. que significa ruc?
>
>
>> 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.
>>
>>
> Después de borrar, debes hacer un vacuum, sin embargo el espacio (marca de
> agua por lo que te cobran ya esta usado ) aun que hagas drop, vacuum, etc.
> la marca de agua del disco ya esta corrida, no vas a ahorrar plata en este
> nivel.
>
> Pero si es es mucho ( que 1T deben ser como 40USD en amazon por ejemplo )
> despues de librar espacio tendras, que bajar la base, hacer un rsync al
> disco nuevo y eliminar el disco viejo. ( ignoro que ahorro puedas hacer
> ahi).
>
>
>
>> 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.
>>
>>
> Es problema del cloud es el espacio usado en el disco, no la base de
> datos. aun que tengas espacio libre no puedes achicar los discos, hacer
> mantención te puede ayudar a dejar de crecer en el futuro. cuando el disco
> se usa. ya estas pagando por el, Yo trabajaba en Amazon New Zealand, esta
> pregunta me la hicieron un par de veces algunos clientes, y uno de ellos
> recuerdo que terminaron haciendo un rsync para mover los datos de un disco
> a otro para pagar menos.
>
>
>> Haciendo cálculos tendríamos la tabla maestra y 8mil tablas relacionadas
>> por cada cliente asociado.
>>
>>
> Yo no tendría tantas tablas hijas. Creo que lo que necesitas es un proceso
> de off-boarding donde metes los clientes con todos los datos relacionados
>  en una base con discos más lentos historica ( que debe ser más barato ).
>
> Ahora ojo que en sistemas más grandes es más barato tener un server que
> cloud, si las competencias están en tu empresa, mejor pongan un server, con
> discos IOAccelerators para cosas bien calientes y discos SSD que salen como
> 400 a 700 USD los discos de 1.6T SSD de 12Gb/s SAS, para HP o DELL. en un
> datacenter decente, puede que con varios discos y un par de servidores
> estes OK.
>
> El cloud también falla, no es aprueba de balas. y si tienes un desastre
> sin replicación y sin respaldos. bueno es ruleta rusa.
>
>
> En resumen, execution plan. revisa bien el modelo y asegurate que no estes
> callendo en un trigger que te este haciendo todo lento.
>
>
>
>> Enrique Herrera Noya
>> --
>> +56 992303151
>> Red Hat Certified Engineer RHCE Nº100223072 (RH6.0)
>> Red Hat Certified System Administrato RHCSA Nº100223072 (RH6.0)
>> Red Hat Certified Technician (RHCT) Nº605010753835478 (RH5.0)
>> Novell Certified Linux Professional CLP 10
>> Red Hat Delivery Specialist -Container Platform Application Deployment I
>> Red Hat Delivery Specialist - Container Platform Administration I
>> RED HAT SPECIALIST
>> How to Sell Red Hat OpenShift for Infrastructure
>> How to Sell Red Hat OpenShift for Developers
>> Red Hat Sales Engineer Specialist - Container Platform
>> Red Hat Sales Engineer Specialist – Automation
>>
>>
>
> Enrique Herrera Noya
> --
> +56 992303151
> Red Hat Certified Engineer RHCE Nº100223072 (RH6.0)
> Red Hat Certified System Administrato RHCSA Nº100223072 (RH6.0)
> Red Hat Certified Technician (RHCT) Nº605010753835478 (RH5.0)
> Novell Certified Linux Professional CLP 10
> Red Hat Delivery Specialist -Container Platform Application Deployment I
> Red Hat Delivery Specialist - Container Platform Administration I
> RED HAT SPECIALIST
> How to Sell Red Hat OpenShift for Infrastructure
> How to Sell Red Hat OpenShift for Developers
> Red Hat Sales Engineer Specialist - Container Platform
> Red Hat Sales Engineer Specialist – Automation
>
>

Reply via email to