
# 设置Multi-Statements处理模式
#### 操作场景
当通过数据库代理执行[Multi-Statements](https://dev.mysql.com/doc/c-api/8.0/en/c-api-multiple-queries.html)时，可以根据业务场景选择不同的处理模式。
#### 约束限制
- 多语句处理参数需要proxy内核版本为2.22.11.000及以上。在代理实例详情页可以查看proxy内核版本。
- 代理实例的状态必须均为"正常"。
 
#### 模式描述
- Strict模式（默认）：该模式下，Multi-Statements会发往主节点，当前连接的后续请求读写分离失效，会全部路由到主节点，需断开当前连接并重新连接才能恢复读写分离。该模式不会解析Multi-Statements，性能好，适合短连接、无连接复用场景。
- Loose模式：该模式下，Multi-Statements会发往主节点，当前连接的后续请求依旧可以读写分离。该模式不会解析Multi-Statements，性能好，适合Multi-Statements内仅含DML SQL，不含设置session变量、创建临时表、创建存储过程、执行未提交事务等操作的场景。
- Parse模式：该模式下，只读Multi-Statements会根据权重路由，读写混合Multi-Statements会发往主节点，同时数据库代理会解析Multi-Statements，根据Multi-Statements内包含的SQL情况（具体见[Parse模式场景说明]），决定当前连接的后续请求是否恢复读写分离，由于该模式会解析Multi-Statements，对代理性能有一定影响，影响程度与Multi-Statements的长度和复杂性相关，建议Multi-Statements小于100MB，避免数据库代理解析SQL消耗过多的资源，引起性能明显下降。
 
 #### Parse模式场景说明
当Multi-Statements包含如下场景时，后续请求会全部路由到主节点，需断开当前连接并重新连接才能恢复读写分离。
- Multi-Statements内创建临时表。
- Multi-Statements内创建存储过程。
- Multi-Statements内含未提交的事务（如执行了**begin** ，但未**commit** 或**rollback**）。
- Multi-Statements过于复杂或含特殊语法等导致Multi-Statements解析失败。
更改Multi-Statements模式立即生效，无需重启数据库代理。但如果模式切换前存在因为执行了Multi-Statements导致读写分离失效的连接，不会因为切换模式而恢复读写分离，需要断开重连才能恢复。
#### 操作步骤
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002593882307.png)，选择区域。
3. 在实例列表中，单击只读实例所在的主实例名称，进入主实例的"概览"页面。
4. 在左侧导航栏中，单击"数据库代理"，选择"数据库代理"页面。
5. 在"数据库代理"页面，在"代理实例信息"模块，单击"参数修改"。
6. 修改参数的值，单击"确定"。 
   multiStatementType：多语句处理方式，proxy为只读模式则不支持。
   - Strict(默认)：所有多语句都发往主，并绑定连接。
   
   - Loose：多语句发往主，但不绑定连接。
   
   - Parse：全部解析拆分。
   
   
   
   
 
