Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SYS_QUERY_HISTORY
Gunakan SYS_QUERY_HISTORY untuk melihat detail permintaan pengguna. Setiap baris mewakili permintaan pengguna dengan statistik terakumulasi untuk beberapa bidang. Tampilan ini berisi banyak jenis kueri, seperti bahasa definisi data (DDL), bahasa manipulasi data (DML), copy, unload, dan Amazon Redshift Spectrum. Ini berisi kueri yang sedang berjalan dan selesai.
SYS_QUERY_HISTORY terlihat oleh semua pengguna. Pengguna super dapat melihat semua baris; pengguna biasa hanya dapat melihat data mereka sendiri. Untuk informasi selengkapnya, lihat Visibilitas data dalam tabel dan tampilan sistem.
catatan
Untuk memverifikasi apakah transaksi yang berisi kueri yang dieksekusi berhasil dilakukan, Anda perlu melakukan operasi gabungan antara tabel sistem dan sys_transaction_history tabel. Contoh:
SELECT qh.transaction_id, qh.query_id, qh.status AS query_status, qh.query_type, TRIM(qh.query_text) AS query_text, th.status AS transaction_status FROM sys_query_history qh LEFT JOIN sys_transaction_history th ON qh.transaction_id = th.transaction_id;
Kolom tabel
| Nama kolom | Jenis data | Deskripsi |
|---|---|---|
| user_id | integer | Pengidentifikasi pengguna yang mengirimkan kueri. |
| Query_id | bigint | Pengidentifikasi kueri. |
| label kueri | karakter (320) | Nama pendek untuk query. |
| id transaksi_ | bigint | Pengidentifikasi transaksi. |
| session_id | integer | Pengidentifikasi proses dari proses yang menjalankan kueri. |
| database_name | karakter (128) | Nama database yang terhubung ke pengguna saat kueri dikeluarkan. |
| query_type | karakter (32) | Jenis kueri, seperti, SELECT, INSERT, UPDATE, UNLOAD, COPY, COMMAND, DDL, UTILITY, CTAS, dan LAINNYA. |
| status | karakter (10) | Status kueri. Nilai yang valid: perencanaan, antrian, menjalankan, mengembalikan, gagal, dibatalkan, dan berhasil. |
| result_cache_hit | Boolean | Menunjukkan apakah kueri cocok dengan cache hasil. |
| waktu mulai | timestamp | Waktu ketika kueri dimulai. |
| akhir_waktu | timestamp | Waktu ketika kueri selesai. |
| waktu yang telah berlalu | bigint | Jumlah total waktu (mikrodetik) yang dihabiskan untuk kueri. |
| antrian_waktu | bigint | Total waktu (mikrodetik) yang dihabiskan pada antrian kueri kelas layanan. |
| waktu_eksekusi | bigint | Total waktu (mikrodetik) berjalan di kelas layanan. |
| pesan kesalahan | karakter (512) | Alasan permintaan gagal. |
| baris yang dikembalikan | bigint | Jumlah baris dikembalikan ke klien. |
| Byte_dikembalikan | bigint | Jumlah byte yang dikembalikan ke klien. |
| kueri_teks | karakter (4000) | String kueri. String ini mungkin terpotong. |
| redshift_versi | karakter (256) | Versi Amazon Redshift saat kueri berjalan. |
| pemakaian_batas | karakter (150) | Daftar ID batas penggunaan yang dicapai oleh kueri. |
| tipe komputasi | varchar(32) | Menunjukkan apakah kueri berjalan pada cluster utama atau cluster penskalaan konkurensi. Nilai yang mungkin adalah primary (kueri berjalan pada cluster utama), secondary (kueri berjalan pada cluster sekunder), atau primary-scale (kueri berjalan pada cluster konkurensi). Ini hanya berlaku untuk cluster yang disediakan. |
| compile_time | bigint | Total waktu (mikrodetik) yang dihabiskan untuk kompilasi kueri. |
| waktu_perencanaan | bigint | Total waktu (mikrodetik) yang dihabiskan untuk perencanaan kueri. |
| kunci_waktu_tunggu | bigint | Total waktu (mikrodetik) yang dihabiskan untuk menunggu kunci relasi. |
| id kelas layanan | integer | ID kelas layanan. Untuk daftar ID kelas layanan, bukaID kelas layanan WLM. Kolom ini hanya digunakan untuk kueri yang dijalankan pada cluster yang disediakan. Untuk kueri yang dijalankan di Redshift Serverless, kolom ini berisi -1. |
| nama_kelas_layanan | karakter (64) | Nama kelas layanan. Kolom ini hanya digunakan untuk kueri yang dijalankan pada cluster yang disediakan. Untuk kueri yang dijalankan di Amazon Redshift Redshift Serverless, kolom ini kosong. |
| Query_Prioritas | karakter (20) | Prioritas antrian di mana kueri berjalan. Kemungkinan nilainya adalah sebagai berikut:
NULL berarti prioritas kueri tidak didukung untuk kueri. Kolom ini hanya digunakan untuk kueri yang dijalankan pada cluster yang disediakan. Untuk kueri yang dijalankan di Redshift Serverless, kolom ini kosong. |
| short_query_dipercepat | karakter (10) | Apakah kueri dipercepat menggunakan akselerasi kueri pendek (SQA). Kemungkinan nilainya adalah sebagai berikut:
Kolom ini hanya digunakan untuk kueri yang dijalankan pada cluster yang disediakan. Untuk kueri yang dijalankan di Redshift Serverless, kolom ini kosong. |
| user_query_hash | karakter (40) | Hash kueri yang dihasilkan dari kueri, termasuk literal kuerinya. Kueri berulang dengan teks kueri yang sama akan memiliki nilai user_query_hash yang sama. |
| generik_query_hash | karakter (40) | Hash kueri yang dihasilkan dari kueri, tidak termasuk literal kuerinya. Kueri berulang dengan teks kueri yang sama, tetapi literal kueri yang berbeda, akan memiliki nilai generic_query_hash yang sama. |
| versi_hash kueri | integer | Nomor versi untuk hash kueri yang dihasilkan dari kueri. |
| result_cache_query_id | integer | Jika kueri menggunakan hasil caching, nilai bidang ini adalah ID kueri dari kueri yang merupakan sumber hasil cache. Jika hasil caching tidak digunakan, nilai bidang ini adalah |
| nama pengguna | karakter (128) | Nama pengguna yang mengirimkan kueri. |
| Query_uuid | karakter (36) | Pengidentifikasi unik global (UUID) dari kueri. |
Kueri Sampel
Kueri berikut mengembalikan kueri yang sedang berjalan dan mengantri.
SELECT user_id, query_id, transaction_id, session_id, status, trim(database_name) AS database_name, start_time, end_time, result_cache_hit, elapsed_time, queue_time, execution_time FROM sys_query_history WHERE status IN ('running','queued') ORDER BY start_time;
Sampel keluaran.
user_id | query_id | transaction_id | session_id | status | database_name | start_time | end_time | result_cache_hit | elapsed_time | queue_time | execution_time ---------+----------+----------------+------------+---------+---------------+---------------------------+----------------------------+------------------+--------------+------------+---------------- 101 | 760705 | 852337 | 1073832321 | running | tpcds_1t | 2022-02-15 19:03:19.67849 | 2022-02-15 19:03:19.739811 | f | 61321 | 0 | 0
Kueri berikut mengembalikan waktu mulai kueri, waktu akhir, waktu antrian, waktu berlalu, waktu perencanaan, dan metadata lainnya untuk kueri tertentu.
SELECT user_id, query_id, transaction_id, session_id, status, trim(database_name) AS database_name, start_time, end_time, result_cache_hit, elapsed_time, queue_time, execution_time, planning_time, trim(query_text) as query_text FROM sys_query_history WHERE query_id = 3093;
Sampel keluaran.
user_id | query_id | transaction_id | session_id | status | database_name | start_time | end_time | result_cache_hit | elapsed_time | queue_time | execution_time | planning_time | query_text --------+----------+----------------+------------+------------+---------------+----------------------------+----------------------------+------------------+--------------+------------+----------------+---------------+------------------------------------- 106 | 3093 | 11759 | 1073750146 | success | dev | 2023-03-16 16:53:17.840214 | 2023-03-16 16:53:18.106588 | f | 266374 | 0 | 105725 | 136589 | select count(*) from item;
Kueri berikut mencantumkan 10 kueri SELECT terbaru.
SELECT query_id, transaction_id, session_id, start_time, elapsed_time, queue_time, execution_time, returned_rows, returned_bytes FROM sys_query_history WHERE query_type = 'SELECT' ORDER BY start_time DESC limit 10;
Sampel keluaran.
query_id | transaction_id | session_id | start_time | elapsed_time | queue_time | execution_time | returned_rows | returned_bytes ----------+----------------+------------+----------------------------+--------------+------------+----------------+---------------+---------------- 526532 | 61093 | 1073840313 | 2022-02-09 04:43:24.149603 | 520571 | 0 | 481293 | 1 | 3794 526520 | 60850 | 1073840313 | 2022-02-09 04:38:27.24875 | 635957 | 0 | 596601 | 1 | 3679 526508 | 60803 | 1073840313 | 2022-02-09 04:37:51.118835 | 563882 | 0 | 503135 | 5 | 17216 526505 | 60763 | 1073840313 | 2022-02-09 04:36:48.636224 | 649337 | 0 | 589823 | 1 | 652 526478 | 60730 | 1073840313 | 2022-02-09 04:36:11.741471 | 14611321 | 0 | 14544058 | 0 | 0 526467 | 60636 | 1073840313 | 2022-02-09 04:34:11.91463 | 16711367 | 0 | 16633767 | 1 | 575 511617 | 617946 | 1074009948 | 2022-01-20 06:21:54.44481 | 9937090 | 0 | 9899271 | 100 | 12500 511603 | 617941 | 1074259415 | 2022-01-20 06:21:45.71744 | 8065081 | 0 | 7582500 | 100 | 8889 511595 | 617935 | 1074128320 | 2022-01-20 06:21:44.030876 | 1051270 | 0 | 1014879 | 1 | 72 511584 | 617931 | 1074030019 | 2022-01-20 06:21:42.764088 | 609033 | 0 | 485887 | 100 | 8438
Kueri berikut menunjukkan jumlah kueri pilihan harian dan waktu kueri rata-rata yang telah berlalu.
SELECT date_trunc('day',start_time) AS exec_day, status, COUNT(*) AS query_cnt, AVG(datediff (microsecond,start_time,end_time)) AS elapsed_avg FROM sys_query_history WHERE query_type = 'SELECT' AND start_time >= '2022-01-14' AND start_time <= '2022-01-18' GROUP BY exec_day, status ORDER BY exec_day, status;
Sampel keluaran.
exec_day | status | query_cnt | elapsed_avg ---------------------+---------+-----------+------------ 2022-01-14 00:00:00 | success | 5253 | 56608048 2022-01-15 00:00:00 | success | 7004 | 56995017 2022-01-16 00:00:00 | success | 5253 | 57016363 2022-01-17 00:00:00 | success | 5309 | 55236784 2022-01-18 00:00:00 | success | 8092 | 54355124
Kueri berikut menunjukkan kinerja waktu kueri harian yang telah berlalu.
SELECT distinct date_trunc('day',start_time) AS exec_day, query_count.cnt AS query_count, Percentile_cont(0.5) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P50_runtime, Percentile_cont(0.8) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P80_runtime, Percentile_cont(0.9) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P90_runtime, Percentile_cont(0.99) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS P99_runtime, Percentile_cont(1.0) within group(ORDER BY elapsed_time) OVER (PARTITION BY exec_day) AS max_runtime FROM sys_query_history LEFT JOIN (SELECT date_trunc('day',start_time) AS day, count(*) cnt FROM sys_query_history WHERE query_type = 'SELECT' GROUP by 1) query_count ON date_trunc('day',start_time) = query_count.day WHERE query_type = 'SELECT' ORDER BY exec_day;
Sampel keluaran.
exec_day | query_count | p50_runtime | p80_runtime | p90_runtime | p99_runtime | max_runtime ---------------------+-------------+-------------+-------------+-------------+--------------+-------------- 2022-01-14 00:00:00 | 5253 | 16816922.0 | 69525096.0 | 158524917.8 | 486322477.52 | 1582078873.0 2022-01-15 00:00:00 | 7004 | 15896130.5 | 71058707.0 | 164314568.9 | 500331542.07 | 1696344792.0 2022-01-16 00:00:00 | 5253 | 15750451.0 | 72037082.2 | 159513733.4 | 480372059.24 | 1594793766.0 2022-01-17 00:00:00 | 5309 | 15394513.0 | 68881393.2 | 160254700.0 | 493372245.84 | 1521758640.0 2022-01-18 00:00:00 | 8092 | 15575286.5 | 68485955.4 | 154559572.5 | 463552685.39 | 1542783444.0 2022-01-19 00:00:00 | 5860 | 16648747.0 | 72470482.6 | 166485138.2 | 492038228.67 | 1693483241.0 2022-01-20 00:00:00 | 1751 | 15422072.0 | 69686381.0 | 162315385.0 | 497066615.00 | 1439319739.0 2022-02-09 00:00:00 | 13 | 6382812.0 | 17616161.6 | 21197988.4 | 23021343.84 | 23168439.0
Kueri berikut menunjukkan distribusi jenis kueri.
SELECT query_type, COUNT(*) AS query_count FROM sys_query_history GROUP BY query_type ORDER BY query_count DESC;
Sampel keluaran.
query_type | query_count ------------+------------- UTILITY | 134486 SELECT | 38537 DDL | 4832 OTHER | 768 LOAD | 768 CTAS | 748 COMMAND | 92
Contoh berikut menunjukkan perbedaan hasil hash query antara beberapa query. Amati pertanyaan berikut:
CREATE TABLE test_table (col1 INT); INSERT INTO test_table VALUES (1),(2); SELECT * FROM test_table; SELECT * FROM test_table; SELECT col1 FROM test_table; SELECT * FROM test_table WHERE col1=1; SELECT * FROM test_table WHERE col1=2; SELECT query_id, TRIM(user_query_hash) AS user_query_hash, TRIM(generic_query_hash) AS generic_query_hash, TRIM(query_text) AS text FROM sys_query_history ORDER BY start_time DESC LIMIT 10;
Berikut ini adalah contoh output:
query_id | user_query_hash | generic_query_hash | text ---------+-----------------+--------------------+---------- 24723049 | oPuFtjEPLTs= | oPuFtjEPLTs= | select query_id, trim(user_query_hash) as user_query_hash, trim(generic_query_hash) as generic_query_hash, query_hash_version, trim(query_text) as text from sys_query_history order by start_time\r\ndesc limit 20 24723045 | Gw2Kwdd8m2I= | IwfRu8/XAKI= | select * from test_table where col1=2 limit 100 24723041 | LNw2vx0GDXo= | IwfRu8/XAKI= | select * from test_table where col1=1 limit 100 24723036 | H+qep/c82Y8= | H+qep/c82Y8= | select col1 from test_table limit 100 24723033 | H+qep/c82Y8= | H+qep/c82Y8= | select * from test_table limit 100 24723029 | H+qep/c82Y8= | H+qep/c82Y8= | select * from test_table limit 100 24723023 | 50sirx9E1hU= | uO36Z1a/QYs= | insert into test_table values (1),(2) 24723021 | YSVnlivZHeo= | YSVnlivZHeo= | create table test_table (col1 int)
SELECT * FROM test_table;dan SELECT col1 FROM test_table; memiliki nilai user_query_hash yang sama, karena test_table hanya memiliki satu kolom. SELECT * FROM test_table WHERE col1=1;dan SELECT * FROM test_table WHERE col1=2; memiliki nilai user_query_hash yang berbeda, tetapi nilai generic_query_hash identik, karena kedua kueri identik di luar literal kueri 1 dan 2.