

# 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를 반환합니다. 분산 세션은 DB 샤드 그룹의 라우터에서 실행되며 DB 샤드 그룹의 샤드 중 하나 이상에서 이루어지는 백엔드 프로세스를 포함합니다.  
다음 예시에서는 `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`(text) - 취소할 분산 세션의 ID입니다.
출력 파라미터는 다음과 같습니다.  
+ `subcluster_id`(text) - 이 프로세스가 속한 하위 클러스터의 ID입니다.
+ `pid`(text) - 백엔드 프로세스 ID입니다.
+ `success`(boolean) - 취소의 성공 여부입니다.
다음 예시에서는 `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` 함수는 DB 샤드 그룹의 데이터베이스 크기를 반환합니다.  
입력 파라미터는 다음과 같습니다.  
+ `dbname`(name) - 크기를 가져올 데이터베이스입니다.
출력 파라미터는 다음과 같습니다.  
+ `subcluster_id`(text) - 이 프로세스가 속한 하위 클러스터의 ID입니다.
+ `subcluster_type`(text) - 이 프로세스가 속한 하위 클러스터 유형으로, `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` 함수는 DB 샤드 그룹에 있는 테이블의 다양한 크기를 반환합니다.  
입력 파라미터는 다음과 같습니다.  
+ `relnspname`(name) - 테이블이 포함된 스키마의 이름입니다.
+ `relname`(name) - 테이블의 이름입니다.
출력 파라미터는 다음과 같습니다.  
+ `subcluster_id`(text) - 이 프로세스가 속한 하위 클러스터의 ID입니다.
+ `subcluster_type`(text) - 이 프로세스가 속한 하위 클러스터 유형으로, `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`(name) - 문을 쿼리한 사용자입니다.
+ `dbname`(name) - 쿼리가 실행된 데이터베이스입니다.
+ `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`(text) - 종료할 분산 세션의 ID입니다.
출력 파라미터는 다음과 같습니다.  
+ `subcluster_id`(text) - 이 프로세스가 속한 하위 클러스터의 ID입니다.
+ `pid`(text) - 백엔드 프로세스 ID입니다.
+ `success`(boolean) - 프로세스가 성공적으로 종료되었는지를 나타냅니다.
다음 예시에서는 `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`(text) - 이 프로세스가 속한 하위 클러스터의 ID입니다.
+ `subcluster_type`(text) - 이 프로세스가 속한 하위 클러스터 유형으로, `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
```