如何选择实例规格?
使用 TDSQL MySQL 版做功能性测试,且对性能没有特别要求:2个分片,每个分片配置为:内存/磁盘:2GB/25GB。
业务发展初期,总数据规模较小但增长快的选型:2个分片,每个分片配置为:内存/磁盘:16GB/200GB。
业务发展稳定,根据业务实际情况选型:4个分片,每个分片配置等于:当前业务峰值 * 增长率 / 4。
更多关于实例规格,请参见 TDSQL MySQL 版实例及分片配置。
TDSQL MySQL 版与传统 MySQL 语法之间的区别有哪些?
TDSQL MySQL 版目前版本不能通过命令行进行用户权限相关的设置,需要登录 控制台 进行操作。
TDSQL MySQL 版目前版本暂不支持自定义函数、视图、触发器、外键等特性。
对 MySQL 的语法兼容详情,请参见 使用限制。
分表键有何作用?
使用分表,在执行操作 select 时,建议带上 shardkey 字段,proxy 根据该字段的 hash 值直接将 SQL 请求路由至对应的数据库实例进行处理;否则就需要发送给集群中所有的数据库实例执行,然后 proxy 根据数据库返回的结果集进行聚合,影响执行效率。
使用分表,在执行操作 insert/replace 时,字段必须包含 shardkey,否则会拒绝执行该 SQL,因为 proxy 不知道将该 SQL 发往哪个后端数据库。
使用分表,在执行操作 delete/update 时,为安全考虑,执行该类 SQL 时,必须带有 where 条件,否则拒绝执行该 SQL 命令。
如何选择分表键?
分表键是在水平拆分过程中用于生成拆分规则的数据表字段,必须在建表时指定好。TDSQL MySQL版 建议分表键尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都围绕这个主体的数据进行,方可使用该主体对应的字段作为拆分键,进行分表(该分表方案名为 Group-Shard)。如下图所示:
按组分表方案可以确保不同分表的某些关联数据和复杂的业务逻辑运算,可以聚合到一个物理分片内。例如,某电商平台订单表和用户表都是基于用户维度(UserID)拆分,平台就很容易通过联合查询(不会存在跨节点 join,或分布式事务)快速计算某个用户近期产生了多少订单。
一些典型选择拆分键的应用场景如下:
面向用户的互联网应用,是围绕用户维度来做各种操作,那么业务逻辑主体就是用户,可使用用户对应的字段作为拆分键。
电商应用或 O2O 应用,是围绕卖家/买家维度来进行各种操作,那么业务逻辑主体就是卖家/买家,可使用卖家/买家对应的字段作为拆分键。但请注意,某些情况下几个超大卖家占到绝大多数交易额,会导致某几个分片的负载和压力明显高于其他分片。
游戏类的应用,是围绕玩家维度来做各种操作,那么业务逻辑主体就是玩家,可使用玩家对应的字段作为拆分键。
物联网方面的应用,则是基于物联信息进行操作,那么业务逻辑主体就是传感器/SIM 卡,可使用传感器、独立设备、SIM 卡的 IMEI 作为对应的字段作为拆分键。
税务/工商类/社保的应用,主要是基于纳税人/法定代表人/居民的信息来开展前台业务,那么业务逻辑主体就是纳税人/法定代表人,可使用纳税人/法定代表人对应的字段作为拆分键。
以此类推,其它类型的应用场景,大多也能找到合适的业务逻辑主体作为拆分键的选择。但需要注意在选择分表键时有一定限制,详情参见 分表键选择限制。
分表键能否更换?
一旦选择好分区字段(shardkey),就不能轻易更改。若需要修改一个表的分区字段,只能新建一个表。
若需要修改一个分表某一行中的 shardkey 值,需要先 insert 再 delete。直接操作 update 不能修改分区字段的值。
如何连接实例?
可以限制用户登录有效期吗?
创建的用户不支持限制登录有效期。
Navicat 无法登录?
如何设置只从从机读取数据?
如何创建备份?
如何设置实例参数?
磁盘空间组成有哪些?
磁盘由以下2部分空间组成:
数据空间:您的数据所占用的空间。
系统文件空间:系统表空间文件、redolog 和 undolog、临时文件等。
说明:
binlog 文件空间为腾讯云免费赠送,不会占用您购买的磁盘空间容量。
支持灾备/只读实例吗?
是否支持缩减分片数量?
暂不支持缩减分片数量。
高版本能否降级为低版本?
暂不支持高版本无法降级为低版本。
性能检测主要功能有哪些?
是否支持重启实例?
如何设置读写分离?
TDSQL MySQL 版支持下列几种模式的读写分离:
由 只读账号 发送的请求会根据配置的属性发给备机。
通过增加 slave 注释标记,将指定的 SQL 发往备机,即在 SQL 中添加
/*slave*/
这样的标记,该 SQL 会发送给备机。说明:
支持
/*slave:slaveonly*/
、 /*slave:20*/
、 /*slave:slaveonly,20*/
这几种形式,数值表示 slave 应该满足的延迟,slaveonly 表示在没有符合条件的 slave 时,不会将查询发送给主节点。如何导入导出数据?
三权分立是什么意思?
三权分立指将传统数据库系统 DBA 的角色分解为安全管理员、审计管理员、数据管理员三个相互独立的角色,三个角色之间相互制约,消除系统中的超级权限,从系统角色设计上解决了数据安全问题。
支持哪些格式的两级分区?
支持的数据类型有哪些?
最大建表数是多少?
TDSQL MySQL 版默认支持最大建表数量为5000。
如何添加过滤条件查询数据?
使用 -c 模式连接数据库。
执行第一个命令,可以看到各个 set。/*sets:allsets*/select count(1) from employees_int;
执行第二个命令,看到某个 set 上的数据。
/*sets:set_1605865449_1*/ select * from employees_int;
支持广播表和单表的 join 操作吗?
TDSQL MySQL 版广播表和单表的 join 操作如下:
支持单表(普通表)与单表(普通表)join,相当于单机 join,性能无损失。
支持广播表与分表 join,相当于单机 join,性能无损失。
支持广播表与广播表 join,相当于单机 join,性能无损失。
支持单表(普通表)与分表进行 join 操作。
详情可参见 JOIN 和子查询。
数据是均匀分布的吗?
TDSQL MySQL 版的数据是均匀分布的,通过 HASH 算法保证数据相对均匀地分散在不同的物理设备中。
您也可以将同年度的数据放到一个分片中,需要您不指定 shardkey,创建的表属于单表,默认落在第一个分片上。单表的创建方式您可以参考 建单表 进行操作。
详情可参见 两级分区。
为什么 select last_insert_id() 无法获取自增 ID?
GTID 能否关闭?
TDSQL MySQL 版 GTID 不支持关闭。
MySQL 是基于 GTID 做的主从复制 enforce_gtid_consistency 用于保证主从数据一致,关闭将会导致主从同步失败,不支持设置为 OFF,GTID 是为了保证您的事务正常运行,所以不支持关闭。
支持窗口函数吗?
暂不支持窗口函数。
主键长度限制是多少?
主键默认长度不能超过767字节,同时也不建议主键设置过长。
不同事务隔离级别对性能有影响吗?
不同隔离级别,执行效率不同,隔离级别最高的是 Serializable 级别,最低的是 Read uncommitted 级别,级别越高,执行效率就越低。