

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

# Aurora PostgreSQL Limitless Database 函數
<a name="limitless-monitoring-functions"></a>

下表顯示 Aurora PostgreSQL Limitless Database 的新函數。

**注意**  
此資料表中列出的函數位於 `rds_aurora` 結構描述中。使用 Limitless Database 函數時，請務必包含完整的物件名稱：`rds_aurora``object_name`。


| Aurora PostgreSQL Limitless Database 函數 | 對應的 Aurora PostgreSQL 函數 | 
| --- | --- | 
| [limitless\$1backend\$1dsid](#limitless_backend_dsid) | pg\$1backend\$1pid | 
| [limitless\$1cancel\$1session](#limitless_cancel_session) | pg\$1cancel\$1backend | 
| [limitless\$1stat\$1clear\$1snapshot](#limitless_stat_clear_snapshot) | pg\$1stat\$1clear\$1snapshot | 
| [limitless\$1stat\$1database\$1size](#limitless_stat_database_size) | pg\$1database\$1size | 
| [limitless\$1stat\$1get\$1snapshot\$1timestamp](#limitless_stat_get_snapshot_timestamp) | pg\$1stat\$1get\$1snapshot\$1timestamp | 
| [limitless\$1stat\$1prepared\$1xacts](#limitless_stat_prepared_xacts) | pg\$1prepared\$1xacts | 
| [limitless\$1stat\$1relation\$1sizes](#limitless_stat_relation_sizes) | pg\$1indexes\$1size、pg\$1relation\$1size、pg\$1table\$1size、pg\$1total\$1relation\$1size | 
| [limitless\$1stat\$1reset](#limitless_stat_reset) | pg\$1stat\$1reset | 
| [limitless\$1stat\$1statements\$1reset](#limitless_stat_statements_reset) | pg\$1stat\$1statements\$1reset | 
| [limitless\$1stat\$1system\$1waits](#limitless_stat_system_waits) | aurora\$1stat\$1system\$1waits | 
| [limitless\$1terminate\$1session](#limitless_terminate_session) | pg\$1terminate\$1backend | 
| [limitless\$1wait\$1report](#limitless_wait_report) | aurora\$1wait\$1report | 

下列範例提供 Aurora PostgreSQL Limitless Database 函數的詳細資訊。如需 PostgreSQL 函數的詳細資訊，請參閱 PostgreSQL 文件中的[函數和運算子](https://www.postgresql.org/docs/15/functions.html)。

**limitless\$1backend\$1dsid**  
`limitless_backend_dsid` 函數會傳回目前工作階段的分散式工作階段 ID。分散式工作階段會在資料庫碎片群組中的路由器執行，以及涉及資料庫碎片群組中一或多個碎片的後端程序。  
下列範例示範如何使用 `limitless_backend_dsid` 函數。  

```
SELECT rds_aurora.limitless_backend_dsid();

limitless_backend_dsid
------------------------
8CACD7B04D0FC2A5
(1 row)
```

**limitless\$1cancel\$1session**  
`limitless_cancel_session` 函數的運作方式類似於 `pg_cancel_backend`，但會嘗試透過傳送 `SIGINT` (中斷訊號)，來取消與提供的分散式工作階段 ID 相關的所有後端程序。  
輸入參數如下：  
+ `distributed_session_id` (文字)：要取消的分散式工作階段 ID。
輸出參數如下：  
+ `subcluster_id` (文字)：此程序所屬的子叢集 ID。
+ `pid` (文字)：後端程序 ID。
+ `success` (布林值)：取消是否成功。
下列範例示範如何使用 `limitless_cancel_session` 函數。  

```
SELECT * FROM rds_aurora.limitless_cancel_session('940CD5C81E3C796B');

 subcluster_id |  pid  | success
---------------+-------+---------
             1 | 26920 | t
(1 row)
```

**limitless\$1stat\$1clear\$1snapshot**  
`limitless_stat_clear_snapshot` 函數會捨棄所有節點上的目前統計資料快照或快取資訊。  
下列範例示範如何使用 `limitless_stat_clear_snapshot` 函數。  

```
SELECT rds_aurora.limitless_stat_clear_snapshot();
```

**limitless\$1stat\$1database\$1size**  
`limitless_stat_database_size` 函數會傳回資料庫碎片群組中資料庫的大小。  
輸入參數如下：  
+ `dbname` (名稱)：要取得其大小的資料庫。
輸出參數如下：  
+ `subcluster_id` (文字)：此程序所屬的子叢集 ID。
+ `subcluster_type` (文字)：此程序所屬的子叢集類型：`router` 或 `shard`。
+ `db_size`：此子叢集中的資料庫大小 (以位元組為單位)。
下列範例示範如何使用 `limitless_stat_database_size` 函數。  

```
SELECT * FROM rds_aurora.limitless_stat_database_size('postgres_limitless');

 subcluster_id | subcluster_type | db_size
---------------+-----------------+----------
             1 | router          |  8895919
             2 | router          |  8904111
             3 | shard           | 21929391
             4 | shard           | 21913007
             5 | shard           | 21831087
(5 rows)
```

**limitless\$1stat\$1get\$1snapshot\$1timestamp**  
`limitless_stat_get_snapshot_timestamp` 函數會傳回目前統計資料快照的時間戳記，或如果未拍攝統計資料快照則傳回 `NULL`。如果 `stats_fetch_consistency` 設定為 `snapshot`，則會在交易中第一次存取累積統計資料時拍攝快照。傳回來自所有節點的快照時間戳記合併檢視。`subcluster_id` 和 `subcluster_type` 欄會顯示資料來自哪個節點。  
下列範例示範如何使用 `limitless_stat_get_snapshot_timestamp` 函數。  

```
SELECT * FROM rds_aurora.limitless_stat_get_snapshot_timestamp();

 subcluster_id | subcluster_type | snapshot_timestamp
---------------+-----------------+--------------------
             1 | router          | 
             2 | router          | 
             3 | shard           | 
             4 | shard           | 
             5 | shard           | 
(5 rows)
```

**limitless\$1stat\$1prepared\$1xacts**  
`limitless_stat_prepared_xacts` 函數會傳回目前準備進行兩階段遞交之所有節點的交易相關資訊。如需詳細資訊，請參閱 PostgreSQL 文件中的 [pg\$1prepared\$1xacts](https://www.postgresql.org/docs/current/view-pg-prepared-xacts.html)。  
下列範例示範如何使用 `limitless_stat_prepared_xacts` 函數。  

```
postgres_limitless=> SELECT * FROM rds_aurora.limitless_stat_prepared_xacts;

 subcluster_id | subcluster_type | transaction_id |             gid              |           prepared            |  owner_id  |    database_id
---------------+-----------------+----------------+------------------------------+-------------------------------+------------+--------------------
 8             | shard           |        5815978 | 7_4599899_postgres_limitless | 2024-09-03 15:51:17.659603+00 | auroraperf | postgres_limitless
 12            | shard           |        4599138 | 7_4599899_postgres_limitless | 2024-09-03 15:51:17.659637+00 | auroraperf | postgres_limitless
(2 rows)
```

**limitless\$1stat\$1relation\$1sizes**  
`limitless_stat_relation_sizes` 函數會傳回資料庫碎片群組中資料表的不同大小。  
輸入參數如下：  
+ `relnspname` (名稱)：內含資料表的結構描述名稱。
+ `relname` (名稱)：資料表的名稱。
輸出參數如下：  
+ `subcluster_id` (文字)：此程序所屬的子叢集 ID。
+ `subcluster_type` (文字)：此程序所屬的子叢集類型：`router` 或 `shard`。
+ `main_size`：此節點中主要資料分支的大小 (以位元組為單位)。
+ `fsm_size`：此節點中資料表可用空間映射大小 (以位元組為單位)。
+ `vm_size`：此節點中資料表可見度映射大小 (以位元組為單位)。
+ `init_size`：此節點中資料表初始化的大小 (以位元組為單位)。
+ `toast_size`：此分支中與資料表相關聯的快顯資料表大小 (以位元組為單位)。
+ `index_size`：此節點中資料表所有索引的大小 (以位元組為單位)。
+ `total_size`：此節點中資料表所有區段的大小 (以位元組為單位)。
下列範例示範如何使用 `limitless_stat_relation_sizes` 函數 (部分欄已省略)。  

```
SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public','customers');

 subcluster_id | subcluster_type | main_size | fsm_size | vm_size | toast_size | table_size | total_size
---------------+-----------------+-----------+----------+---------+------------+------------+------------
             1 | router          |         0 |        0 |       0 |          0 |          0 |          0
             2 | router          |         0 |        0 |       0 |          0 |          0 |          0
             3 | shard           |   4169728 |  4177920 | 1392640 |    1392640 |   11132928 |   11132928
             4 | shard           |   4169728 |  4177920 | 1392640 |    1392640 |   11132928 |   11132928
             5 | shard           |   3981312 |  4227072 | 1409024 |    1409024 |   11026432 |   11026432
(5 rows)
```

**limitless\$1stat\$1reset**  
`limitless_stat_reset` 函數會將目前資料庫的所有統計資料計數器重設為零 (0)。如果已啟用 `track_functions`，`limitless_stat_database` 中的 `stats_reset` 欄會顯示上次重設資料庫統計資料的時間。根據預設，`limitless_stat_reset` 的執行只能由超級使用者進行。可以使用 `EXECUTE` 權限向其他使用者授予許可。  
下列範例示範如何使用 `limitless_stat_reset` 函數。  

```
SELECT tup_inserted, tup_deleted FROM pg_stat_database
WHERE datname = 'postgres_limitless';

 tup_inserted | tup_deleted
--------------+-------------
          896 |           0
(1 row)

SELECT rds_aurora.limitless_stat_reset();

limitless_stat_reset
---------------------
(1 row)

SELECT tup_inserted, tup_deleted FROM pg_stat_database
WHERE datname = 'postgres_limitless';

tup_inserted | tup_deleted
-------------+-------------
           0 |           0
(1 row)
```

**limitless\$1stat\$1statements\$1reset**  
`limitless_stat_statements_reset` 函數會捨棄 `limitless_stat_statements` 目前為止收集的統計資料 (對應於指定的 `username`、`dbname`、`distributed_query_id`和 `queryid` 參數)。如果未指定任何參數，則會針對每個參數使用預設值 `""` 或 `0` (無效)，以及重設與其他參數相符的統計資料。如果未指定參數，或所有指定的參數都是 `""` 或 `0` (無效)，則函數會捨棄所有統計資料。如果 `limitless_stat_statements` 檢視中的所有統計資料已遭捨棄，則函數也會重設 `limitless_stat_statements_info` 檢視中的統計資料。  
輸入參數如下：  
+ `username` (名稱)：查詢陳述式的使用者。
+ `dbname` (名稱)：執行查詢的資料庫。
+ `distributed_query_id` (bigint)：協調器節點中父查詢的查詢 ID。如果這是父查詢，則此欄為 `NULL`。協調器節點會將分散式查詢 ID 向下推送至參與者節點。因此，對於參與者節點，分散式查詢 ID 和查詢 ID 的值會有所不同。
+ `queryid` (bigint)：陳述式的查詢 ID。
下列範例示範如何使用 `limitless_stat_statements_reset` 函數來重設 `limitless_stat_statements` 收集的所有統計資料。  

```
SELECT rds_aurora.limitless_stat_statements_reset();
```

**limitless\$1stat\$1system\$1waits**  
`limitless_stat_system_waits` 函數會從 `aurora_stat_system_waits` 傳回等待事件資料的合併檢視，該檢視會報告來自所有節點中執行個體中全系統等待活動。`subcluster_id` 和 `subcluster_type` 欄會顯示資料來自哪個節點。  
下列範例示範如何使用 `limitless_stat_system_waits` 函數。  

```
postgres_limitless=> SELECT *
FROM rds_aurora.limitless_stat_system_waits() lssw, pg_catalog.aurora_stat_wait_event() aswe
WHERE lssw.event_id=aswe.event_id and aswe.event_name='LimitlessTaskScheduler';

 subcluster_id | subcluster_type | type_id | event_id  | waits  |  wait_time   |        event_name
---------------+-----------------+---------+-----------+--------+--------------+------------------------
             1 | router          |      12 | 201326607 | 677068 | 616942216307 | LimitlessTaskScheduler
             2 | router          |      12 | 201326607 | 678586 | 616939897111 | LimitlessTaskScheduler
             3 | shard           |      12 | 201326607 | 756640 | 616965545172 | LimitlessTaskScheduler
             4 | shard           |      12 | 201326607 | 755184 | 616958057620 | LimitlessTaskScheduler
             5 | shard           |      12 | 201326607 | 757522 | 616963183539 | LimitlessTaskScheduler
(5 rows)
```

**limitless\$1terminate\$1session**  
`limitless_terminate_session` 函數的運作方式類似於 `pg_terminate_backend`，但會嘗試透過傳送 `SIGTERM` (結束訊號)，來結束與提供的分散式工作階段 ID 相關的所有後端程序。  
輸入參數如下：  
+ `distributed_session_id` (文字)：要結束的分散式工作階段 ID。
輸出參數如下：  
+ `subcluster_id` (文字)：此程序所屬的子叢集 ID。
+ `pid` (文字)：後端程序 ID。
+ `success` (布林值)：程序是否已成功結束。
下列範例示範如何使用 `limitless_terminate_session` 函數。  

```
SELECT * FROM rds_aurora.limitless_terminate_session('940CD5C81E3C796B');

 subcluster_id |  pid  | success
---------------+-------+---------
             1 | 26920 | t 
(1 row)
```

**limitless\$1wait\$1report**  
`limitless_wait_report` 函數會從所有節點傳回一段時間內的等待事件活動。`subcluster_id` 和 `subcluster_type` 欄會顯示資料來自哪個節點。  
輸出參數如下：  
+ `subcluster_id` (文字)：此程序所屬的子叢集 ID。
+ `subcluster_type` (文字)：此程序所屬的子叢集類型：`router` 或 `shard`。
其餘欄與 `aurora_wait_report` 中的欄相同。  
下列範例示範如何使用 `limitless_wait_report` 函數。  

```
postgres_limitless=> select * from rds_aurora.limitless_wait_report();

 subcluster_id | subcluster_type | type_name | event_name | waits | wait_time | ms_per_wait | waits_per_xact | ms_per_xact
---------------+-----------------+-----------+------------+-------+-----------+-------------+--------------- +-------------
             1 | router          | Client    | ClientRead |    57 | 741550.14 |   13009.652 |           0.19 |    2505.237
             5 | shard           | Client    | ClientRead |    54 | 738897.68 |   13683.290 |           0.18 |    2496.276
             4 | shard           | Client    | ClientRead |    54 | 738859.53 |   13682.584 |           0.18 |    2496.147
             2 | router          | Client    | ClientRead |    53 | 719223.64 |   13570.257 |           0.18 |    2429.810
             3 | shard           | Client    | ClientRead |    54 | 461720.40 |    8550.378 |           0.18 |    1559.86
```