Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
EXPLAIN
Menampilkan rencana eksekusi untuk pernyataan query tanpa menjalankan query. Untuk informasi tentang alur kerja analisis kueri, lihatAlur kerja analisis kueri.
Sintaks
EXPLAIN [ VERBOSE ] query
Parameter
- VERBOSE
-
Menampilkan rencana kueri lengkap, bukan hanya ringkasan.
- query
-
Pernyataan kueri untuk menjelaskan. Kueri dapat berupaSELECT,INSERT, CREATE TABLE ASUPDATE, atau DELETE pernyataan.
Catatan penggunaan
EXPLAINkinerja terkadang dipengaruhi oleh waktu yang dibutuhkan untuk membuat tabel sementara. Misalnya, kueri yang menggunakan optimasi subexpression umum memerlukan tabel sementara untuk dibuat dan dianalisis untuk mengembalikan output. EXPLAIN Rencana kueri tergantung pada skema dan statistik tabel sementara. Oleh karena itu, EXPLAIN perintah untuk jenis kueri ini mungkin membutuhkan waktu lebih lama untuk dijalankan dari yang diharapkan.
Anda EXPLAIN hanya dapat menggunakan untuk perintah berikut:
-
SELECT
-
SELECT INTO
-
CREATETABLESEBAGAI
-
INSERT
-
UPDATE
-
DELETE
EXPLAINPerintah akan gagal jika Anda menggunakannya untuk SQL perintah lain, seperti bahasa definisi data (DDL) atau operasi database.
Biaya unit relatif EXPLAIN keluaran digunakan oleh Amazon Redshift untuk memilih paket kueri. Amazon Redshift membandingkan ukuran berbagai perkiraan sumber daya untuk menentukan rencana.
Perencanaan kueri dan langkah-langkah pelaksanaan
Rencana eksekusi untuk pernyataan kueri Amazon Redshift tertentu memecah eksekusi dan perhitungan kueri menjadi urutan langkah dan operasi tabel terpisah yang akhirnya menghasilkan hasil akhir yang ditetapkan untuk kueri. Untuk informasi tentang perencanaan kueri, lihatPemrosesan kueri.
Tabel berikut memberikan ringkasan langkah-langkah yang dapat digunakan Amazon Redshift dalam mengembangkan rencana eksekusi untuk kueri apa pun yang dikirimkan pengguna untuk dieksekusi.
EXPLAINoperator | Langkah-langkah eksekusi kueri | Deskripsi |
---|---|---|
SCAN: | ||
Pemindaian Berurutan | scan | Pemindaian relasi Amazon Redshift atau operator atau langkah pemindaian tabel. Memindai seluruh tabel secara berurutan dari awal hingga akhir; juga mengevaluasi kendala kueri untuk setiap baris (Filter) jika ditentukan dengan klausa. WHERE Juga digunakan untuk menjalankanINSERT,UPDATE, dan DELETE pernyataan. |
JOINS: Amazon Redshift menggunakan operator gabungan yang berbeda berdasarkan desain fisik tabel yang digabungkan, lokasi data yang diperlukan untuk bergabung, dan atribut spesifik dari kueri itu sendiri. Subquery Scan - Subquery scan dan append digunakan untuk menjalankan query. UNION | ||
Loop Bersarang | nloop | Gabungan yang paling tidak optimal; terutama digunakan untuk cross-join (produk Cartesian; tanpa kondisi gabungan) dan beberapa ketidaksetaraan bergabung. |
Hash Bergabung | hjoin | Juga digunakan untuk sambungan dalam dan gabungan luar kiri dan kanan dan biasanya lebih cepat daripada sambungan loop bersarang. Hash Join membaca tabel luar, hash kolom yang bergabung, dan menemukan kecocokan di tabel hash bagian dalam. Langkah dapat tumpah ke disk. (Input bagian dalam hjoin adalah langkah hash yang dapat berbasis disk.) |
Gabung Bergabung | mjoin | Juga digunakan untuk gabungan dalam dan gabungan luar (untuk tabel gabungan yang didistribusikan dan diurutkan pada kolom bergabung). Biasanya algoritma bergabung Amazon Redshift tercepat, tidak termasuk pertimbangan biaya lainnya. |
AGGREGATION: Operator dan langkah-langkah yang digunakan untuk kueri yang melibatkan fungsi agregat dan operasi GROUP BY. | ||
Agregat | aggr | Operator/langkah untuk fungsi agregat skalar. |
HashAggregate | aggr | Operator/langkah untuk fungsi agregat yang dikelompokkan. Dapat beroperasi dari disk berdasarkan tabel hash tumpah ke disk. |
GroupAggregate | aggr | Operator terkadang dipilih untuk kueri agregat yang dikelompokkan jika setelan konfigurasi Amazon Redshift untuk setelan force_hash_grouping tidak aktif. |
SORT: Operator dan langkah-langkah yang digunakan saat kueri harus mengurutkan atau menggabungkan set hasil. | ||
Urutkan | menyortir | Sortir melakukan penyortiran yang ditentukan ORDER oleh klausa BY serta operasi lain seperti UNIONs dan bergabung. Dapat beroperasi dari disk. |
Gabungkan | bermerger | Menghasilkan hasil akhir yang diurutkan dari kueri berdasarkan hasil diurutkan menengah yang berasal dari operasi yang dilakukan secara paralel. |
EXCEPT,INTERSECT, dan UNION operasi: | ||
SetOp Kecuali [Berbeda] | hjoin | Digunakan untuk EXCEPT pertanyaan. Dapat beroperasi dari disk berdasarkan fakta bahwa input hash dapat berbasis disk. |
Hash Intersect [Berbeda] | hjoin | Digunakan untuk INTERSECT pertanyaan. Dapat beroperasi dari disk berdasarkan fakta bahwa input hash dapat berbasis disk. |
Tambahkan [Semua |Berbeda] | save | Tambahkan digunakan dengan Subquery Scan untuk mengimplementasikan UNION dan UNION ALL query. Dapat beroperasi dari disk berdasarkan keutamaan “simpan”. |
Lain-lain/Lainnya: | ||
Hash | hash | Digunakan untuk gabungan dalam dan gabungan luar kiri dan kanan (memberikan masukan ke gabungan hash). Operator Hash membuat tabel hash untuk tabel bagian dalam gabungan. (Tabel bagian dalam adalah tabel yang diperiksa untuk kecocokan dan, dalam gabungan dua tabel, biasanya yang lebih kecil dari keduanya.) |
Kuota | batasan | Mengevaluasi LIMIT klausa. |
Terwujud | save | Terwujud baris untuk input ke gabungan loop bersarang dan beberapa gabungan gabungan. Dapat beroperasi dari disk. |
-- | mengurai | Digunakan untuk mengurai data masukan tekstual selama pemuatan. |
-- | proyek | Digunakan untuk mengatur ulang kolom dan menghitung ekspresi, yaitu data proyek. |
Hasil | -- | Jalankan fungsi skalar yang tidak melibatkan akses tabel apa pun. |
-- | kembali | Kembalikan baris ke pemimpin atau klien. |
Subrencana | -- | Digunakan untuk subquery tertentu. |
Unik | khas | Menghilangkan duplikat dari SELECT DISTINCT dan UNION kueri. |
Jendela | jendela | Hitung fungsi jendela agregat dan peringkat. Dapat beroperasi dari disk. |
Operasi Jaringan: | ||
Jaringan (Siaran) | bcast | Broadcast juga merupakan atribut dari Join Explain operator dan langkah-langkah. |
Jaringan (Distribusikan) | dist | Mendistribusikan baris untuk menghitung node untuk pemrosesan paralel oleh cluster gudang data. |
Jaringan (Kirim ke Pemimpin) | kembali | Mengirim hasil kembali ke pemimpin untuk diproses lebih lanjut. |
DMLOperasi (operator yang memodifikasi data): | ||
Sisipkan (menggunakan Hasil) | sisipkan | Menyisipkan data. |
Hapus (Pindai+Filter) | hapus | Menghapus data. Dapat beroperasi dari disk. |
Perbarui (Pindai+Filter) | hapus, masukkan | Diimplementasikan sebagai hapus dan Sisipkan. |
Menggunakan EXPLAIN untuk RLS
Jika kueri berisi tabel yang tunduk pada kebijakan keamanan tingkat baris (RLS), EXPLAIN menampilkan node khusus RLS SecureScan . Amazon Redshift juga mencatat jenis node yang sama ke tabel EXPLAIN sistem STL _. EXPLAINtidak mengungkapkan RLS predikat yang berlaku untuk dim_tbl. Tipe RLS SecureScan node berfungsi sebagai indikator bahwa rencana eksekusi berisi operasi tambahan yang tidak terlihat oleh pengguna saat ini.
Contoh berikut menggambarkan sebuah RLS SecureScan node.
EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN ------------------------------------------------------------------------ XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") -> *XN* *RLS SecureScan f (cost=0.00..0.14 rows=2 width=4)* Filter: ((k_dim / 10) > 0) -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)
Untuk mengaktifkan penyelidikan penuh paket kueri yang tunduk padaRLS, Amazon Redshift menawarkan izin EXPLAIN RLS sistem. Pengguna yang telah diberikan izin ini dapat memeriksa paket kueri lengkap yang juga menyertakan RLS predikat.
Contoh berikut mengilustrasikan Pemindaian Seq tambahan di bawah RLS SecureScan node juga menyertakan predikat RLS kebijakan (k_dim > 1).
EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN --------------------------------------------------------------------------------- XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") *-> XN RLS SecureScan f (cost=0.00..0.14 rows=2 width=4) Filter: ((k_dim / 10) > 0)* -> *XN* *Seq Scan on fact_tbl rls_table (cost=0.00..0.06 rows=5 width=8) Filter: (k_dim > 1)* -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)
Meskipun EXPLAIN RLS izin diberikan kepada pengguna, Amazon Redshift mencatat paket kueri lengkap termasuk RLS predikat dalam tabel sistem STL _EXPLAIN. Kueri yang dijalankan saat izin ini tidak diberikan akan dicatat tanpa RLS internal. Memberi atau menghapus EXPLAIN RLS izin tidak akan mengubah apa yang telah dicatat Amazon Redshift EXPLAIN _ STL untuk kueri sebelumnya.
AWS Lake Formation- hubungan Redshift yang RLS dilindungi
Contoh berikut mengilustrasikan SecureScan node LF, yang dapat Anda gunakan untuk melihat hubungan Lake Formation-RLS.
EXPLAIN SELECT * FROM lf_db.public.t_share WHERE a > 1; QUERY PLAN --------------------------------------------------------------- XN LF SecureScan t_share (cost=0.00..0.02 rows=2 width=11) (2 rows)
Contoh
catatan
Untuk contoh ini, output sampel mungkin bervariasi tergantung pada konfigurasi Amazon Redshift.
Contoh berikut mengembalikan rencana query untuk query yang memilihEVENTID,, EVENTNAMEVENUEID, dan VENUENAME dari EVENT dan VENUE tabel:
explain select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (5 rows)
Contoh berikut mengembalikan rencana query untuk query yang sama dengan output verbose:
explain verbose select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- {HASHJOIN :startup_cost 2.52 :total_cost 58653620.93 :plan_rows 8712 :plan_width 43 :best_pathkeys <> :dist_info DS_DIST_OUTER :dist_info.dist_keys ( TARGETENTRY { VAR :varno 2 :varattno 1 ... XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (519 rows)
Contoh berikut mengembalikan rencana query untuk pernyataan CREATE TABLE AS (CTAS):
explain create table venue_nonulls as select * from venue where venueseats is not null; QUERY PLAN ----------------------------------------------------------- XN Seq Scan on venue (cost=0.00..2.02 rows=187 width=45) Filter: (venueseats IS NOT NULL) (2 rows)