Mengidentifikasi tabel dengan data miring atau baris yang tidak disortir - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengidentifikasi tabel dengan data miring atau baris yang tidak disortir

Kueri berikut mengidentifikasi tabel yang memiliki distribusi data yang tidak merata (data miring) atau persentase tinggi baris yang tidak disortir.

skewNilai rendah menunjukkan bahwa data tabel didistribusikan dengan benar. Jika tabel memiliki skew nilai 4,00 atau lebih tinggi, pertimbangkan untuk memodifikasi gaya distribusi datanya. Untuk informasi selengkapnya, lihat Distribusi data suboptimal.

Jika tabel memiliki pct_unsorted nilai lebih besar dari 20 persen, pertimbangkan untuk menjalankan VACUUM perintah. Untuk informasi selengkapnya, lihat Baris yang tidak disortir atau disortir.

Juga tinjau mbytes dan pct_of_total nilai untuk setiap tabel. Kolom ini mengidentifikasi ukuran tabel dan berapa persentase ruang disk mentah yang dikonsumsi tabel. Ruang disk mentah mencakup ruang yang dicadangkan oleh Amazon Redshift untuk penggunaan internal, sehingga lebih besar dari kapasitas disk nominal, yang merupakan jumlah ruang disk yang tersedia untuk pengguna. Gunakan informasi ini untuk memverifikasi bahwa Anda memiliki ruang disk kosong sama dengan setidaknya 2,5 kali ukuran tabel terbesar Anda. Memiliki ruang ini memungkinkan sistem untuk menulis hasil perantara ke disk saat memproses kueri kompleks.

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;