版本日期:2024.03(最新版本以腾讯云官网产品文档为准,本链接为2024年3月版)
版权声明
本文档著作权归腾讯云计算(北京)有限责任公司(以下简称“腾讯云”)单独所有,未经腾讯云事先书面许可,任何主体不得以任何方式或理由使用本文档,包括但不限于复制、修改、传播、公开、剽窃全部或部分本文档内容。
本文档及其所含内容均属腾讯云内部资料,并且仅供腾讯云指定的主体查看。如果您非经腾讯云授权而获得本文档的全部或部分内容,敬请予以删除,切勿以复制、披露、传播等任何方式使用本文档或其任何内容,亦请切勿依本文档或其任何内容而采取任何行动。
免责声明
本文档旨在向客户介绍本文档撰写时,腾讯云相关产品、服务的当时的整体概况,部分产品或服务在后续可能因技术调整或项目设计等任何原因,导致其服务内容、标准等有所调整。因此,本文档仅供参考,腾讯云不对其准确性、适用性或完整性等做任何保证。您所购买、使用的腾讯云产品、服务的种类、内容、服务标准等,应以您和腾讯云之间签署的合同约定为准,除非双方另有约定,否则,腾讯云对本文档内容不做任何明示或默示的承诺或保证。
InnoDB 引擎相关
使用常见问题
如何选择实例规格?
- 使用 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 不能修改分区字段的值。
如何连接实例?
您可通过内网地址和外网地址连接 TDSQL MySQL版,详细操作步骤可参见 连接实例。
可以限制用户登录有效期吗?
创建的用户不支持限制登录有效期。
Navicat 无法登录?
TDSQL MySQL版 数据库默认使用内网连接,如果您需要使用 Navicat 进行外网连接,请参考 开启外网地址 开启数据库的外网地址连接。
如何设置只从从机读取数据?
您可在 TDSQL MySQL版 控制台 创建账号时,账号类型选择“只从备机读取”。
如何创建备份?
您可通过 TDSQL MySQL版 控制台自定义备份,详情请参见 备份方式。
如何设置实例参数?
您可登录 TDSQL MySQL版 控制台,单击实例 ID 进入实例管理页面,在参数配置页修改参数。
磁盘空间组成有哪些?
磁盘由以下2部分空间组成:
- 数据空间:您的数据所占用的空间。
- 系统文件空间:系统表空间文件、redolog 和 undolog、临时文件等。
binlog 文件空间为腾讯云免费赠送,不会占用您购买的磁盘空间容量。
支持灾备/只读实例吗?
支持,详情可参见 灾备/只读实例。
是否支持缩减分片数量?
暂不支持缩减分片数量。
高版本能否降级为低版本?
暂不支持高版本无法降级为低版本。
性能检测主要功能有哪些?
资源分析、系统状态、表空间分布、冗余索引检测、死锁诊断、锁等待诊断、长会话诊断、慢查询分析、DB 状态检查等。详情可参见 性能检测。
是否支持重启实例?
支持,您可登录 TDSQL MySQL版 控制台,在实例列表重启实例。
如何设置读写分离?
TDSQL MySQL版 支持下列几种模式的读写分离:
- 由 只读账号 发送的请求会根据配置的属性发给备机。
- 通过增加 slave 注释标记,将指定的 SQL 发往备机,即在 SQL 中添加 /*slave*/ 这样的标记,该 SQL 会发送给备机。
支持 /*slave:slaveonly*/、 /*slave:20*/、 /*slave:slaveonly,20*/ 这几种形式,数值表示 slave 应该满足的延迟,slaveonly 表示在没有符合条件的 slave 时,不会将查询发送给主节点。
如何导入导出数据?
TDSQL MySQL版 支持通过 DTS 迁移数据 和通过 工具导入导出数据。
三权分立是什么意思?
三权分立指将传统数据库系统 DBA 的角色分解为安全管理员、审计管理员、数据管理员三个相互独立的角色,三个角色之间相互制约,消除系统中的超级权限,从系统角色设计上解决了数据安全问题。
支持哪些格式的两级分区?
TDSQL MySQL版 支持 range 和 list 格式的两级分区,具体建表语法和 MySQL 分区语法类似。详情可参见 两级分区。
支持的数据类型有哪些?
TDSQL MySQL版 支持 MySQL 的所有数据类型,包括数字,字符,日期,空间类型,JSON。详情请参见 兼容性。
最大建表数是多少?
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?
TDSQL MySQL版 目前 select last_insert_id() 只能跟 shard 表和广播表的自增字段一起使用,不支持 noshard 表。详情可参见 全局唯一字段 进行查看。
GTID 能否关闭?
TDSQL MySQL版 GTID 不支持关闭。 MySQL 是基于 GTID 做的主从复制 enforce_gtid_consistency 用于保证主从数据一致,关闭将会导致主从同步失败,不支持设置为 OFF,GTID 是为了保证您的事务正常运行,所以不支持关闭。
支持窗口函数吗?
暂不支持窗口函数。
主键长度限制是多少?
主键默认长度不能超过767字节,同时也不建议主键设置过长。
不同事务隔离级别对性能有影响吗?
不同隔离级别,执行效率不同,隔离级别最高的是 Serializable 级别,最低的是 Read uncommitted 级别,级别越高,执行效率就越低。
磁盘超用问题
磁盘超用锁定说明
为避免您的数据丢失,自2020年8月3日起,分布式数据库 TDSQL MySQL版 将对磁盘使用率大于等于150%的实例进行锁定,磁盘锁定之后,将无法进行写入操作。请合理安排您的存储空间,并提前对磁盘即将超用的实例进行清理或扩容。
磁盘空间组成
- 数据空间:您的数据所占用的空间。
- 系统文件空间:系统表空间文件、redolog 和 undolog、临时文件等。
binlog 文件空间为腾讯云免费赠送,不会占用您购买的磁盘空间容量。
磁盘超用原因
造成磁盘超用的原因可能有以下几点:
- 数据空间占用过大:随着业务的扩大,新数据不断插入,导致数据空间会一直增长。
- 临时文件占用过大:执行带有 order by、group by 的复杂查询,或 alter table 语句时,会产生部分临时表。临时表较小时会存放在内存,过大将会放入磁盘中。
- 系统文件占用过大:数据库在安装时会初始化一些系统文件来维持正常运行,长时间有事务未提交,同时数据库中有大量的更新、插入、删除操作,将可能导致记录事务信息的日志过大。
解决方法
磁盘超用后,建议您通过以下方式排查导致磁盘超用的原因:
- 数据空间占用过大,您可以删除无用的历史表数据释放空间,或者在 控制台 进行实例的磁盘配置调整,扩容后的实例将恢复完整的读写功能。
- 临时文件占用过大,大多是因为应用中存在大量的排序、分组等查询语句,您可以进行相应语句的 SQL 优化,同时监控和清理执行时间过长的会话或事务,来减少临时文件的产生。
- 系统文件占用过大, 可能是因为存在长时间未结束的查询导致 ibdata1 文件过大,您可以监控和清理执行时间过长的会话或事务,减少系统文件的冗余。
IO 类监控项异常问题
异常问题
登录 TDSQL 控制台,单击实例 ID 进入管理页面,在监控告警页中,监控项包含有三个 IO 类指标。
监控项 | 监控项类型 | 监控项名称 |
|---|---|---|
IOUsageRate | 实例监控 | 最大主节点 IO 利用率 |
IOUsageRateShard | 分片监控 | IO 利用率 |
IOUsageRateNode | 节点监控 | IO 利用率 |
在实际使用时,上述三个 IO 类监控项会出现异常升高的情况,在业务处于非峰值的情况下,也会有类似情形出现。同时,如果配置了相关告警,也会触发告警提示。
异常原因
经筛查,IO 类监控项的异常升高可能是如下原因导致:
- IO 类指标存在计算问题,实际展示的是该实例及节点所在机器的 IO 指标换算。
- 其他同机实例的 IO 量级升高,可能会影响到当前实例的 IO 监控。
问题处理
因为该问题涉及 告警,十分抱歉给您带来的影响,当前平台已定位该问题,并着手修复解决。在修复解决过程中,推荐您通过如下方式处理该问题:
- 暂时不要配置上述三个 IO 类监控项的告警,或是提高告警阈值,避免异常告警产生的影响。
- 如果查看到上述三个 IO 类监控项的异常升高,与业务使用情况不匹配,可暂时忽略该指标。
- 当前 IO 使用问题由平台侧统一监控处理,保证各实例正常运行。
TDStore 引擎相关
TDStore 兼容什么数据库协议?
TDStore 兼容 MySQL8.0 协议,用户可以将其视为一个 MySQL 8.0 实例来使用,但有个别受限的操作,具体请参考 使用说明。
TDStore 的内部架构原理是怎样的?
请参考 TDStore 引擎介绍。
TDStore 支持公网/外网访问吗?
出于安全和性能考虑,TDStore 实例目前仅支持从私有网络 VPC 内网访问。
使用轻量应用服务器 Lighthouse 如何连接 TDStore 数据库?
轻量应用服务器 Lighthouse 使用腾讯云自动分配的私有网络 VPC 进行网络隔离,默认情况下内网不与云数据库等其他处于私有网络 VPC 中的腾讯云资源内网互通,需通过关联云联网实现。请参考 Lighthouse 内网连通性说明、内网互联。
系统提示"实例版本校验错误;请升级内核至最新版后重试",需要怎么做?
TDStore 引擎内核在不断迭代升级中,如果您遇到上述系统提示,请 提交工单 联系腾讯云工程师为您升级引擎内核。




