Praktik terbaik untuk mendesain tabel Amazon Redshift - AWS Bimbingan Preskriptif

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

Praktik terbaik untuk mendesain tabel Amazon Redshift

Bagian ini memberikan ikhtisar praktik terbaik untuk merancang tabel database. Kami menyarankan Anda mengikuti praktik terbaik ini untuk mencapai kinerja dan efisiensi kueri yang optimal.

Memahami cara kerja kunci sortir

Amazon Redshift menyimpan data Anda pada disk dalam urutan yang diurutkan sesuai dengan kunci sortir. Pengoptimal kueri Amazon Redshift menggunakan urutan pengurutan saat menentukan paket kueri yang optimal. Untuk menggunakan kunci sortir secara efektif, kami sarankan Anda melakukan hal berikut:

  • Jaga agar tabel diurutkan sebanyak mungkin.

  • Gunakan VACUUM sort untuk mengembalikan kinerja optimal.

  • Hindari mengompresi kolom tombol sortir.

  • Jika tombol sortir dikompresi dan jika sortkey1_skew rasionya sangat tinggi, maka buat ulang tabel tanpa mengaktifkan kompresi pada tombol sortir.

  • Hindari menerapkan fungsi ke kolom kunci sortir. Misalnya, dalam kueri berikut, kolom kunci trans_dt : TIMESTAMPTZ sortir tidak digunakan jika Anda mentransmisikannya keDATE:

    select order_id, order_amt from sales where trans_dt::date = '2021-01-08'::date
  • Lakukan INSERT operasi dalam urutan kunci sortir.

  • Gunakan tombol sortir dalam GROUP BY klausa bila memungkinkan.

Kiat penyetelan kueri

Kami menyarankan Anda melakukan hal berikut untuk menyetel kueri Anda:

  • Selalu pesan kunci sortir majemuk dari kardinalitas terendah hingga kardinalitas tertinggi untuk efektivitas optimal.

  • Jika kunci utama dalam kunci sortir majemuk relatif unik (yaitu, memiliki kardinalitas tinggi), maka hindari menambahkan kolom tambahan ke kunci pengurutan Anda. Menambahkan kolom tambahan memiliki sedikit dampak pada kinerja kueri tetapi menambah biaya pemeliharaan.

Evaluasi efektivitas kunci sortir

Untuk mengoptimalkan kueri Anda, Anda harus dapat mengevaluasi efektivitas kueri Anda. Kami menyarankan Anda menggunakan tampilan SVL_QUERY_SUMMARY untuk menemukan informasi umum tentang eksekusi kueri. Dalam tampilan ini, Anda dapat menggunakan atribut IS_RRSCAN untuk menentukan apakah langkah EXPLAIN rencana menggunakan pemindaian terbatas rentang. Anda juga dapat menggunakan atribut rows_pre_filter untuk menentukan selektivitas kunci sortir.

Anda juga dapat menggunakan tampilan admin dari yang GitHub disebut v_my_last_query_summary. Tampilan menampilkan informasi untuk kueri terakhir yang dijalankan.

Pernyataan berikut menunjukkan bagaimana menemukan informasi umum tentang eksekusi query.

select lpad(' ',stm+seg+step) || label as label, rows, bytes, is_diskbased, is_rrscan, rows_pre_filter from svl_query_summary where query = pg_last_query_id() order by stm, seg, step;

Query sebelumnya mengembalikan output sampel berikut.

Contoh keluaran dari kueri sebelumnya.

Ketahui meja Anda

Sangat penting untuk memahami sifat-sifat penting dari tabel Anda. Untuk mempelajari lebih lanjut tentang tabel Anda, lakukan hal berikut:

  • Gunakan PG_TABLE_DEF untuk melihat informasi tentang kolom tabel.

  • Gunakan SVV_TABLE_INFO untuk melihat informasi yang lebih komprehensif tentang tabel, termasuk kemiringan distribusi data, kemiringan distribusi kunci, ukuran tabel, dan statistik.

Pilih gaya distribusi tabel yang tepat

Saat Anda menjalankan kueri, pengoptimal kueri mendistribusikan ulang baris ke node komputasi sesuai kebutuhan untuk melakukan gabungan dan agregasi apa pun. Tujuan dalam memilih gaya distribusi tabel adalah untuk meminimalkan dampak dari langkah redistribusi dengan menemukan data di tempat yang diperlukan sebelum Anda menjalankan kueri. 

Kami merekomendasikan pendekatan berikut untuk memilih gaya distribusi tabel yang tepat:

  • Hindari penyiaran dan redistribusi dalam rencana eksekusi kueri dengan menyusun baris dalam node yang sama. Misalnya, dengan memilihDISTKEY, Anda dapat mendistribusikan tabel fakta dan tabel satu dimensi pada kolom umum mereka. Pilih dimensi terbesar berdasarkan ukuran kumpulan data yang difilter. Hanya baris yang digunakan dalam gabungan yang harus didistribusikan, jadi pertimbangkan ukuran kumpulan data setelah pemfilteran, bukan ukuran tabel.

  • Pastikan tidak ada kemiringan pada kolom tempat kunci distribusi dibuat. Jika tidak, satu node komputasi dapat melakukan pengangkatan yang lebih berat daripada yang lain. Jika Anda melihat kemiringan, maka pertimbangkan untuk mengubah kolom kunci distribusi. Kolom dapat dianggap sebagai kandidat untuk kunci distribusi jika nilainya terdistribusi secara seragam atau nilai kardinal tinggi.

  • Jika tabel yang digunakan dalam kondisi gabungan kecil (kurang dari 1 GB), maka pertimbangkan gaya distribusiALL.

  • Anda dapat mengompres kunci distribusi, tetapi Anda harus menghindari mengompresi kolom tombol sortir (terutama kolom pertama dari tombol sortir).

catatan

Jika Anda menggunakan optimasi tabel otomatis, Anda tidak perlu memilih gaya distribusi tabel Anda. Untuk informasi selengkapnya, lihat Bekerja dengan pengoptimalan tabel otomatis di dokumentasi Amazon Redshift. Agar Amazon Redshift memilih gaya distribusi yang sesuai, tentukan AUTO gaya distribusi.