Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Praktik terbaik untuk kinerja RLS
Berikut ini adalah praktik terbaik untuk memastikan kinerja yang lebih baik dari Amazon Redshift pada tabel yang dilindungi oleh RLS.
Keamanan operator dan fungsi
Saat menanyakan tabel yang dilindungi RLS, penggunaan operator atau fungsi tertentu dapat menyebabkan penurunan kinerja. Amazon Redshift mengklasifikasikan operator dan fungsi sebagai aman atau tidak aman untuk menanyakan tabel yang dilindungi RLS. Fungsi atau operator diklasifikasikan sebagai RLS-safe ketika tidak memiliki efek samping yang dapat diamati tergantung pada input. Secara khusus, fungsi atau operator RLS-safe tidak dapat menjadi salah satu dari yang berikut:
-
Mengeluarkan nilai input, atau nilai apa pun yang bergantung pada nilai input, dengan atau tanpa pesan kesalahan.
-
Gagal atau mengembalikan kesalahan yang tergantung pada nilai input.
Operator RLS-tidak aman meliputi:
-
Operator aritmatika — +, -,/, *,%.
-
Operator teks — LIKE dan MIRIP DENGAN.
-
Operator pemeran.
-
UDFs.
Gunakan pernyataan SELECT berikut untuk memeriksa keamanan operator dan fungsi.
SELECT proname, proc_is_rls_safe(oid) FROM pg_proc;
Amazon Redshift memberlakukan pembatasan pada urutan evaluasi predikat pengguna yang berisi operator dan fungsi RLS-unsafe saat merencanakan kueri pada tabel yang dilindungi RLS. Kueri yang merujuk pada operator atau fungsi RLS-unsafe dapat menyebabkan penurunan kinerja saat menanyakan tabel yang dilindungi RLS. Kinerja dapat menurun secara signifikan ketika Amazon Redshift tidak dapat mendorong predikat RLS-unsafe ke pemindaian tabel dasar untuk memanfaatkan kunci pengurutan. Untuk kinerja yang lebih baik, hindari kueri menggunakan predikat RLS-unsafe yang memanfaatkan kunci pengurutan. Untuk memverifikasi bahwa Amazon Redshift dapat menekan operator dan fungsi, Anda dapat menggunakan pernyataan EXPLORE dalam kombinasi dengan izin sistem EXPLORE RLS.
Hasil caching
Untuk mengurangi runtime kueri dan meningkatkan kinerja sistem, Amazon Redshift menyimpan hasil jenis kueri tertentu dalam memori pada node pemimpin.
Amazon Redshift menggunakan hasil cache untuk kueri baru yang memindai tabel yang dilindungi RLS ketika semua kondisi untuk tabel yang tidak dilindungi benar dan ketika semua hal berikut benar:
-
Tabel atau tampilan dalam kebijakan belum diubah.
-
Kebijakan tidak menggunakan fungsi yang harus dievaluasi setiap kali dijalankan, seperti GETDATE atau CURRENT_USER.
Untuk kinerja yang lebih baik, hindari penggunaan predikat kebijakan yang tidak memenuhi kondisi sebelumnya.
Untuk informasi selengkapnya tentang caching hasil di Amazon Redshift, lihat. Hasil caching
Kebijakan yang kompleks
Untuk kinerja yang lebih baik, hindari menggunakan kebijakan kompleks dengan subkueri yang menggabungkan beberapa tabel.