Problema con estimacion de tamaño en tablas

From: Luis A(dot) Zevallos Cárdenas <lzevallos(at)lobosistemas(dot)com>
To: posgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Problema con estimacion de tamaño en tablas
Date: 2009-05-22 16:13:15
Message-ID: ae5556ce0905220913g3e9f0817nde91746667e7e0d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos

Bueno primero esta consulta determina el tamaño de cada tabla
**************************************************************************
--Tamaño de los objetos en megabytes
SELECT relname, round(((relpages*8)::double precision/1024::double
precision)::numeric,3) as MB
FROM pg_class where relname like 'tbl_persona'
ORDER BY relpages DESC;

RESULTADO
-------------------|-----------
NOMBRE | MG
-------------------|-----------
"tbl_persona";0.047
*************************************************************************

select count(*) from tbl_persona

RESULTADO
-------------------|-----------
COUNT
-------------------|-----------
249

**************************************************************************
Ahora yo hize una funcion para estimar el tañaño segun las filas que tenga
no estoy seguro si estara bien ya que los resultados son distintos si
alguien podria ayudarme se lo agradeceria,. Bueno la funcoin es esta:
************************************************************************************
drop FUNCTION sch_clinica.fn_estimation_size_table(text,numeric);
CREATE OR REPLACE FUNCTION sch_clinica.fn_estimation_size_table(nom_table
text,numeric)
RETURNS text AS
$BODY$
DECLARE
--select fn_estimation_size_table('table',100000)=======>la tabla y el
numero de registros a estimar
n_size numeric;
v_query text;
v_table alias for $1;
n_rows alias for $2;
v_row text;
v_sch_table text;

BEGIN
v_row=v_table||'.*';
--v_sch_table='sch_clinica.'||v_table;
v_query := 'select distinct
round(((('||n_rows||'/(8102/(pg_column_size(row('||v_row||'))+4)))*8)::double
precision/1024)::numeric,3) from '|| nom_table;
EXECUTE v_query INTO n_size;
return 'Para '||n_rows::text||' registros se estima '||n_size::text||'
MG en la tabla '||v_table;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
***************************************************************************
select sch_clinica.fn_estimation_size_table('tbl_persona',249);

RESULTADO
--------------------------------------------------------------------------------------------
fn_estimation_size_table
--------------------------------------------------------------------------------------------
"Para 249 registros se estima 0.008 MG en la tabla tbl_persona"

Si se fijan con la primera consulta me da 0.047 MG y la funcion me da 0.008
MG notan la diferencia entonces ese es el problema.

Gracias a todos los que contesten

--
Luis Zevallos
DBA Administrador de DB & SRVR
Lobo Sistemas S.A.C
tel: +5154958310833
http://www.lobosistemas.com

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Chávez B. 2009-05-22 16:14:56 Re: ayuda con SELECT
Previous Message pagliachi spawn2020 2009-05-22 15:57:47 ayuda con SELECT