
# 技术原理
#### 核心机制
设置GUC参数resilience_ctrlstmt_detect_timelimit或wlmrule Plan Hint，业务线程会在执行过程中设置对应时间的定时器，定时器到期后将当前业务线程标识为执行慢SQL的线程，对于执行慢SQL的线程将执行以下管控：
- 当执行慢SQL的线程数量超过resilience_ctrlslot_available_maxpercent取值乘以线程池线程数量最大值后，后续执行慢SQL的线程强制cancel。
- 当执行慢SQL的线程IOPS超过resilience_ctrlstmt_control_iopslimit，使对应线程睡眠0\~1秒内的随机值。
 
#### 接口介绍
快慢车道主要使用以下GUC参数，具体描述请参见《参考》中"数据库运行参数说明 \> GUC参数说明 \> 负载管理"章节。
表1GUC参数 
| 参数名                                      | 参数说明                                                            |
|:---|:---|
| resilience_ctrlslot_available_maxpercent | 最多允许慢SQL占用线程池线程数的百分比。                                           |
| resilience_ctrlstmt_detect_timelimit     | 正常SQL语句被标记为慢SQL所需的执行时间，0表示不做慢SQL识别，大于0表示当SQL执行时间超过该时间时被标记为慢SQL。 |
| resilience_ctrlstmt_control_iopslimit    | 正常SQL语句被标记为慢SQL后，慢SQL可使用的最大IOPS上限。                              |
   
快慢车道使用wlmrule Plan Hint，具体描述请参见《SQL调优指南》中"使用Plan Hint进行调优 \> 设置慢SQL管控规则的Hint"章节。
表2Plan Hint 
| Plan Hint                                       | Plan Hint说明                                             |
|:---|:---|
| wlmrule("time_limit,max_execute_time,max_iops") | 针对想要进行执行时间/资源管控的SQL语句，设置其被标记为慢SQL的执行时间，最大执行时间，最大IOPS上限。 |
   
