
# 技术原理
#### 核心机制
GUC参数resilience_memory_reject_percent会设置两个阈值："recover_memory_percent, overload_memory_percent"，具体描述请参见《参考》中"数据库运行参数说明 \> GUC参数说明 \> 资源消耗 \> 内存"章节。
wlm_monitor线程定时检查动态内存使用率是否大于overload_memory_percent %，条件满足时触发过载逃生，阻止后续的会话接入，优先关闭处于idle状态的会话，会话状态相同时按照内存使用量降序关闭会话。当动态内存使用率降至小于recover_memory_percent %后，停止关闭会话并允许连接接入。
动态内存使用率 = dynamic_used_memory/max_dynamic_memory \* 100%，dynamic_used_memory和max_dynamic_memory可以通过查询PV_TOTAL_MEMORY_DETAIL视图获取，具体描述请参见《参考》中"系统表和系统视图 \> 系统视图 \> 其他系统视图 \> PV_TOTAL_MEMORY_DETAIL"章节。
会话状态可以通过查询PG_STAT_ACTIVITY视图获取，具体描述请参见《参考》中"系统表和系统视图 \> 系统视图 \> 其他系统视图 \> PG_STAT_ACTIVITY"章节。
#### 接口介绍
内存抗过载主要使用以下GUC参数，具体描述请参见《参考》中"数据库运行参数说明 \> GUC参数说明 \> 负载管理"章节。
表1GUC参数 
| 参数名                  | 参数说明                           |
|:---|:---|
| use_workload_manager | 设置是否开启资源管理功能，该参数打开是内存抗过载生效的前提。 |
   
内存抗过载主要使用以下GUC参数，具体描述请参见《参考》中"数据库运行参数说明 \> GUC参数说明 \> 资源消耗 \> 内存"章节。
表2GUC参数 
| 参数名                                | 参数说明                                 |
|:---|:---|
| enable_memory_limit                | 设置是否打开内存管理功能，该参数打开是内存抗过载生效的前提。       |
| resilience_memory_reject_percent   | 用于控制内存过载逃生功能的动态内存占用百分比。              |
| resilience_escape_user_permissions | 设置是否开启sysadmin和monadmin权限用户的内存抗过载功能。 |
   
