取消查詢 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

取消查詢

如果您執行的查詢時間過長或耗用過多資源,請取消查詢。例如,建立售票員清單,其中包括售票員的名稱和賣出的門票數量。下面的查詢從SALES表和USERS表中選擇數據,並通過匹配SELLERID和USERID在WHERE子句中連接兩個表。

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 百萬個資料列,而且需要很長時間來執行。

若要取消執行中的查詢,請使用具有查詢工作階段 ID 的CANCEL命令。使用 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執行命令後,請使用指RESET令重設查詢群組。

若要使用超級使用者佇列取消查詢,請執行這些命令。

SET query_group TO 'superuser'; CANCEL 1073791534; RESET query_group;