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" <alfredor...@gmail.com>
> Para: "Postgresql" <pgsql-es-ayuda@postgresql.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@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a