Re: Proyectar cálculo del tamaño de índices.

From: Gerardo Herzig <gherzig(at)fmed(dot)uba(dot)ar>
To: Alfredo Rico <alfredorico(at)gmail(dot)com>
Cc: Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Proyectar cálculo del tamaño de índices.
Date: 2016-03-30 01:54:55
Message-ID: 1860157968.13224.1459302895669.JavaMail.root@fmed.uba.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Mmmmmm creo que te enroscaste de mas con el requerimiento.
Hay una funcion que devuelve el tamaño de los objetos:
select pg_relation_size('nombre_de_tabla_o_indice');

Solucion quick and dirtie: Dispara un cron cada, no se, media hora, 10 minutos, con algo asi:
SELECT now(), indexname, pg_relation_size(indexname::regclass)
from pg_indexes where tablename = 'esa_tabla_tuya'
union select now(), 'esa_tabla_tuya', pg_relation_size('esa_tabla_tuya');

Y graba los resultados en una tabla, la cual podes procesar dentro de algunos dias, y proyectar el tamaño a futuro, basado en la tasa de crecimiento actual.

Tal vez podrias ayudarte con alguna herramienta graficadora de metricas, para una salida mas pulida, pero creo que la idea basica se cubre con un query asi, o similar.

HTH
Gerardo

----- Mensaje original -----
> De: "Alfredo Rico" <alfredorico(at)gmail(dot)com>
> Para: "Postgresql" <pgsql-es-ayuda(at)postgresql(dot)org>
> Enviados: Martes, 29 de Marzo 2016 20:34:26
> Asunto: [pgsql-es-ayuda] Proyectar cálculo del tamaño de índices.
>
>
> Buen día amigos, gusto en saludarles.
>
>
> Esto me tiene de cabeza. Tengo una tabla transaccional para almacenar
> información de saldos de créditos. Día tras día se almacena nueva
> información de todos los créditos de los clientes. Existe una
> columna FECHA_SNAPSHOT que agrupa la información en cada día. La
> definición de la tabla es la siguiente:
>
>
>
>
> fecha_snapshot | date | not null | plain | |
> rc_credito_numero_credito | character varying(25) | not null |
> extended | |
> rc_credito_tc_cliente_codigo | character varying(20) | not null |
> extended | |
> rc_credito_tc_agencia_codigo | character varying(10) | not null |
> extended | |
> saldo_capital | numeric(20,2) | not null | main | |
> saldo_capital_vigente | numeric(20,2) | not null | main | |
> saldo_capital_reestructurado | numeric(20,2) | not null | main | |
> saldo_capital_vencido | numeric(20,2) | not null | main | |
> saldo_capital_litigio | numeric(20,2) | not null | main | |
> tasa_interes | numeric(7,4) | not null | main | |
> cuotas_vencidas | integer | not null default 0 | plain | |
> dias_mora | integer | not null default 0 | plain | |
> intereses_vigentes | numeric(20,2) | not null default 0 | main | |
> intereses_mora_vigentes | numeric(20,2) | not null default 0 | main |
> |
> intereses_reestructurados | numeric(20,2) | not null default 0 | main
> | |
> intereses_vencidos | numeric(20,2) | not null default 0 | main | |
> intereses_cobrados | numeric(20,2) | not null default 0 | main | |
> porcentaje_provision_especifica | numeric(7,4) | not null default 0 |
> main | |
> porcentaje_provision_generica | numeric(7,4) | not null default 0 |
> main | |
> porcentaje_provision_rendimiento | numeric(7,4) | not null default 0
> | main | |
> monto_provision_especifica | numeric(20,2) | not null default 0 |
> main | |
> monto_provision_generica | numeric(20,2) | not null | main | |
> monto_provision_rendimiento | numeric(20,2) | not null | main | |
> consecutivo | integer | | plain | |
> tc_cuenta_contable_codigo | character varying(20) | not null |
> extended | |
> rc_calificacion_codigo_riesgo_credito | character varying(10) | not
> null | extended | |
> rc_calificacion_codigo_riesgo_cliente | character varying(10) | not
> null | extended | |
> rc_calificacion_codigo_riesgo_sicri | character varying(10) | not
> null | extended | |
> rc_situacion_contable_codigo | character varying(10) | not null |
> extended | |
> rc_estado_pago_codigo | character varying(10) | not null | extended |
> |
> rc_producto_crediticio_codigo | character varying(10) | not null |
> extended | |
> fecha_reprecio | date | | plain | |
> created_at | timestamp with time zone | default now() | plain | |
> updated_at | timestamp with time zone | default now() | plain | |
> Indexes:
> "rc_carteras_creditos_pkey" PRIMARY KEY, btree (fecha_snapshot,
> rc_credito_numero_credito, rc_credito_tc_cliente_codigo,
> rc_credito_tc_agencia_codigo)
> "idx_rc_carteras_creditos_rc_calificaciones1" btree
> (rc_calificacion_codigo_riesgo_credito)
> "idx_rc_carteras_creditos_rc_calificaciones2" btree
> (rc_calificacion_codigo_riesgo_cliente)
> "idx_rc_carteras_creditos_rc_calificaciones3" btree
> (rc_calificacion_codigo_riesgo_sicri)
> "idx_rc_carteras_creditos_rc_creditos1" btree
> (rc_credito_numero_credito, rc_credito_tc_cliente_codigo,
> rc_credito_tc_agencia_codigo)
> "idx_rc_carteras_creditos_rc_estados_pagos1" btree
> (rc_estado_pago_codigo)
> "idx_rc_carteras_creditos_rc_productos_crediticios1" btree
> (rc_producto_crediticio_codigo)
> "idx_rc_carteras_creditos_rc_situaciones_contables1" btree
> (rc_situacion_contable_codigo)
> "idx_rc_carteras_creditos_tc_cuentas_contables1" btree
> (tc_cuenta_contable_codigo)
> Foreign-key constraints:
> "fk_rc_carteras_creditos_rc_calificaciones1" FOREIGN KEY
> (rc_calificacion_codigo_riesgo_credito) REFERENCES
> rc_calificaciones(codigo)
> "fk_rc_carteras_creditos_rc_calificaciones2" FOREIGN KEY
> (rc_calificacion_codigo_riesgo_cliente) REFERENCES
> rc_calificaciones(codigo)
> "fk_rc_carteras_creditos_rc_calificaciones3" FOREIGN KEY
> (rc_calificacion_codigo_riesgo_sicri) REFERENCES
> rc_calificaciones(codigo)
> "fk_rc_carteras_creditos_rc_creditos1" FOREIGN KEY
> (rc_credito_numero_credito, rc_credito_tc_cliente_codigo,
> rc_credito_tc_agencia_codigo) REFERENCES rc_creditos(numero_credito,
> tc_cliente_codigo, tc_agencia_codigo)
> "fk_rc_carteras_creditos_rc_estados_pagos1" FOREIGN KEY
> (rc_estado_pago_codigo) REFERENCES rc_estados_pagos(codigo)
> "fk_rc_carteras_creditos_rc_productos_crediticios1" FOREIGN KEY
> (rc_producto_crediticio_codigo) REFERENCES
> rc_productos_crediticios(codigo)
> "fk_rc_carteras_creditos_rc_situaciones_contables1" FOREIGN KEY
> (rc_situacion_contable_codigo) REFERENCES
> rc_situaciones_contables(codigo)
>
>
>
>
>
>
> El cliente me pide el cálculo de volumetría para de la tabla a fin de
> proyectar espacio en disco ocupado a futuro y solicitar el storage
> requerido. Se sabe a priori cuantos registros por día en promedio
> habrán (basado en historia). A partir de la cantidad de registros
> díarios se desea el tamaño efectivo en disco requerido.
>
>
> Valiendome del módulo pgstattuple (
> http://www.postgresql.org/docs/9.4/static/pgstattuple.html ) y un
> query de stackoverflow (
> http://dba.stackexchange.com/questions/23879/measure-the-size-of-a-postgresql-table-row
> ) comprendí que puedo hacer una proyección estimada de la tabla dado
> que entendí que las filas ocupan un tamaño en bytes y que cada fila
> se acumulan para llenar páginas de 8kb.
>
>
> Ahora bien, el problema que con cada nueva fila, se van creando
> índices. Y el crecimiento del mismo es totalmente anormal e
> impredecible. De hecho resulta mayor el tamaño de ocupado por los
> índices que por la data de la tabla en si.
>
>
> Para una inserción de 10.000 registros observen lo que ocupa:
>
>
>
> what | bytes/ct | bytes_pretty | bytes_per_row
> -----------------------------------+----------+--------------+---------------
> core_relation_size | 2015232 | 1968 kB | 201
> visibility_map | 0 | 0 bytes | 0
> free_space_map | 24576 | 24 kB | 2
> table_size_incl_toast | 2039808 | 1992 kB | 203
> indexes_size | 3883008 | 3792 kB | 388
> total_size_incl_toast_and_indexes | 5922816 | 5784 kB | 592
> live_rows_in_text_representation | 2621727 | 2560 kB | 262
> ------------------------------ | | |
> row_count | 10000 | |
> live_tuples | 10000 | |
> dead_tuples | 0 | |
>
>
>
>
> Para 10.000 registros se ocupa un tamaño de 1968 kB y los índices
> 3792 kB
>
>
> ¿Que experiencia tienen al respecto?
>
>
> Agradezco sus comentarios
>
>
>
>
> --
>
> Saludos Cordiales.-
> Alfredo Rico.
> San Cristóbal - Venezuela.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Horacio Miranda 2016-03-30 08:01:31 Re: Proyectar cálculo del tamaño de índices.
Previous Message Alfredo Rico 2016-03-29 23:34:26 Proyectar cálculo del tamaño de índices.