
本文共 1323 字,大约阅读时间需要 4 分钟。
数据集成任务中,源库SQL查询往往是耗时瓶颈,特别是当数据表规模较大时。为了提升数据同步效率,切分键的设计和使用显得尤为重要。本文将从实际案例出发,探讨切分键对源库查询性能的优化作用,并通过多种配置进行性能对比分析。
1. 探究任务入库查询行为
为了深入了解任务入库过程,推荐使用MySQL的general_log
日志输出。这种日志记录了所有数据库操作,从而为分析查询行为提供详实依据。虽然general_log
默认关闭,由于日志文件可能对数据库性能产生影响,因此一般仅在问题排查时开启。
具体操作步骤如下:
查看当前general_log
状态:
show variables like '%general%';
例如:
Variable_name | Value------------ |azionegeneral_log | OFF...
开启日志并指定文件路径:
set global general_log=on;
然后在操作系统中使用tail -f
命令实时查看日志。
2. 不设置切分键的默认行为
默认情况下,数据集成任务通过直接执行标准的SELECT语句入库。
示例语句:
select xxx,xxx from `shardkey`;
3. 设置切分键的执行流程
当设置切分键时,具体操作步骤包括:
获取切分键的最小和最大值范围:
SELECT MIN(id), MAX(id) FROM `shardkey`;
按照范围切分数据。注意,范围查询采用左闭右开策略,唯独在id IS NULL
时采用左闭右闭方式:
- 左闭右开:
select xxx,xxx from `shardkey` where (1 <= id AND id < 19923);
- 左闭右闭:
select xxx,xxx from `shardkey` where (19923 <= id AND id <= 199221);
处理id IS NULL
的特殊情况:
select xxx,xxx from `shardkey` where id IS NULL;
并发查询时,根据最大并发数(如设置为2或4)分片执行。可以通过show processlist
监控并发查询情况。
4. 切分键的使用注意事项
推荐使用主键作为切分键:主键通常分布较为均匀,便于避免数据片偏差。
注意:
splitPk
仅支持整型数据切分,不支持字符串、日期等类型。
性能测试与对比
通过对不同配置的性能测试,得出以下结论:
-
方案一:不设置切分键,默认最大并发数为2
DATA同步耗时:93秒,整体任务耗时:95.22秒
-
方案二:设置主键切分键,默认最大并发数为2
数据同步耗时:63秒,整体任务耗时:64.67秒
-
方案三:设置主键切分键,最大并发数为4
数据同步耗时:32秒,整体任务耗时:34.07秒
从上述对比可以看出,两方面有显著提升:
切分键对数据同步效率的直接提升,尤其在查询表规模较大的场景下表现更优。
并发数的合理调优,可有效降低任务整体耗时。
建议在实际应用中,既根据表数据量大小合理设置切分键,并根据源库负载情况科学确定最大并发数,以达到最佳数据同步效率。
发表评论
最新留言
关于作者
