
# 应用无损透明（ALT）简介
#### 操作场景
数据库系统在进行只读升主、小版本升级和规格变更时，可能会中断用户会话，此时用户的应用程序需要感知到会话变化并提供复杂的应对措施来解决故障，比如判断数据库连接或事务是否中断，进行事务补偿以及重建数据库会话上下文等。
针对上述问题，TaurusDB提供了应用无损透明（Application Lossless and Transparent，ALT），在数据库系统切换时，可以避免数据库连接和事务中断，无需用户对事务进行补偿、无需恢复和重建会话上下文，从而实现无损的应用连续性，保证业务不中断。
#### 架构图
图1架构图   
![](https://support.huaweicloud.com/usermanual-taurusdb/figure/zh-cn_image_0000001973498440.png "点击放大")
应用无损透明（ALT）功能以用户连接为粒度，用户可以连接到数据库代理，在进行只读升主、规格变更或者小版本升级时，系统会复制用户的后台会话，在达到安全的事务边界后，确保后台会话操作上下文被完整克隆至目的节点，从而保证业务不会中断。
应用无损透明（ALT）功能需要每个连接上均不存在运行中的事务，主备切换时需要等待已经执行的事务结束。等待事务结束的时间称为排干机制超时时间，通过参数"rds_tac_drain_timeout"控制，默认为5s，取值范围为1-60s。
业务压力较大，Prepare语句个数较多或者事务执行时间较长时，建议增加超时时间。不建议调小超时时间，如果在该时间内有连接没有排干事务，则这些连接不具有ALT的能力。
#### 基本概念
**安全的事务边界**：指当前会话上的事务提交完成，开启下一个事务之前的状态。
例如：
- 开启autocommit的事务块每个语句执行完成时，可以达到事务边界。
  ```
  start transaction;
  DML; 
  commit;
  ```
  
- 关闭autocommit时，当commit执行完成，达到事务边界。
- 单独DML、DDL语句，执行完成，可以达到事务边界。
- 使用表锁、备份锁、用户自定锁时，释放锁以后，达到事务边界。
 
 #### 注意事项
表1注意事项 
| **分类** | **注意事项**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|
| 版本约束   | - TaurusDB内核版本需要大于等于2.0.54.240600。  - 数据库代理内核版本需要大于等于2.24.06.000。   内核版本的查询方法请参见[如何查看云数据库 TaurusDB实例的版本号](https://support.huaweicloud.com/taurusdb_faq/taurusdb_faq_0141.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| 使用约束   | - 实例为一主多读，至少有一个只读节点，已开启数据库代理且必须通过数据库代理地址连接实例。  - 只读数据库代理模式下不支持应用无损透明（ALT）功能。  - 单机类型的TaurusDB实例不支持应用无损透明（ALT）功能。  - 应用无损透明（ALT）切换过程中，会短时间在目标新主机上创建和原主节点相同数量的备用连接，请确认数据库实例的总连接数上限为当前连接数的2倍或以上，修改最大连接数需要评估实例规格和内存使用情况，请参考[TaurusDB数据库实例支持的最大数据连接数是多少](https://support.huaweicloud.com/taurusdb_faq/taurusdb_faq_0059.html)。  - 实例级规格变更时如需使用ALT功能，需要保证主节点实例的总连接数上限为当前连接数的2倍或以上，修改最大连接数需要评估实例规格和内存使用情况，请参考[TaurusDB数据库实例支持的最大数据连接数是多少](https://support.huaweicloud.com/taurusdb_faq/taurusdb_faq_0059.html)。 变更结束后会保留部分连接，具体取决于您的连接超时参数（wait_timeout：服务器关闭连接之前等待非交互式连接活动的秒数）配置。   - 应用无损透明（ALT）支持Prepare协议，切换过程中会重建Prepare语句的上下文信息，如果业务有大量的Prepare语句，可能影响切换的成功率。请确认参数max_prepared_stmt_count设置为Prepare语句个数的2倍或以上，修改max_prepared_stmt_count前需要评估实例规格和内存使用情况，请参考[修改TaurusDB实例参数](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_configuration.html)。 执行如下SQL语句查询Prepare语句个数。 ``` show global status like 'prepared_stmt_count'; ```   - 应用无损透明（ALT）切换建议在业务低峰进行，如果业务主节点和只读节点压力过大，可能影响切换的成功率；  - 数据库代理的语法限制和功能限制请参考[TaurusDB数据库代理注意事项](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0033.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 不支持的功能 | - 应用无损透明（ALT）功能不支持一些用户设置的系统变量： - *innodb_ft_user_stopword_table*：只支持值为NULL。  - *transaction_write_set_extraction*：只支持值为OFF。  - profiling：不支持设置为1或者ON。    - 应用无损透明（ALT）功能不支持开启透明数据加密（TDE）。  - 应用无损透明（ALT）功能暂不兼容以下数据库代理能力： - 暂不兼容会话级连接池。  - 暂不兼容全局一致性。  - 暂不兼容单列插入16MB以上的数据。  - 暂不兼容查询结果集大于16MB以上的数据。  - 暂不兼容Prepare Cache。    - 应用无损透明（ALT）功能不支持用户临时表。  - 应用无损透明（ALT）功能不支持部分无法达到安全事务边界的情况： - 不支持长时间不提交的InnoDB事务块。  - 不支持有未释放的表锁、用户锁，备份锁和binlog锁（Lock for backup/binlog）。  - 不支持XA事务。    - 应用无损透明（ALT）功能短时间内连续变更的场景，可能出现失败率高的情况。  - 以下场景不支持转移Prepare语句： - 当Prepare语句中打开游标（Cursor）且未关闭场景，无法转移该Prepare语句。  - 当Prepare语句的变量已经保存了LONG_DATA类型，无法转移该Prepare语句。     |
   
