

# 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 文档中的 [Functions and operators](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` – 与该分叉中的表关联的 toast 表的大小（以字节为单位）。
+ `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
```