Kinerja - Amazon Redshift

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

Kinerja

Amazon Redshift mencapai kueri yang sangat cepat dijalankan dengan menggunakan fitur kinerja ini.

Pemrosesan paralel secara besar-besaran

Massively parallel processing (MPP) memungkinkan menjalankan cepat kueri paling kompleks yang beroperasi pada sejumlah besar data. Beberapa node komputasi menangani semua pemrosesan kueri yang mengarah ke agregasi hasil akhir, dengan setiap inti dari setiap node menjalankan segmen kueri terkompilasi yang sama pada bagian dari seluruh data.

Amazon Redshift mendistribusikan baris tabel ke node komputasi sehingga data dapat diproses secara paralel. Dengan memilih kunci distribusi yang sesuai untuk setiap tabel, Anda dapat mengoptimalkan distribusi data untuk menyeimbangkan beban kerja dan meminimalkan pergerakan data dari node ke node. Untuk informasi selengkapnya, lihat Pilih gaya distribusi terbaik.

Memuat data dari file datar memanfaatkan pemrosesan paralel dengan menyebarkan beban kerja di beberapa node sambil secara bersamaan membaca dari beberapa file. Untuk informasi selengkapnya tentang cara memuat data ke dalam tabel, lihatPraktik terbaik Amazon Redshift untuk memuat data.

Penyimpanan data kolumnar

Penyimpanan kolumnar untuk tabel database secara drastis mengurangi persyaratan I/O disk secara keseluruhan dan merupakan faktor penting dalam mengoptimalkan kinerja kueri analitik. Menyimpan informasi tabel database secara kolumnar mengurangi jumlah permintaan I/O disk dan mengurangi jumlah data yang perlu Anda muat dari disk. Memuat lebih sedikit data ke dalam memori memungkinkan Amazon Redshift melakukan lebih banyak pemrosesan dalam memori saat menjalankan kueri. Lihat Penyimpanan kolumnar penjelasan yang lebih rinci.

Ketika kolom diurutkan dengan tepat, prosesor kueri dapat dengan cepat menyaring sebagian besar blok data. Untuk informasi selengkapnya, lihat Pilih tombol sortir terbaik.

Kompresi data

Kompresi data mengurangi kebutuhan penyimpanan, sehingga mengurangi disk I/O, yang meningkatkan kinerja kueri. Saat Anda menjalankan kueri, data terkompresi dibaca ke dalam memori, lalu tidak dikompresi selama kueri dijalankan. Memuat lebih sedikit data ke dalam memori memungkinkan Amazon Redshift mengalokasikan lebih banyak memori untuk menganalisis data. Karena penyimpanan kolumnar menyimpan data serupa secara berurutan, Amazon Redshift dapat menerapkan pengkodean kompresi adaptif yang secara khusus terkait dengan tipe data kolumnar. Cara terbaik untuk mengaktifkan kompresi data pada kolom tabel adalah dengan mengizinkan Amazon Redshift menerapkan pengkodean kompresi optimal saat Anda memuat tabel dengan data. Untuk mempelajari selengkapnya tentang menggunakan kompresi data otomatis, lihatMemuat tabel dengan kompresi otomatis.

Pengoptimal kueri

Mesin kueri Amazon Redshift menggabungkan pengoptimal kueri yang sadar MPP dan juga memanfaatkan penyimpanan data berorientasi kolumnar. Pengoptimal kueri Amazon Redshift mengimplementasikan penyempurnaan dan ekstensi yang signifikan untuk memproses kueri analitik kompleks yang sering menyertakan gabungan, subkueri, dan agregasi multi-tabel. Untuk mempelajari lebih lanjut tentang mengoptimalkan kueri, lihat. Tuning kinerja kueri

Hasil caching

Untuk mengurangi runtime kueri dan meningkatkan kinerja sistem, Amazon Redshift menyimpan hasil jenis kueri tertentu dalam memori pada node pemimpin. Saat pengguna mengirimkan kueri, Amazon Redshift memeriksa cache hasil untuk salinan hasil kueri yang valid dan di-cache. Jika kecocokan ditemukan di cache hasil, Amazon Redshift menggunakan hasil cache dan tidak menjalankan kueri. Hasil caching transparan bagi pengguna.

Hasil caching diaktifkan secara default. Untuk mematikan caching hasil untuk sesi saat ini, atur enable_result_cache_for_session parameter keoff.

Amazon Redshift menggunakan hasil cache untuk kueri baru jika semua hal berikut benar:

  • Pengguna yang mengirimkan kueri memiliki izin akses ke objek yang digunakan dalam kueri.

  • Tabel atau tampilan dalam kueri belum diubah.

  • Kueri tidak menggunakan fungsi yang harus dievaluasi setiap kali dijalankan, seperti GETDATE.

  • Kueri tidak mereferensikan tabel eksternal Amazon Redshift Spectrum.

  • Parameter konfigurasi yang mungkin memengaruhi hasil kueri tidak berubah.

  • Kueri secara sintaksis cocok dengan kueri yang di-cache.

Untuk memaksimalkan efektivitas cache dan penggunaan sumber daya yang efisien, Amazon Redshift tidak menyimpan beberapa set hasil kueri besar. Amazon Redshift menentukan apakah akan menyimpan hasil kueri berdasarkan sejumlah faktor. Faktor-faktor ini termasuk jumlah entri dalam cache dan jenis instans klaster Amazon Redshift Anda.

Untuk menentukan apakah kueri menggunakan cache hasil, kueri tampilan SVL_QLOG sistem. Jika kueri menggunakan cache hasil, kolom source_query mengembalikan ID kueri dari kueri sumber. Jika hasil caching tidak digunakan, nilai kolom source_query adalah NULL.

Contoh berikut menunjukkan bahwa kueri yang dikirimkan oleh userid 104 dan userid 102 menggunakan cache hasil dari kueri yang dijalankan oleh userid 100.

select userid, query, elapsed, source_query from svl_qlog where userid > 1 order by query desc; userid | query | elapsed | source_query -------+--------+----------+------------- 104 | 629035 | 27 | 628919 104 | 629034 | 60 | 628900 104 | 629033 | 23 | 628891 102 | 629017 | 1229393 | 102 | 628942 | 28 | 628919 102 | 628941 | 57 | 628900 102 | 628940 | 26 | 628891 100 | 628919 | 84295686 | 100 | 628900 | 87015637 | 100 | 628891 | 58808694 |

Kode yang dikompilasi

Node pemimpin mendistribusikan kode terkompilasi yang sepenuhnya dioptimalkan di semua node dari sebuah cluster. Mengompilasi kueri mengurangi overhead yang terkait dengan penerjemah dan oleh karena itu meningkatkan kecepatan runtime, terutama untuk kueri yang kompleks. Kode yang dikompilasi di-cache dan dibagikan di seluruh sesi di cluster yang sama. Akibatnya, future run dari kueri yang sama akan lebih cepat, seringkali bahkan dengan parameter yang berbeda.

Query run engine mengkompilasi kode yang berbeda untuk protokol koneksi JDBC dan ODBC, sehingga dua klien yang menggunakan protokol yang berbeda masing-masing dikenakan biaya pertama kali untuk mengkompilasi kode. Klien yang menggunakan protokol yang sama, bagaimanapun, mendapat manfaat dari berbagi kode cache.