Identificación de tablas con sesgo de datos o con filas desordenadas
La siguiente consulta identifica las tablas que tienen una distribución irregular de datos (sesgo de datos) o un alto porcentaje de filas desordenadas.
Un valor bajo de skew
indica que los datos de la tabla están distribuidos correctamente. Si una tabla tiene un valor de skew
de 4,00 o menor, considere la opción de modificar su estilo de distribución de datos. Para obtener más información, consulte Distribución de datos poco óptima.
Si una tabla tiene un valor de pct_unsorted
mayor que 20 por ciento, considere la opción de ejecutar el comando VACUUM. Para obtener más información, consulte Filas desordenadas o mal ordenadas.
Revise también los valores mbytes
y pct_of_total
de cada tabla. Estas columnas identifican el tamaño de la tabla y el porcentaje de espacio bruto en disco que consume la tabla. El espacio de disco en bruto incluye el espacio que reserva Amazon Redshift para uso interno, por lo que supera su capacidad nominal, la cual corresponde a la cantidad de espacio de disco disponible para el usuario. Utilice esta información para verificar que tiene espacio libre en el disco que equivalga al menos a 2,5 veces el tamaño de su tabla más grande. Si tiene este espacio disponible, el sistema podrá guardar los resultados intermedios en el disco cuando procese consultas complejas.
select trim(pgn.nspname) as schema, trim(a.name) as table, id as tableid, decode(pgc.reldiststyle,0, 'even',1,det.distkey ,8,'all') as distkey, dist_ratio.ratio::decimal(10,4) as skew, det.head_sort as "sortkey", det.n_sortkeys as "#sks", b.mbytes, decode(b.mbytes,0,0,((b.mbytes/part.total::decimal)*100)::decimal(5,2)) as pct_of_total, decode(det.max_enc,0,'n','y') as enc, a.rows, decode( det.n_sortkeys, 0, null, a.unsorted_rows ) as unsorted_rows , decode( det.n_sortkeys, 0, null, decode( a.rows,0,0, (a.unsorted_rows::decimal(32)/a.rows)*100) )::decimal(5,2) as pct_unsorted from (select db_id, id, name, sum(rows) as rows, sum(rows)-sum(sorted_rows) as unsorted_rows from stv_tbl_perm a group by db_id, id, name) as a join pg_class as pgc on pgc.oid = a.id join pg_namespace as pgn on pgn.oid = pgc.relnamespace left outer join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl inner join (select attrelid, min(case attisdistkey when 't' then attname else null end) as "distkey", min(case attsortkeyord when 1 then attname else null end ) as head_sort , max(attsortkeyord) as n_sortkeys, max(attencodingtype) as max_enc from pg_attribute group by 1) as det on det.attrelid = a.id inner join ( select tbl, max(mbytes)::decimal(32)/min(mbytes) as ratio from (select tbl, trim(name) as name, slice, count(*) as mbytes from svv_diskusage group by tbl, name, slice ) group by tbl, name ) as dist_ratio on a.id = dist_ratio.tbl join ( select sum(capacity) as total from stv_partitions where part_begin=0 ) as part on 1=1 where mbytes is not null order by mbytes desc;