云服务器内容精选

  • 使用限制 设置事务拆分需要满足数据库代理内核版本为2.3.9.5及以上。 在默认的REPEATABLE_READ隔离级别下,云数据库GaussDB(for MySQL)不支持事务拆分功能。 仅READ-UNCOMMITTED和READ-COMMITTED级别允许事务拆分,请修改事务隔离级别。 仅读写模式支持事务拆分功能。 开启事务拆分后,使用BEGIN提交事务后的读请求暂时不支持拆分到读库。 开启事务拆分后,使用SET AUTOCOMMIT = 0开启的事务,COMMIT提交后的读请求不支持拆分到读库。
  • 模式描述 更改Multi-Statements模式立即生效,无需重启数据库代理。但如果模式切换前存在由于执行了Multi-Statements导致读写分离失效的连接,不会因为切换模式而恢复读写分离,需要断开重连才能恢复。 Strict模式(默认) Multi-Statements会发往主节点,当前连接的后续请求读写分离失效,会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 该模式不会解析Multi-Statements,性能好,适合短连接、无连接复用场景。 Loose模式 Multi-Statements会发往主节点,当前连接的后续请求依旧可以读写分离。 该模式不会解析Multi-Statements,性能好,适合Multi-Statements内仅含DML SQL,不含设置session变量、创建临时表、创建存储过程、执行未提交事务等操作的场景。 Parse模式 该模式下,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解析失败。
  • 功能限制 开启读写分离功能后,删除RDS for MySQL主实例,会同步删除只读实例,并关闭读写分离功能。 读写分离不支持RDS for MySQL8.0的caching_sha2_password身份认证插件。 开启读写分离功能后,主实例和只读实例均不允许修改数据库端口和内网地址。 读写分离功能不支持压缩协议。 读写分离不支持事务隔离级别READ-UNCOMMITTED。 如果执行了Multi-Statements,默认当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离,目前支持多种Multi-Statements处理模式,详情参考设置Multi-Statements处理模式。 如果执行了临时表的相关操作,默认当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能复读写分离。 如果执行了Handler语句,默认后续请求全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 使用读写分离的连接地址时,事务请求都会路由到主实例(可以使用事务拆分功能对事务中写之前的读请求进行拆分),不保证非事务读的一致性,业务上有读一致性需求可以封装到事务中。 使用读写分离的连接地址时,LAST_INSERT_ID()函数仅支持在事务中使用。 使用用户自定义变量时,包含用户自定义变量的语句会路由到主节点。 数据库代理服务不支持读写表中单列超过16MB的数据。 当使用数据库代理时,多语句拼接的SQL大小不超过100MB,避免数据库代理解析SQL消耗过多的资源。 当使用.net客户端连接数据库代理时,需要客户端的MySQL.Data驱动版本不低于8.0.19,低版本MySQL.Data与数据库代理存在兼容性风险。 当使用事务拆分功能时,需要将代理升级至最新版。 数据库代理不支持SQL_MODE参数PAD_CHAR_TO_FULL_LENGTH。
  • 语法限制 读写分离请求路由原理:客户的前端请求会根据当前数据库节点权重的配置,随机路由到后端任一数据库节点。 因此,一些SQL语句多次执行的结果可能存在差异,部分语句列举如下: 使用读写分离地址连接proxy和直连后端数据库执行show processlist结果返回有差异,因为proxy的show processlist是逻辑的,仅仅将通过proxy节点下发的业务展示出来,所以和直连后端数据库有差异。 当某一个代理节点处于异常状态时,通过读写分离地址连接proxy执行show processlist或者kill时,有可能会出现命令执行时间稍微变长或卡顿的情况,此时无需关注,业务不会受到影响。 当数据库代理节点缩容后,通过代理执行show processlist命令时,可能会将被缩容的节点上的业务展示出来。 通过数据库代理进行kill时,可能会出现超时等报错信息,此时可以通过再次执行show processlist查看业务是否真正被kill成功。 通过数据库代理的请求只能通过代理进行kill操作。 使用读写分离的连接地址时,不支持使用show errors和show warnings命令。 使用读写分离的连接地址时,如果存储过程(procedure)和函数(function)中依赖了用户变量,即@variable,则运行结果可能不正确。
  • 数据库代理内核版本说明 本章节介绍云数据库 RDS for MySQL的数据库代理内核版本更新说明。 版本 说明 2.23.09.002 修复问题 优化数据库宕机后Proxy重试业务SQL的逻辑。 2.23.09.001 修复问题 修复Prepare协议下,select for update执行偶现报错问题。 2.23.09.000 新功能 支持Change User协议。 支持多Hint解析。 支持show processlist和kill命令。 2.23.06.001 修复问题 解决会话连接池开启导致后端数据库连接数升高问题。 2.23.06.000 新功能 支持通过Proxy内核拉取Binlog。 修复问题 进一步优化prepare stmt协议表现。 2.23.02.007 修复问题 优化prepare stmt协议表现。 解决/* FORCE_SLAVE*/ Hint语句流量分配不符合预期问题。 解决事务拆分开启时,set autocommit同步到只读问题。 2.23.02.000 修复问题 优化数据库代理的性能。 2.22.11.000 新功能 支持设置Multi-Statements处理模式。 修复问题 部分特殊场景SQL执行报错信息优化。 2.22.07.000 新功能 支持会话级连接池。 支持动态智能负载。 修复问题 优化数据库代理session级事务隔离级别设置逻辑,默认与数据库同步。 2.7.5.0 支持ALT。 2.7.4.0 新功能 支持16MB以上查询数据。 修复问题 优化只读模式Proxy的CES采集指标。 2.3.9.8 新功能 支持Prepare协议Batch操作。 2.3.9.7 新功能 数据库代理支持MySQL 8.0。 支持事务拆分。 支持只读模式 修复问题 优化prepare语句执行逻辑,提升性能。 2.3.9.0 新功能 新增数据库代理性能监控指标(每秒平均创建前端连接数、每秒平均事务中的查询数、每秒平均多语句执行数),详情见表2。 修复问题 优化数据库代理的性能。 优化数据库代理在短连接场景下出现的业务拥塞问题。 2.3.8.0 新功能 RDS for MySQL连接通过数据库代理也能获取到真实客户端IP。 修复问题 修复数据库代理监控数据不准确的问题。 优化RDS for MySQL主备倒换数据库代理中断的时长。 2.3.6.0 优化数据库代理的稳定性,修复业务量过大时出现的连接失败问题。 优化数据库代理MySQL协议的兼容性。 2.3.1.0 支持客户端到数据库代理的连接保持功能。 支持数据库代理性能指标监控,详情见表2。 父主题: 数据库代理(读写分离)
  • 使用限制 仅RDS for MySQL 8.0和5.7版本支持连接池功能。 不兼容ALT特性,开启ALT会导致连接池失效。 当执行以下行为时,会锁定连接,直至连接结束,即该连接不会再被放到连接池中供其他用户连接使用。 执行PREPARE语句 创建临时表 修改用户变量 大数据插入查询(例如16 MB以上) 使用lock table 多语句(带分号的拼接SQL,例如SELECT 1;SELECT 2) 存储过程调用
  • 功能限制 至少创建1个只读节点才能开启读写分离功能。 开启读写分离功能后,实例不允许修改数据库端口、读写内网地址和安全组。 读写分离功能不支持SSL加密。 读写分离功能不支持压缩协议。 如果执行了Multi-Statements,当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 使用读写分离的连接地址时,事务请求都会路由到实例的主节点(可以使用事务拆分功能对事务中写之前的读请求进行拆分),不保证非事务读的一致性,业务上有读一致性需求可以封装到事务中。 proxy不支持事务隔离级别READ-UNCOMMITTED。 一个GaussDB(for MySQL)实例最多支持创建4个代理实例。 数据库代理服务不支持读写表中单列超过16MB的数据。 当使用数据库代理时,多语句拼接的SQL大小不超过100MB,避免数据库代理解析SQL消耗过多的资源。
  • 操作场景 开通读写分离时,需选择加入代理的节点(包括主节点和只读节点)。 各业务可以通过代理实例的读写分离地址连接实例。且读请求会分别发往连接的代理实例。您也可以对代理实例添加或移除节点。 同一个节点(包括主节点和只读节点)可以同时被多个代理实例选择,并设置不同的读权重配比。权重分配具体操作请参见设置读写分离权重。 读写模式的代理实例,可代理读、写请求,其中,写请求全部路由给主节点,读请求根据读权重配比分发到各个节点。 只读模式的代理实例,只能代理读请求,读请求根据读权重配比分发到各个只读节点。不会分发到主节点,即使主节点被选为服务节点且已配置读权重,也不会生效。 图1 多个代理实例