本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如果您執行的查詢耗時太久或耗用過多的資源,請取消查詢。例如,建立售票員清單,其中包括售票員的名稱和賣出的門票數量。下列查詢從 SALES
資料表和 USERS
資料表中選取資料,並比對 WHERE 子句中的 SELLERID 和 USERID,來聯結這兩個資料表。
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
WHERE sales.sellerid = users.userid
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
結果類似如下所示。
sellerid | firstname | lastname | sum
----------+-----------+----------+------
48950 | Nayda | Hood | 184
19123 | Scott | Simmons | 164
20029 | Drew | Mcguire | 164
36791 | Emerson | Delacruz | 160
13567 | Imani | Adams | 156
9697 | Dorian | Ray | 156
41579 | Harrison | Durham | 156
15591 | Phyllis | Clay | 152
3008 | Lucas | Stanley | 148
44956 | Rachel |Villarreal| 148
注意
這是一個複雜查詢。對於本教學課程,您無需擔心此查詢的建構方式。
前一個查詢僅幾秒便完成執行,並傳回 2,102 個資料列。
假設您忘了放入 WHERE 子句。
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
結果集會包含 SALES
資料表中的所有列乘以 USERS
資料表中的所有列 (49989*3766)。這稱為笛卡兒聯結,但不建議使用它。結果超過 1 億 8 千 8 百萬個資料列,而且需要很長時間來執行。
若要取消執行中的查詢,請使用 CANCEL 命令搭配查詢的工作階段 ID。使用 Amazon Redshift 查詢編輯器 v2,您可以在查詢執行時選擇取消按鈕來取消查詢。
若要尋找工作階段 ID,請啟動新的工作階段並查詢 STV_RECENTS 資料表,如上一個步驟所示。以下範例說明如何使結果更具可讀性。若要這麼做,請使用 TRIM 函數修剪結尾空格,並僅顯示查詢字串的前 20 個字元。
若要判斷執行中查詢的工作階段 ID,請執行下列 SELECT 陳述式。
SELECT user_id, session_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
結果類似如下所示。
user_id | session_id | start_time | query_text
---------+---------------+----------------------------+----------------------------------------------------------------
100 | 1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM ...
若要使用工作階段 ID 取消查詢1073791534
,請執行下列命令。
CANCEL 1073791534;
注意
CANCEL 命令不會停止交易。若要停止或還原交易,請使用 ABORT 或 ROLLBACK 命令。若要取消與交易相關聯的查詢,首先取消查詢,然後停止交易。
如果您已取消的查詢與交易相關聯,請使用 ABORT 或 ROLLBACK 命令來取消交易,並捨棄對資料所做的任何變更:
ABORT;
除非您是以超級使用者身分登入,否則只能取消自己的查詢。超級使用者可以取消所有查詢。
如果您的查詢工具不支援同時執行查詢,請啟動另一個工作階段來取消查詢。
如需取消查詢的詳細資訊,請參閱《Amazon Redshift 資料庫開發人員指南》中的 CANCEL。
使用超級使用者佇列來取消查詢
如果您的目前工作階段有太多查詢同時執行中,則您可能無法執行 CANCEL 命令,直到另一個查詢完成為止。在此情況下,請使用不同的工作負載管理查詢佇列來執行 CANCEL 命令。
使用工作負載管理,您可執行不同查詢佇列中的查詢,讓您無需等待另一個查詢完成。工作負載管理員會建立個別佇列 (稱為超級使用者佇列),您可以將其用於故障診斷。若要使用超級使用者佇列,請以超級使用者身分登入,並使用 SET 命令將查詢群組設為 'superuser'。在執行您的命令之後,請使用 RESET 命令來重設查詢群組。
若要使用超級使用者佇列取消查詢,請執行這些命令。
SET query_group TO 'superuser';
CANCEL 1073791534;
RESET query_group;