

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# STL\_QUERY
<a name="r_STL_QUERY"></a>

傳回有關資料庫查詢的執行資訊。

**注意**  
STL\_QUERY 和 STL\_QUERYTEXT 檢視僅包含查詢的相關資訊，不包含其他公用程式和 DDL 命令的相關資訊。如需 Amazon Redshift 執行之所有陳述式的清單和相關資訊，您也可以查詢 STL\_DDLTEXT 和 STL\_UTILITYTEXT 檢視。如需 Amazon Redshift 執行之所有陳述式的完整清單，您可以查詢 SVL\_STATEMENTTEXT 檢視。

所有使用者都可看見 STL\_QUERY。超級使用者可以看見所有資料列；一般使用者只能看見自己的資料。如需詳細資訊，請參閱[系統資料表和檢視中資料的可見性](cm_chap_system-tables.md#c_visibility-of-data)。

此資料表中的部份或所有資料也會在 SYS 監控檢視 [SYS\_QUERY\_HISTORY](SYS_QUERY_HISTORY.md) 中找到。SYS 監視檢視中的資料會格式化為更易於使用和理解。我們建議您使用 SYS 監控檢視進行查詢。

請注意，當您的查詢文字長度超過 4000 個字元時，STL\_QUERY 只會顯示截斷的資料。若要取得完整的查詢文字，您可以在各列的查詢文字上使用 UNION。

**注意**  
若要驗證包含已執行查詢的交易是否已成功認可，您需要在系統資料表與 `sys_transaction_history` 資料表之間執行聯結操作。例如：  

```
SELECT 
    stlq.xid AS transaction_id,
    stlq.query AS query_id,
    TRIM(stlq.querytxt) AS query_text,
    th.status AS transaction_status
FROM 
    stl_query stlq
LEFT JOIN 
    sys_transaction_history th ON stlq.xid = th.transaction_id;
```

## 資料表欄
<a name="sub-r_STL_QUERY-table-columns"></a>


| 欄名稱  | 資料類型  | 說明  | 
| --- | --- | --- | 
| userid | integer | 產生項目的使用者之 ID。 | 
| query  | integer | 查詢 ID。查詢欄可用於加入其他系統表格與檢視。 | 
| label  | character(320)  | 用於執行查詢的檔案名稱，或以 SET QUERY\_GROUP 命令定義的標籤。如果查詢不是檔案型，或未設定 QUERY\_GROUP 參數，則此欄位值為 default。 | 
| xid  | bigint  | 交易 ID。 | 
| pid  | integer  | 處理程序 ID。正常情況下，工作階段中的所有查詢都是在相同的處理程序中執行，所以若您在相同的工作階段中執行一系列查詢，則此值通常會保持不變。在特定內部事件後，Amazon Redshift 可能會重新啟動作用中工作階段並指派新的 PID。如需詳細資訊，請參閱[STL\_RESTARTED\_SESSIONS](r_STL_RESTARTED_SESSIONS.md)。 | 
| 資料庫 | character(32) | 當查詢發出時，要將使用者連接至其中的資料庫名稱。 | 
| querytxt  | character(4000)  | 查詢的實際查詢文字。 | 
| starttime | timestamp | 查詢開始的時間，以 UTC 表示。總時間包括佇列和執行。秒小數部分的精確度為 6 位元。例如：2009-06-12 11:29:19.131358。 | 
| endtime | timestamp | 查詢完成的時間，以 UTC 表示。總時間包括佇列和執行。秒小數部分的精確度為 6 位元。例如：2009-06-12 11:29:19.131358。 | 
| aborted  | integer  | 如果查詢已被系統中止或已被使用者取消，則此欄包含 1。如果查詢完成執行 (包括將結果傳回至用戶端)，則此資料欄包含 0。如果用戶端在接收結果之前中斷連接，則查詢將標示為已取消 (1)，即使它已在後端成功完成也一樣。 | 
| insert\_pristine  | integer  |  當目前查詢正在執行時，寫入查詢是否能夠執行。1 = 不允許寫入查詢。0 = 允許寫入查詢。此欄位適用於偵錯。 | 
| concurrency\_scaling\_status | integer  | 指出查詢是執行於主要叢集或並行擴展叢集。可能的值如下：<br />0 - 執行於主要叢集 <br />1 - 執行於並行擴展叢集 <br />大於 1 - 執行於主要叢集  | 

## 範例查詢
<a name="r_STL_QUERY-sample-queries"></a>

下列查詢會列出五個最新查詢。

```
select query, trim(querytxt) as sqlquery
from stl_query
order by query desc limit 5;

query |                                   sqlquery
------+--------------------------------------------------
129 | select query, trim(querytxt) from stl_query order by query;
128 | select node from stv_disk_read_speeds;
127 | select system_status from stv_gui_status
126 | select * from systable_topology order by slice
125 | load global dict registry
(5 rows)
```

下列查詢會針對 2013 年 2 月 15 日執行的查詢，依遞減順序傳回經過時間。

```
select query, datediff(seconds, starttime, endtime),
trim(querytxt) as sqlquery
from stl_query
where starttime >= '2013-02-15 00:00' and endtime < '2013-02-16 00:00'
order by date_diff desc;

 query | date_diff |  sqlquery
-------+-----------+-------------------------------------------
 55    |       119 | padb_fetch_sample: select count(*) from category
121    |         9 | select * from svl_query_summary;
181    |         6 | select * from svl_query_summary where query in(179,178);
172    |         5 | select * from svl_query_summary where query=148;
...
(189 rows)
```

下列查詢顯示查詢的佇列時間和執行時間。`concurrency_scaling_status = 1` 的查詢執行於並行擴展叢集。所有其他查詢皆執行於主要叢集。

```
SELECT w.service_class AS queue
     , q.concurrency_scaling_status
     , COUNT( * ) AS queries
     , SUM( q.aborted )  AS aborted
     , SUM( ROUND( total_queue_time::NUMERIC / 1000000,2 ) ) AS queue_secs
     , SUM( ROUND( total_exec_time::NUMERIC / 1000000,2 ) )  AS exec_secs
FROM stl_query q
     JOIN stl_wlm_query w
          USING (userid,query)
WHERE q.userid > 1
  AND service_class > 5
  AND q.starttime > '2019-03-01 16:38:00'
  AND q.endtime   < '2019-03-01 17:40:00'
GROUP BY 1,2
ORDER BY 1,2;
```