RDS MySQL DuckDB分析实例提供基于列式存储和向量化计算的高性能分析能力。本文介绍DuckDB分析实例的两种部署场景(分析只读实例和分析主实例)下的选型建议、连接方式和测试验证方法,帮助您快速上手并充分发挥DuckDB的分析性能优势。
RDS MySQL DuckDB分析实例支持以下两种部署场景,您可以根据业务需求选择合适的方案: 对比项 场景一:DuckDB分析只读实例 场景二:DuckDB分析主实例(多源汇聚) 部署方式 在现有RDS MySQL高可用版或集群系列主实例下添加DuckDB分析只读节点 创建独立的DuckDB分析主实例,通过DTS从一个或多个数据源汇聚数据 数据同步 Binlog自动同步,无需手动配置 通过DTS等工具迁移,支持全量+增量同步 核心优势 HTAP自动行列分流,无需修改应用代码 支持多源汇聚,集中分析,独立运行 适用场景 现有MySQL业务需要增加实时分析能力 多数据源归档与集中分析、独立分析库 在现有RDS MySQL主实例下添加DuckDB分析只读节点,详情请参见RDS MySQL高可用系列添加DuckDB分析只读实例。通过Binlog自动同步数据,实现事务处理(OLTP)与分析查询(OLAP)的自动分流。 计算规格 建议选择与主实例相同或相近的CPU/内存规格,确保分析查询有足够的计算资源,避免因规格不足导致查询性能瓶颈。详细规格信息请参见DuckDB分析只读实例规格表。 存储配置 建议选择主实例存储大小的75%作为初始存储容量。DuckDB采用列式存储与向量化计算,通过列式压缩技术可显著降低存储占用,实际存储空间通常远小于行式存储。 重要 分析只读节点的存储空间必须 ≥ 主实例存储空间的50%,否则可能因空间不足导致数据同步异常。 DuckDB分析只读实例采用Binlog自动同步机制,无需手动导入数据。同步流程如下: 主实例写入数据时生成Binlog。 DuckDB只读实例自动消费Binlog。 数据自动转换为列式存储格式并构建向量化索引。 同步延迟通常在秒级。您可以在RDS控制台的监控与报警页面查看同步延迟和状态。 DuckDB分析只读实例提供以下两种连接方式: 连接方式 说明 适用场景 数据库代理连接(推荐) 通过主实例的数据库代理地址连接,自动路由OLAP/OLTP请求 读写混合业务,无需修改应用代码 直接连接 使用DuckDB只读实例的独立连接地址 纯分析查询场景 方式一(推荐):通过数据库代理连接 当业务同时涉及高并发事务处理(OLTP)和复杂分析查询(OLAP)时,推荐使用数据库代理实现HTAP自动行列分流。数据库代理会根据SQL查询的预估执行代价自动路由:OLAP查询路由至DuckDB分析只读实例,OLTP查询路由至主实例或普通只读实例。 前置条件: 已为主实例开启通用型数据库代理(免费)。 已开启HTAP行列自动分流。详情请参见HTAP自动行列分流。 重要 HTAP行列自动分流功能仅MySQL 8.0大版本主实例支持。如果您的主实例为MySQL 5.7,需要先升级至8.0。 连接示例: 方式二:直接连接只读实例 DuckDB分析只读实例拥有独立的连接地址。当只需处理分析型查询(OLAP)时,可通过该地址直接连接。 获取连接地址的操作步骤如下: 登录RDS管理控制台。 在实例列表中找到主实例,单击左侧下拉箭头展开只读实例列表。 单击DuckDB分析只读实例的实例ID,进入实例详情页。 在基本信息区域单击查看连接详情,获取内网连接地址。如需外网访问,请先申请外网地址。 在开启数据库代理后,如果需要将特定请求强制发送到主实例处理,可使用以下方式: 方式一:直接连接主实例地址 绕过数据库代理,直接使用主实例的内网或外网连接地址进行连接。适用于写操作(INSERT/UPDATE/DELETE)、事务控制和存储过程调用等场景。 方式二:使用数据库代理 + 事务封装 如果已开通数据库代理且未开启事务拆分,可以将请求封装在事务内。事务内的所有操作默认路由到主实例。适用于读写混合的业务逻辑以及需要保证读写一致性的场景。 方式三:使用Hint语法 通过在SQL语句中添加Hint注释,将单条SQL路由到主实例。适用于个别SQL需要强制走主实例的场景。 重要 使用Hint语法前,建议在测试环境中验证其路由行为是否符合预期。 连接方式 路由目标 适用场景 优点 缺点 数据库代理(推荐) 自动路由:OLAP→DuckDB,OLTP→主实例 读写混合业务 无需改代码,自动分流 需开启数据库代理 只读实例地址 DuckDB只读实例 纯分析查询、报表统计 查询性能好,不占用主实例资源 不支持写操作 主实例地址 主实例(InnoDB) 写操作、事务控制 功能完整,支持所有MySQL语法 分析查询性能较低 事务封装 主实例(InnoDB) 读写混合,需保证一致性 无需修改连接配置 需开通代理且关闭事务拆分 Hint语法 主实例(InnoDB) 个别SQL需走主实例 细粒度控制 需修改SQL语句 DuckDB分析只读实例仅支持 DuckDB支持窗口函数、复杂聚合等分析函数和语法。不兼容的SQL在开启数据库代理后会自动分流到主实例执行。详情请参见DuckDB分析实例兼容性说明。 建议根据业务读写类型选择合适的连接方式:读写混合使用数据库代理(自动分流),纯分析使用只读实例地址,写操作使用主实例地址。 创建独立的DuckDB分析主实例,通过DTS从一个或多个数据源汇聚数据,实现集中分析。适用于多数据源归档、跨业务联合分析等场景。 免费试用规格 阿里云为企业用户和个人用户提供DuckDB分析主实例的免费试用权益: 用户类型 试用规格 试用时长 说明 企业用户 8核16GB(myduck.x2.xlarge.xc,独享型) 1个月 包年包月试用和按量付费试用各一次,下单时费用显示为0元 个人用户(基础系列) 4核8GB(myduck.n2.large.1) 3个月 两种系列任选其一,权益不叠加 个人用户(集群系列) 4核8GB(myduck.x2.large.xc) 1个月 试用入口: 灵活升降配 DuckDB分析主实例支持灵活变更配置,包括升级/降级CPU和内存规格、扩大存储空间、变更存储类型(高性能云盘 ↔ ESSD云盘)。详情请参见变更DuckDB分析主实例配置。 重要 升降配过程中实例会短暂重启,建议在业务低峰期操作。存储空间仅支持扩容,不支持缩容。 DTS数据迁移(5条免费链路) 每个阿里云账号享有5条免费DTS迁移链路,免费额度长期有效,适用于小规模数据迁移场景,超出免费额度后按量付费。DTS支持从多种源库迁移数据到DuckDB分析主实例,并支持结构迁移、全量迁移和增量迁移。 支持的源库类型: MySQL(自建MySQL、RDS MySQL、其他云MySQL) PostgreSQL Oracle SQL Server MongoDB Redis DuckDB分析主实例支持以下四种数据导入方式,您可以根据数据源类型和业务需求选择合适的方案: 导入方式 适用场景 优点 缺点 DTS迁移 其他数据库迁移到DuckDB 支持全量+增量,自动化程度高 需要配置DTS任务 mysqldump 小规模数据导入 简单易用,无需额外工具 速度较慢,不支持增量 LOAD DATA CSV文件导入 速度快,适合批量导入 需要预先准备CSV文件 主从同步 已有MySQL主从架构 无缝切换,对业务影响小 配置复杂,需要额外实例 方式一(推荐):使用DTS迁移 前置条件: 已创建DuckDB分析主实例。详情请参见创建并连接DuckDB分析主实例。 源库可被DTS访问(公网/内网/专线)。 源库账号具有REPLICATION CLIENT和REPLICATION SLAVE权限。 操作步骤: 登录DTS控制台,单击创建同步任务。 配置源库和目标库连接信息。源库选择关系型数据库标签页下的对应数据库类型,目标库选择数据仓库标签页下的DuckDB类型。 选择迁移类型(结构迁移 + 全量迁移 + 增量迁移)和迁移对象(库/表级别)。 完成预检查并启动迁移任务,等待迁移完成。 详细操作请参见同步MySQL实例数据至DuckDB分析主实例。 方式二:使用mysqldump导入 适用于小规模数据导入。操作步骤如下: 重要 使用 获取连接地址 DuckDB分析主实例提供内网地址(同地域ECS等服务免流量访问)和外网地址(需申请开通)。您可以在RDS控制台的实例详情页基本信息区域获取连接地址。 连接示例 白名单配置 DuckDB分析主实例默认白名单为127.0.0.1(禁止外部访问),您需要添加允许访问的IP地址或IP段后才能正常连接。 操作步骤: 在实例详情页,单击左侧导航栏的数据安全性 > 白名单设置。 单击修改,添加允许访问的IP地址或IP段。 单击确定,配置立即生效。 重要 生产环境建议使用VPC内网访问,不开放外网。白名单使用精确IP地址,避免设置为0.0.0.0/0。请定期审计白名单,移除不再需要的IP。 完成实例创建和数据导入后,建议从以下五个维度进行测试验证,确保DuckDB分析实例满足业务需求。 整体全量测试 选取10张以上代表性业务表,执行全表扫描和聚合查询,对比主实例(InnoDB)和DuckDB实例的执行时间。 预期性能提升参考: 查询类型 预期性能提升 聚合查询(COUNT/SUM/AVG) 10~100倍 大表扫描查询 5~50倍 复杂多表JOIN查询 3~20倍 指定SQL测试 收集生产环境中20~50条慢查询SQL,在DuckDB实例上逐一执行并记录执行时间,与主实例对比性能差异。建议按以下格式记录测试结果: SQL编号 SQL类型 主实例耗时(ms) DuckDB耗时(ms) 提升倍数 结果 001 聚合查询 5000 50 100x 通过 002 多表JOIN 3000 150 20x 通过 003 子查询 2000 80 25x 通过 查询结果验证 对比主实例和DuckDB实例的查询结果,确保数据一致性(行数和字段值完全一致)。 验证业务SQL在DuckDB实例上的兼容性,测试范围包括: 基础SQL语法(SELECT/WHERE/GROUP BY/ORDER BY等) 聚合函数(COUNT/SUM/AVG/MAX/MIN等) 窗口函数(ROW_NUMBER/RANK/LEAD/LAG等) 字符串函数、日期函数 子查询、CTE和多表JOIN 以下为已知不兼容场景: 写操作(INSERT/UPDATE/DELETE) 事务操作(BEGIN/COMMIT/ROLLBACK) 部分MySQL特有函数、存储过程和触发器 完整的兼容性信息请参见DuckDB分析实例兼容性说明。 重要 DuckDB不兼容的SQL(如INSERT/UPDATE/DELETE),通过数据库代理的自动分流机制,会自动转发到InnoDB主实例上执行。 验证自动分流机制的操作步骤: 通过数据库代理地址连接实例,执行DuckDB不支持的SQL(如INSERT语句)。 观察请求是否自动路由到主实例,并确认执行结果正确。 在RDS控制台监控与报警页面查看分流次数指标。 验证方法: 查看实例监控中的分流次数指标。 检查慢查询日志中的SQL路由记录。 确认写操作在主实例成功执行。 通过RDS控制台监控与报警 > 存储空间查看DuckDB列式存储的压缩效果。 监控指标: 原始数据大小(主实例) 压缩后数据大小(DuckDB实例) 压缩率 =(1 - 压缩后大小 / 原始大小)× 100% 测试步骤: 查看主实例的表存储空间。 查看DuckDB实例的表存储空间。 计算压缩率。 记录不同数据类型的压缩效果。 压缩率参考值: 数据类型 原始大小(GB) 压缩后大小(GB) 压缩率 数值型 100 15 85% 日期时间 100 20 80% 字符串 100 25 75% 混合类型 100 30 70% 您也可以在主实例上通过以下SQL查看表的存储空间,与DuckDB实例的存储监控数据进行对比: 对于DuckDB分析只读实例,需要关注主实例与只读实例之间的数据同步延迟。您可以在RDS控制台监控与报警页面查看同步延迟指标。 监控指标: 同步延迟(秒) Binlog消费速率 未同步的Binlog数量 延迟阈值参考: 延迟级别 延迟范围 建议操作 正常 < 5秒 无需干预 警告 5~30秒 关注主实例写入量,检查网络状况 严重 > 30秒 检查并优化主实例写入负载,确认DuckDB实例规格是否充足 优化延迟的建议: 确保主实例与只读实例之间的网络带宽充足。 避免主实例出现突发大量写入。 合理设置DuckDB只读实例的计算和存储规格。 Q:如何强制请求走主实例? A:您可以通过以下三种方式将请求强制发送到主实例处理: 直接连接主实例的内网或外网地址。 开通数据库代理且未开启事务拆分时,将请求封装在事务内。 在SQL语句中使用Hint语法(如 Q:只读实例有单独的连接地址吗? A:是的。DuckDB分析只读实例拥有独立的连接地址,您可以在只读实例详情页的基本信息区域获取。您可以直接使用该地址连接只读实例进行分析查询。 Q:DuckDB分析只读实例创建需要多长时间? A:DuckDB分析只读实例的创建时间与主实例的数据量有关,通常比普通只读实例更长。这是因为创建过程中需要将主实例中所有表的数据转换为DuckDB列式存储格式。 Q:主实例版本升级会受到影响吗? A:开启DuckDB分析只读实例后,RDS MySQL 5.7主实例暂不支持大版本升级到8.0。如需使用HTAP自动行列分流等MySQL 8.0专属功能,建议直接创建MySQL 8.0版本的主实例。 Q:什么是HTAP自动行列分流? A:HTAP自动行列分流是数据库代理的一项功能,可根据SQL查询的执行代价自动将OLAP请求路由至DuckDB分析只读实例,OLTP请求路由至主实例或普通只读实例。该功能仅MySQL 8.0大版本支持。详情请参见HTAP自动行列分流。 Q:DTS迁移免费链路有多少条? A:每个阿里云账号享有5条免费DTS迁移链路,免费额度长期有效。超出免费额度后按量付费。 Q:DuckDB分析主实例有哪些免费试用规格? A:企业用户可试用8核16GB独享型规格(1个月),个人用户可试用4核8GB基础系列(3个月)或集群系列(1个月),两种系列任选其一。场景说明
场景一:DuckDB分析只读实例
选型建议
数据同步机制
连接方式
## 通过数据库代理地址连接
mysql -h <主实例代理地址> -P 3306 -u <用户名> -p
## 应用程序JDBC连接字符串
jdbc:mysql://<主实例代理地址>:3306/<数据库名>?useSSL=false
## 通过只读实例独立地址连接
mysql -h <只读实例连接地址> -P 3306 -u <用户名> -p
## 应用程序JDBC连接字符串
jdbc:mysql://<只读实例连接地址>:3306/<数据库名>?useSSL=false
强制请求走主实例
## 直接连接主实例
mysql -h <主实例连接地址> -P 3306 -u <用户名> -p
-- 事务内的操作会路由到主实例
START TRANSACTION;
SELECT * FROM orders WHERE id = 1;
UPDATE orders SET status = 'completed' WHERE id = 1;
COMMIT;
-- 使用Hint强制路由到主实例
SELECT /*+ MASTER */ * FROM orders WHERE id = 1;
连接方式对比
注意事项
SELECT查询,不支持INSERT、UPDATE、DELETE等写操作。场景二:DuckDB分析主实例(多源汇聚)
规格与权益
数据导入
## 步骤1:从源库导出数据
mysqldump -h <源库地址> -u <用户名> -p --single-transaction \
--set-gtid-purged=OFF <数据库名> > backup.sql
## 步骤2:导入到DuckDB分析主实例
mysql -h <DuckDB实例地址> -P 3306 -u <用户名> -p <数据库名> < backup.sql
--single-transaction参数可避免导出期间锁表影响在线业务。使用--set-gtid-purged=OFF可避免GTID冲突。大表建议分表导出,避免单个文件过大。连接与安全
## MySQL客户端连接
mysql -h <实例连接地址> -P 3306 -u <数据库账号> -p
## Python连接示例
import pymysql
conn = pymysql.connect(
host='<实例连接地址>',
port=3306,
user='<数据库账号>',
password='<数据库密码>',
database='<数据库名>',
charset='utf8mb4'
)
测试验证
性能测试
-- 全表聚合查询
SELECT COUNT(*), SUM(amount), AVG(price) FROM orders;
-- 多表JOIN查询
SELECT o.order_id, u.user_name, p.product_name
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN products p ON o.product_id = p.id
WHERE o.create_time >= '2026-01-01';
-- 行数对比
SELECT COUNT(*) FROM table_name;
-- 抽样数据对比
SELECT * FROM table_name ORDER BY id LIMIT 100;
-- 聚合结果对比
SELECT SUM(amount), AVG(price), MAX(create_time) FROM orders;
兼容性测试
自动分流测试
-- 写操作(预期分流到InnoDB)
INSERT INTO test_table VALUES (1, 'test');
UPDATE orders SET status = 'completed' WHERE id = 1;
DELETE FROM temp_data WHERE create_time < '2026-01-01';
-- 读操作(预期在DuckDB执行)
SELECT * FROM orders WHERE id = 1;
SELECT COUNT(*) FROM users;
压缩率测试
-- 查看主实例表存储空间
SELECT table_name,
ROUND(data_length / 1024 / 1024, 2) AS data_mb,
ROUND(index_length / 1024 / 1024, 2) AS index_mb
FROM information_schema.tables
WHERE table_schema = '<数据库名>';
-- 查看DuckDB存储空间(通过RDS控制台)
-- RDS控制台 → 监控与报警 → 存储空间
主从延迟监控
常见问题
/*+ MASTER */),将单条SQL路由到主实例。相关文档