本文为您介绍 TDSQL Boundless 只读分析实例的使用限制和兼容性说明。
说明:
除本文中提到的支持场景,只读分析实例均不支持其他特殊场景。
架构与可用性特点
只读分析实例在单节点形态下不具备高可用能力,节点故障会导致只读分析实例不可用。如需保障只读分析实例持续提供服务,请购买多节点形态。
语法限制
只读分析实例仅支持只读查询语句,不支持任何数据变更操作(包括 DDL 和 DML)。具体限制如下:
仅支持
SELECT 查询语句。SELECT 语句中存在少量关键字与语法不支持,详情请参见 SELECT 语句说明。支持 CTE 语法和窗口函数。使用 CTE 语法和窗口函数存在部分限制,详情请参见 CTE 语法使用说明 和 窗口函数使用说明。
不支持全文检索语法。
不支持自定义函数和存储过程。
当 TDSQL Boundless 开启只读分析实例后,在读写实例中执行某些数据变更操作会导致只读分析实例的数据加载出现异常,详情请参见 数据加载限制。
表数量限制
只读分析实例中建议的最大表数量为20000个。
只读分析实例对分区表的支持范围和场景有限,详情请参见 数据加载限制。
只读分析实例对数据类型的支持有限,当存在不支持的数据类型时,表无法加载至只读分析实例,详情请参见 数据类型。
列值大小限制
只读分析实例中普通列的值大小限制默认为16MB。如果存在列值超过16MB的表,将其加载到只读分析实例时会报错并暂停。
SQL Mode
只读分析实例支持通过
SET [ SESSION | GLOBAL ] sql_mode='modes' 语句设置全局或会话级别的 SQL Mode,并支持通过 SELECT @@sql_mode 查询当前 SQL Mode。只读分析实例支持的常见 MySQL 系统 SQL Mode 如下表所示,未列出的 SQL Mode 均不支持。需要注意的是,部分 SQL Mode 在只读分析实例中不适用,例如
NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION 等。名称 | 含义 |
PIPES_AS_CONCAT | 将 || 视为字符串连接操作符 (+)(同 CONCAT()),而不视为 OR。 |
ANSI_QUOTES | 将 " 视为识别符。启用 ANSI_QUOTES 后,仅单引号内的内容被视为字符串字面量,双引号被解释为识别符,因此不能使用双引号引用字符串。 |
IGNORE_SPACE | 启用该模式后,系统忽略空格。例如,user 和 user 视为相同。 |
ONLY_FULL_GROUP_BY | 如果未被聚合函数处理或未被 GROUP BY 的列出现在 SELECT、HAVING、ORDER BY 中,则该 SQL 不合法。 |
NO_UNSIGNED_SUBTRACTION | 在减运算中,如果某个操作数没有符号,不将结果标记为 UNSIGNED。 |
NO_BACKSLASH_ESCAPES | 启用该模式后,反斜杠符号 \\ 仅代表它自己。 |
STRICT_TRANS_TABLES | 对事务存储引擎启用严格模式,插入非法值后回滚整条语句。 |
STRICT_ALL_TABLES | 对事务型表,写入非法值后回滚整个事务语句。 |
NO_ZERO_IN_DATE | 严格模式下,不接受月或日部分为0的日期。如果使用 IGNORE 选项,则将类似的日期插入为 0000-00-00。在非严格模式下,可以接受该日期,但会生成警告。 |
NO_ZERO_DATE | 严格模式下,不将 0000-00-00 作为合法日期。仍可使用 IGNORE 选项插入0日期。在非严格模式下,可以接受该日期,但会生成警告。 |
ALLOW_INVALID_DATES | 不检查全部日期的合法性,仅检查月份值是否在1至12之间,以及日期值是否在1至31之间。仅适用于 DATE 和 DATETIME 列,TIMESTAMP 列需检查全部合法性。 |
ERROR_FOR_DIVISION_BY_ZERO | 启用该模式后,在 INSERT 或 UPDATE 过程中,被除数为0时系统产生错误。未启用该模式时,被除数为0 时系统产生警告,并用 NULL 代替。 |
REAL_AS_FLOAT | 将 REAL 视为 FLOAT 的同义词,而非 DOUBLE 的同义词。 |
NO_DIR_IN_CREATE | 创建表时,忽略所有 INDEX DIRECTORY 和 DATA DIRECTORY 指令。该选项仅对从复制服务器有用。 |
NO_AUTO_CREATE_USER | 防止 GRANT 自动创建新用户(指定密码除外)。在只读分析实例中没有实际作用。 |
NO_ENGINE_SUBSTITUTION | 当所需的存储引擎被禁用或未编译时,防止自动替换存储引擎。在只读分析实例中没有实际作用。 |
字符集和排序规则
字符集(character set)是符号与编码的集合。只读分析实例中默认字符集为 utf8mb4。
排序规则(collation)是字符集中比较字符以及字符排序顺序的规则。例如,二进制排序规则下比较 A 和 a 的结果不一致。
只读分析实例支持的字符集和排序规则如下表所示。
字符集 | 描述 | 支持的排序规则 | 最大字节 |
utf8 | UTF-8 Unicode | utf8_bin、utf8_general_ci、utf8_unicode_ci | 3 |
utf8mb4 | UTF-8 Unicode | utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_0900_ai_ci、utf8mb4_0900_bin | 4 |
注意:
当读写实例中的对象采用其他字符集时,数据加载至只读分析实例不受影响,但部分特殊字符在只读分析实例中查询时可能存在异常,同时也会因排序规则差异导致排序结果不一致。
其他行为说明
只读分析实例执行
SELECT ... GROUP BY expr 的返回结果与 MySQL 8.0 保持一致,默认不排序。