开发者社区 > 博文 > DongSQL V1.2.0发布:持续深耕零售数据库内核,性能与稳定性双重跃升
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

DongSQL V1.2.0发布:持续深耕零售数据库内核,性能与稳定性双重跃升

  • 京东云开发者
  • 2026-05-12
  • IP归属:北京
  • 17浏览

    DongSQL V1.2.0发布:持续深耕零售数据库内核,性能与稳定性双重跃升

    引言

       继DongSQL V1.1.0在2025年9月《京东自研电商数据库内核DongSQL简介》发布后,京东零售数据库团队持续深耕数据库内核技术,经过半年的打磨,正式推出DongSQL V1.2.0版本。新版本在热点行更新优化、主从复制性能、执行计划缓存、带量压测支持、海量表启动速度、SIMD加速等多个维度实现了重大突破,为零售高性能数据库需求提供了更强大的内核支撑能力。

       本文将深度解析DongSQL V1.2.0的核心技术升级,以及在各种场景下的性能表现。

    图片.png


    图1:DongSQL V1.2.0架构总览(★标注为V1.2.0新增特性)

    

    1、组提交性能优化

    1.1 组提交单播通知

    ▶︎ 优化背景:在DongSQL组提交过程中,follower线程需要等待leader完成binlog刷盘后才能继续执行。传统方式使用单一条件变量(COND_done)广播唤醒所有等待的follower线程,当并发线程数较多时,广播唤醒会导致严重的锁竞争,成为性能瓶颈。

    ▶︎ 技术方案:DongSQL V1.2.0为每个线程分配独立的条件变量(THD::COND_wakeup_ready),将广播唤醒改为逐个单播唤醒。leader线程完成刷盘后,遍历follower队列逐个唤醒,大幅减少对共享条件变量的锁竞争。

    ▶︎ 核心优势

    •适用于所有开启主从复制的场景

    •每个线程独立等待,避免广播唤醒的惊群效应

    •高并发写入场景效果显著,低并发场景性能持平

    ▶︎ 测试环境:16C32G,sysbench 16张表每张1000万行

    ▶︎ 性能测试数据

    测试场景

    低并发表现

    中高并发提升

    oltp_insert

    持平

    150-200%

    oltp_write_only

    持平

    30%

    oltp_update_non_index

    持平

    100-120%

    oltp_update_index

    持平

    70-90%

    oltp_delete

    持平

    85%

    oltp_insert详细数据

    线程数

    关闭QPS

    开启QPS

    提升幅度

    64

    25,239

    28,278

    12%

    128

    27,549

    42,598

    55%

    256

    24,136

    54,352

    125%

    512

    25,651

    73,966

    188%

    1024

    29,983

    77,623

    159%

    oltp_update_non_index详细数据

    线程数

    关闭QPS

    开启QPS

    提升幅度

    64

    25,597

    29,225

    14%

    128

    28,390

    44,795

    58%

    256

    25,376

    58,708

    131%

    512

    28,034

    78,206

    179%

    1024

    34,431

    78,360

    128%

    oltp_delete详细数据

    线程数

    关闭QPS

    开启QPS

    提升幅度

    64

    112,809

    129,668

    15%

    128

    96,091

    209,081

    118%

    256

    92,488

    194,071

    110%

    -- 启用组提交单播通知(默认开启) SET GLOBAL binlog_group_commit_unicast_mode = ON;

    

    图片.png

    图2:组提交单播通知性能对比(开启单播通知后,高并发写入场景性能显著提升)

    2、半同步复制性能优化

    ▶︎ 在刷盘后更新binlog end position:优化binlog位点更新时机,在刷盘完成后立即更新end position,减少从库等待延迟。

    ▶︎ ACK时刷新中继日志:半同步复制在收到从库ACK时立即刷新中继日志,确保数据一致性同时优化复制性能。

    ▶︎ 事务侧和日志侧双重优化:从中继日志侧和事务侧两个维度进行优化,全面提升复制效率。

    ▶︎ 性能测试数据

    基于sysbench oltp_write_only场景测试(20张表,每张1000万行,主从半同步架构):

    参数组合

    说明

    第一组

    两个参数均关闭(基线)

    第二组

    rpl_update_binlog_end_pos_after_flush=ON(主库优化)

    第三组

    rpl_semi_sync_flush_relay_log_on_ack=ON(从库优化)

    第四组

    两个参数均开启(双重优化)

    DongSQL 8.0 性能提升

    线程数

    第二组提升

    第三组提升

    第四组提升

    低并发(≤128线程)

    6%

    18%

    25%

    高并发(256线程)

    -2%

    -12%

    -18%

    DongSQL 5.7 性能提升

    线程数

    第二组提升

    第三组提升

    第四组提升

    低并发(≤256线程)

    5%

    3%

    7%

    高并发(≥512线程)

    持平

    持平

    持平

    -- 相关系统变量 rpl_update_binlog_end_pos_after_flush = ON  -- 主库生效 rpl_semi_sync_flush_relay_log_on_ack = ON   -- 从库生效

    图片.png

    图3:半同步复制优化性能对比(低并发场景显著提升,8.0 最高提升25%)

    3、执行计划缓存

    3.1 功能概述

    ▶︎ 技术痛点:之前版本DongSQL每次执行SQL语句时都需要重新生成执行计划,对于频繁执行的相同SQL,重复生成执行计划会消耗大量CPU资源。

    ▶︎ 解决方案:DongSQL V1.2.0引入执行计划缓存(Plan Cache)功能,缓存SELECT语句的执行计划,避免重复生成执行计划,显著提升查询性能。

    -- 开启执行计划缓存 SET GLOBAL plan_cache_enabled = ON; -- 查看缓存状态 SHOW STATUS LIKE 'plan_cache%';

    3.2 性能提升

    ▶︎ 测试场景:基于sysbench标准测试(8C16G,10张表每张100万行),对比开启和关闭执行计划缓存的性能差异。

    ▶︎ 性能测试数据

    测试场景

    低并发提升

    高并发提升

    oltp_read_only

    1-5%

    1-5%

    select_random_ranges

    22-33%

    56-136%

    select_random_points

    25-36%

    71-206%

    select_random_ranges 详细数据

    线程数

    关闭QPS

    开启QPS

    提升幅度

    2

    10,163

    12,403

    22%

    4

    18,371

    22,935

    25%

    8

    33,776

    44,895

    33%

    16

    33,402

    52,239

    56%

    32

    23,485

    41,145

    75%

    64

    15,740

    37,152

    136%

    select_random_points 详细数据

    线程数

    关闭QPS

    开启QPS

    提升幅度

    2

    11,352

    14,288

    26%

    4

    20,025

    25,877

    29%

    8

    35,384

    47,994

    36%

    16

    34,532

    59,309

    72%

    32

    22,075

    45,974

    108%

    64

    11,911

    36,498

    206%

    ▶︎ 最佳实践:执行计划缓存特别适用于以下场景:

    •频繁执行相同SQL模式的查询

    •OLTP类型的高并发短查询

    •预编译语句和参数化查询

    图片.png

    图4:执行计划缓存开启前后QPS对比(select_random_ranges与select_random_points场景)

    4、单点查询优化增强

    4.1 功能扩展

    ▶︎ V1.1.0回顾:DongSQL V1.1.0首次引入单点查询bypass功能,针对主键等值查询绕过部分SQL层处理逻辑,直接访问存储引擎。

    ▶︎ V1.2.0增强:新版本大幅扩展了单点查询优化的支持范围:

    索引类型扩展:新增支持唯一索引(Unique Index)

    数据类型扩展:新增支持VARCHAR、CHAR类型

    -- 支持主键查询优化 SELECT * FROM orders WHERE order_id = 1001;  -- 主键INT类型 -- 支持唯一索引查询优化 SELECT * FROM users WHERE email = 'user@example.com';  -- 唯一索引VARCHAR类型 -- 支持CHAR类型 SELECT * FROM products WHERE product_code = 'ABC123';  -- 唯一索引CHAR类型

    ▶︎ 注意事项

    •应用条件:单表主键/唯一索引查询

    4.2 性能提升

    ▶︎ 测试环境:8C16G,16张表每张100万行,sysbench oltp_point_select场景

    DongSQL 8.0 性能测试数据

    查询类型

    低并发提升

    高并发提升

    低并发CPU降低

    高并发延迟降低

    整型主键

    6-9%

    19-23%

    1-7%

    16-19%

    整型唯一索引

    6-16%

    17-19%

    2-6%

    15-16%

    VARCHAR唯一索引

    7-18%

    16-21%

    1-6%

    14-18%

    VARCHAR主键

    5-14%

    19-23%

    1-4%

    17-20%

    DongSQL 5.7 性能测试数据

    查询类型

    低并发提升

    高并发提升

    低并发CPU降低

    高并发延迟降低

    整型主键

    6-9%

    17-20%

    7-13%

    11-17%

    整型唯一索引

    4-7%

    15-19%

    3-18%

    14-17%

    VARCHAR唯一索引

    3-10%

    12-15%

    2-4%

    12-13%

    VARCHAR主键

    4-8%

    14-15%

    4-9%

    9-13%

    整型主键查询详细数据(DongSQL 8.0)

    线程数

    优化前QPS

    优化后QPS

    提升幅度

    CPU下降

    延迟降低

    2

    24,709

    26,705

    8.1%

    1.6%

    -

    4

    48,119

    51,549

    7.1%

    1.0%

    -

    8

    93,322

    99,641

    6.8%

    3.7%

    -

    16

    174,917

    189,938

    8.6%

    7.0%

    -

    32

    147,072

    179,666

    22.2%

    -

    18.2%

    64

    106,530

    126,914

    19.1%

    -

    16.7%

    图片.png

    图5:单点查询优化QPS对比(多维度性能提升汇总)

    5、海量表极速启动

    5.1 技术痛点

    ▶︎ 问题背景:DongSQL在启动时需要扫描所有表空间文件来获取space id信息,传统方式是读取每个文件的第一个页。当实例中存在大量表(数十万甚至百万级别)时,启动时间会显著延长。

    ▶︎ 典型场景:DongDAL的分库分表架构,单实例可能包含数十万张表,启动时间可达数十秒甚至分钟级别。

    5.2 解决方案

    ▶︎ 技术创新:DongSQL V1.2.0使用文件扩展属性(xattr)保存表空间文件的space id信息,启动时直接从文件属性读取,无需解析每个文件的第一个页。

    -- 系统变量 innodb_fast_initial_fil_scan = ON  -- 默认开启 -- 查看文件的xattr属性 getfattr ./t1.ibd -n user.dongsql.space_id

    ▶︎ 技术特点

    •自动写入xattr:创建表时自动写入space id到文件扩展属性

    •兼容性保证:旧版本升级后首次启动会自动补全xattr

    •安全机制:检测到xattr冲突或错误时自动修复

    •动态开关:支持运行时动态开启/关闭

    5.3 性能突破

    ▶︎ 测试环境:8C16G128G DongSQL实例

    表空间扫描时间对比

    表数量

    场景

    关闭(秒)

    开启(秒)

    扫描时间缩短

    20万张表

    崩溃恢复

    3.72

    0.62

    83%

    100万张表

    崩溃恢复

    18.62

    3.36

    82%

    100万张表

    正常启动

    18.57

    3.70

    80%

    100万张表

    高负载崩溃恢复

    18.74

    3.59

    81%

    整体启动时间对比

    表数量

    场景

    关闭(秒)

    开启(秒)

    整体时间缩短

    20万张表

    崩溃恢复

    18.5

    16.5

    11%

    100万张表

    崩溃恢复

    101

    88

    13%

    100万张表

    正常启动

    106

    90

    15%

    100万张表

    高负载崩溃恢复

    157

    142

    10%

    ▶︎ 业务价值

    •大幅缩短故障恢复时间,提升系统可用性

    •加速容器化部署和弹性扩容场景

    •特别适用于分库分表架构下的海量表实例

    

    图片.png

    图6:表空间扫描与启动时间对比(20万/100万张表场景)

    6、SIMD性能优化

    6.1 SQL摘要SIMD加速

    ▶︎ 技术背景:SQL摘要(Digest Hash)是数据库性能分析和监控的核心功能,用于识别相同模式的SQL语句。在高并发场景下,SQL摘要计算成为性能瓶颈之一。尤其是之前版本发布的限流功能,也高度依赖SQL摘要计算。

    ▶︎ AVX2指令集优化:DongSQL V1.2.0使用AVX2指令集优化DIGEST_HASH_TO_STRING函数,利用SIMD(单指令多数据)并行计算能力,显著提升SQL摘要转换性能。

    -- 系统变量(默认开启) enable_digest_hash_to_string_avx2 = ON

    6.2 性能测试数据

    ▶︎ 测试环境:8C 16G,DongSQL 8.0,16张表每张100万行

    ▶︎ 测试场景对比

    测试场景

    无AVX2优化

    有AVX2优化

    提升幅度

    oltp_point_select

    114,548 QPS (32线程)

    122,244 QPS (32线程)

    10%

    oltp_read_only

    80,568 QPS (16线程)

    87,056 QPS (16线程)

    8%

    oltp_write_only

    40,376 QPS (16线程)

    43,217 QPS (16线程)

    5%

    oltp_read_write

    50,334 QPS (16线程)

    53,320 QPS (16线程)

    6%

    详细数据对比(oltp_point_select场景)

    线程数

    基准QPS

    AVX2优化QPS

    提升幅度

    2

    16,505

    17,162

    4.0%

    4

    34,024

    35,578

    4.6%

    8

    67,924

    69,757

    2.7%

    16

    125,699

    131,139

    4.3%

    32

    114,548

    122,244

    6.7%

    64

    92,084

    98,333

    6.8%

    ▶︎ 适用条件:CPU需支持AVX2指令集(Intel Haswell及以后、AMD Excavator及以后)

    

    图片.png

    图7:AVX2指令集优化性能对比(oltp_point_select场景详细数据与多场景对比)

    7、Statement Outline(5.7版本)

    7.1 功能移植

    ▶︎ 背景:DongSQL V1.1.0在8.0版本引入了Statement Outline功能,用于固化SQL执行计划。为满足存量业务需求,V1.2.0将该功能移植到DongSQL 5.7版本。

    ▶︎ 核心能力

    执行计划固化:绑定特定SQL到固定执行计划

    Hint注入:动态为SQL添加优化提示

    应急干预:快速解决线上SQL性能问题

    -- 为特定SQL添加索引提示 CALL dbms_outln.add_index_outline(   'ecommerce_db', '', 1,    'USE INDEX', 'idx_status', '',    'SELECT * FROM orders WHERE status = "PAID"' ); -- 为问题SQL添加限流Hint CALL dbms_outln.add_optimizer_outline(   'ecommerce_db', '', 1,    '/*+ ccl_queue_digest(5) */',    'SELECT * FROM hot_products WHERE status = 1' );

    7.2 应用场景

    ▶︎ 执行计划不稳定:防止因数据变化、统计信息更新导致的执行计划劣化

    ▶︎ 应急限流:突发流量场景下快速对问题SQL进行限流

    ▶︎ 性能基线保护:为核心SQL绑定最优执行计划,确保性能稳定

    8、热点行更新优化

    8.1 功能背景

    ▶︎ 业务痛点:在余额扣减、库存秒杀、高并发发号器等典型业务场景中,短时间内会出现针对同一数据行的海量更新操作,即热点行更新问题。海量并发的单行UPDATE语句同时争夺同一行数据的修改权限,导致数据库内部产生大量锁等待与锁竞争。

    ▶︎ 核心瓶颈

    行锁冲突:UPDATE遵循两阶段加锁协议,同一时间只有一个事务能更新某一行,其他事务需串行等待

    半同步复制延迟:事务提交阶段必须等待备库ACK响应后才能释放行级排他锁(X锁),网络延迟进一步延长锁持有时间

    B+树索引高频遍历:每次查找行数据需从根节点自顶向下遍历B+树,单表数据量越大耗时越长

    死锁检测开销:热点行更新场景下锁等待关系图急剧膨胀,死锁检测消耗大量CPU,DongSQL 5.7中每次加锁失败都需检测死锁并持全局锁

    ▶︎ 传统方案局限:此前DongSQL第一版优化通过Hint排队限流+快速提交,虽能减少死锁检测开销,但未改变UPDATE串行执行的本质。在半同步复制环境下,单热点行理论TPS上限仅约500-1000,无法满足高并发业务需求。

    8.2 技术方案

    ▶︎ 核心思路:摒弃"串行等锁"传统思路,引入SQL层缓存的更新批量合并机制,从根本上打破UPDATE串行执行和网络延迟的物理瓶颈。

    ▶︎ 更新批量合并机制

    SQL层行缓存:在SQL层维护InnoDB行数据完整缓存,配备互斥锁保障并发安全

    双更新单元:每行数据配备两个交替执行的更新单元,确保同一时间只有一个单元持有行级排他锁(X锁)

    Leader-Follower模式

    ◦Leader线程进入InnoDB获取X锁,完成数据更新后写入SQL层缓存,等待收集Follower

    ◦Follower线程直接从SQL层缓存读取数据、执行更新、写回缓存,无需进入InnoDB

    ◦Leader统一处理Redo Log与Binlog落盘,完成后唤醒所有Follower

    ▶︎ 关键优化点

    减少B+树遍历:仅Leader线程需遍历B+树,Follower直接从缓存获取数据

    减少死锁检测:更新合并大幅降低并发挂起线程数量,缩减锁等待关系图规模

    平摊网络延迟:单次半同步复制ACK被整个更新单元共享,降低每条UPDATE平均等待时间

    Crash Recovery安全:通过Binlog完整性标记机制,将更新单元绑定为逻辑整体,确保异常重启后主备数据一致

    -- 使用热点行更新(必须包含 COMMIT_ON_SUCCESS Hint) UPDATE /*+ COMMIT_ON_SUCCESS */ t1 SET val = val + 1 WHERE id = 1; -- 系统变量 SET GLOBAL hotspot = ON;                          -- 开启热点行更新 SET GLOBAL hotspot_for_autocommit = ON;           -- 对autocommit模式的UPDATE也启用 SET GLOBAL hotspot_for_trigger = ON;              -- 允许有UPDATE Trigger的表启用 SET GLOBAL hotspot_update_max_wait_time = 5000000; -- Leader等待Follower的最大时间(微秒)

    8.3 性能测试数据

    ▶︎ 测试环境:8C 16G,DongSQL 8.0,单表10条数据,针对id=1的行做热点更新

    ▶︎ 测试SQL

    UPDATE /*+ COMMIT_ON_SUCCESS */ sbtest1 SET k = k + 1 WHERE id = 1;

    热点行更新性能对比

    线程数

    关闭 TPS

    开启 TPS

    关闭延迟(ms)

    开启延迟(ms)

    提升幅度

    1

    3,007

    1,997

    0.33

    0.50

    -33.6%

    2

    4,639

    4,057

    0.43

    0.49

    -12.5%

    4

    4,579

    7,554

    0.87

    0.53

    65.0%

    8

    4,523

    12,269

    1.77

    0.65

    171.2%

    16

    4,250

    15,636

    3.76

    1.02

    267.9%

    32

    4,012

    19,968

    7.98

    1.60

    397.7%

    64

    3,903

    27,618

    16.39

    2.32

    607.5%

    128

    3,714

    34,127

    34.46

    3.78

    818.9%

    256

    3,521

    33,308

    72.69

    7.68

    846.0%

    512

    3,106

    32,172

    164.75

    16.34

    935.5%

    1024

    2,369

    29,765

    431.72

    34.26

    1155.6%

    ▶︎ 测试结论

    •低并发场景(≤2线程):开启hotspot后性能下降约10%-30%,因合并机制引入额外开销

    •高并发场景(≥4线程):性能显著提升,128线程达到峰值34,127 TPS,相比基线提升约9倍

    •开启hotspot后,高并发下平均延迟从72.69ms降至3.78ms,降低95%

    •峰值性能后(128+线程),因CPU饱和,TPS略有回落但维持3万+

    ▶︎ 最佳实践

    •适用于高并发热点行更新场景(库存扣减、余额更新、发号器等)

    •低并发场景不建议启用,可能引入额外开销

    •必须配合/*+ COMMIT_ON_SUCCESS */ Hint使用

    •确保满足使用限制条件(主键/唯一索引等值查询、非分区表等)

    

    图片.png

    图8:热点行更新开启前后TPS对比(高并发下性能提升显著,128线程峰值达34,127 TPS)

    9、带量压测支持

    9.1 功能背景

    ▶︎ 业务痛点:在业务侧原有的压测流程中,需要新建一个压测实例,并把所有数据复制一份到新建的压测实例中,所有压测流量接入到独立的压测实例。为了降本增效,业务侧推进带量压测项目——直接在原实例上新建压测表(以_bak_bak为后缀),压测流量打到压测表上,业务SQL仍操作原表。

    ▶︎ 核心问题:由于压测流量巨大,而压测期间业务的普通用户SQL量较少,数据库会被压测SQL大量占用CPU时间片,导致普通用户SQL出现超时、饿死或执行延迟过高的问题。

    ▶︎ 解决方案:DongSQL V1.2.0在线程池中新增低优先级队列,通过DONGSQL_LOW_PRIO Hint标识压测SQL,将其路由到低优先级队列执行,业务SQL保持普通优先级,确保业务SQL优先得到执行。

    9.2 技术实现

    ▶︎ 架构设计:带量压测的实现由三个模块组成:

    自动开启模块:每次带有压测Hint的SQL进入DongSQL时,在执行期间识别到Hint后自动打开流量检测开关

    流量检测模块:线程池检测到流量检测开关打开后,在SQL任务进入线程池任务队列之前,通过MSG_PEEK技术预读网络包前N个字节,识别SQL是否包含压测Hint,若包含则放入低优先级队列

    自动关闭模块:后台监控线程周期性检测,当检测到当前不在压测状态时,自动关闭流量检测开关,降低流量检测对非压测期间数据库性能的影响

    ▶︎ 核心创新

    MSG_PEEK预读技术:在网络包阶段(尚未解析SQL)即可提前获取SQL前缀,不影响后续网络包的正常处理

    自动开关机制:压测流量进来时第一时间开启检测,压测流量消失后30秒内自动关闭检测,确保非压测期间零性能开销

    -- 压测SQL示例(带有DONGSQL_LOW_PRIO Hint的SQL会被放入低优先级队列) SELECT /*+ DONGSQL_LOW_PRIO */ id, name FROM user WHERE age > 18; UPDATE /*+ DONGSQL_LOW_PRIO */ user SET age = 21 WHERE id = 1; -- 业务正常SQL(不带Hint,保持普通优先级,优先执行) SELECT id, name FROM user WHERE age > 18; UPDATE user SET age = 21 WHERE id = 1;

    ▶︎ 相关系统变量

    enable_high_volume_testing:带量压测功能开关(默认ON)

    load_testing_disable_cycle_period:自动关闭检测的周期间隔(默认30秒)

    9.3 性能测试数据

    ▶︎ 测试环境:8C 16G,DongSQL 8.0开启线程池,sysbench 16张表每张100万行,oltp_read_write场景

    ▶︎ 测试方式:固定用户流量并发数,逐步增加压测流量并发数(32-512),对比开启/关闭低优先级Hint时用户流量的TPS和延迟表现。

    用户并发数=8,压测并发数递增

    压测并发数

    关闭TPS

    开启TPS

    TPS提升

    关闭QPS

    开启QPS

    QPS提升

    关闭平均延迟(ms)

    开启平均延迟(ms)

    延迟降低

    关闭tp99(ms)

    开启tp99(ms)

    tp99降低

    32

    740

    766

    3.6%

    14,790

    15,321

    3.6%

    10.82

    10.44

    3.5%

    53.85

    54.83

    持平

    64

    411

    615

    49.6%

    8,227

    12,306

    49.6%

    19.45

    13.00

    33.2%

    73.13

    73.13

    持平

    128

    220

    649

    195%

    4,403

    12,975

    195%

    36.33

    12.33

    66.1%

    89.16

    74.46

    16.5%

    256

    118

    647

    448%

    2,365

    12,947

    448%

    67.66

    12.36

    81.7%

    112.67

    73.13

    35.1%

    512

    65

    657

    911%

    1,307

    13,150

    911%

    122.39

    12.17

    90.1%

    215.44

    73.13

    66.1%

    用户并发数=32,压测并发数递增

    压测并发数

    关闭TPS

    开启TPS

    TPS提升

    关闭QPS

    开启QPS

    QPS提升

    关闭平均延迟(ms)

    开启平均延迟(ms)

    延迟降低

    关闭tp99(ms)

    开启tp99(ms)

    tp99降低

    32

    1,777

    2,238

    25.9%

    35,544

    44,758

    25.9%

    18.00

    14.30

    20.6%

    70.55

    70.55

    持平

    64

    1,156

    2,341

    102.5%

    23,122

    46,814

    102.5%

    27.68

    13.67

    50.6%

    82.96

    75.82

    8.6%

    128

    753

    2,366

    214.3%

    15,060

    47,321

    214.3%

    42.49

    13.52

    68.2%

    92.42

    75.82

    18.0%

    256

    425

    2,388

    461.6%

    8,508

    47,761

    461.6%

    75.21

    13.40

    82.2%

    167.44

    74.46

    55.5%

    512

    231

    2,330

    909.5%

    4,612

    46,594

    909.5%

    138.77

    13.73

    90.1%

    267.41

    77.19

    71.1%

    

    图片.png

    图9:带量压测功能性能对比(开启LOW_PRIO后用户流量TPS保持稳定,512并发下提升9~11倍)

    ▶︎ 测试结论

    •压测并发越高,用户流量TPS提升幅度和延迟降低幅度越显著

    •512并发压测场景下,用户流量TPS提升高达911倍,平均延迟降低90%,tp99延迟降低66~71%

    •开启功能后,无论压测流量多大,用户流量TPS和延迟始终保持稳定

    ▶︎ 最佳实践

    •压测时为所有压测SQL添加/*+ DONGSQL_LOW_PRIO */ Hint

    •需开启线程池功能(thread_handling=pool-of-threads

    •功能默认开启,无需额外配置

    10、其他重要优化

    10.1 监控表增强

    ▶︎ 新增监控表performance_schema.dongsql_statement_summary

    ▶︎ 采集指标:SQL执行全链路的各项性能指标,包括解析时间、优化时间、执行时间、锁等待时间等。

    ▶︎ 门控参数dongsql_query_time,支持通过门控参数控制是否写入监控数据。

    -- 查看SQL执行全链路指标 SELECT * FROM performance_schema.dongsql_statement_summary  WHERE digest_text LIKE '%orders%'  ORDER BY timer_wait DESC LIMIT 10; -- 设置门控参数 SET GLOBAL dongsql_query_time = 0.1;  -- 只记录执行时间超过100ms的SQL

    10.2 Jemalloc Profiling

    ▶︎ 功能描述:支持jemalloc性能分析功能,添加malloc_stats_print函数用于内存分析。

    ▶︎ 应用场景:内存泄漏排查、内存使用优化、性能调优。

    10.3 fdatasync优化

    ▶︎ 技术方案:使用fdatasync替代fsync加速文件系统访问,减少不必要的元数据刷盘。

    ▶︎ 性能提升:sysbench write_only场景下提升5%,延迟降低5%。

    11、性能基准测试汇总

    11.1 新特性性能提升汇总

    优化模块

    测试场景

    性能提升

    组提交单播通知

    oltp_insert(高并发)

    150-200%

    组提交单播通知

    oltp_update_non_index(高并发)

    100-120%

    执行计划缓存

    select_random_points(高并发)

    71-206%

    海量表启动

    100万张表

    82% 启动时间缩短

    单点查询优化

    主键查询

    5-23% QPS提升

    单点查询优化

    唯一索引查询

    6-21% QPS提升

    SIMD加速

    SQL摘要计算

    3-6% 整体提升

    热点行更新

    128线程单行热点更新

    818% TPS提升

    带量压测

    512并发压测(用户8并发)

    911% 用户TPS提升

    fdatasync优化

    write_only场景

    5% QPS提升

    11.2 版本整体性能对比

    ▶︎ 测试环境:一主一从半同步架构,16C32G,sysbench 16张表每张100万行

    DongSQL 8.0版本对比(V1.2.0 vs V1.1.2)

    测试场景

    V1.1.2峰值QPS

    V1.2.0峰值QPS

    性能提升

    oltp_read_only

    222,380 (32线程)

    296,042 (32线程)

    33%

    oltp_write_only

    84,049 (80线程)

    136,000 (80线程)

    62%

    oltp_insert

    27,087 (128线程)

    81,491 (512线程)

    201%

    oltp_read_write

    135,735 (64线程)

    190,713 (64线程)

    41%

    oltp_point_select

    360,286 (32线程)

    493,177 (64线程)

    37%

    oltp_insert详细对比

    线程数

    V1.1.2 QPS

    V1.2.0 QPS

    提升幅度

    64

    20,856

    32,550

    56%

    128

    27,087

    47,871

    77%

    256

    23,520

    64,521

    174%

    512

    22,758

    81,491

    258%

    1024

    24,115

    80,624

    234%

    DongSQL 5.7版本对比(V1.2.0 vs V1.1.4)

    测试场景

    V1.1.4峰值QPS

    V1.2.0峰值QPS

    性能提升

    oltp_read_only

    185,663 (24线程)

    284,698 (32线程)

    53%

    oltp_write_only

    154,277 (512线程)

    186,829 (256线程)

    21%

    oltp_insert

    63,077 (1024线程)

    86,740 (2048线程)

    38%

    oltp_read_write

    153,763 (64线程)

    220,723 (64线程)

    44%

    oltp_point_select

    451,474 (64线程)

    537,579 (64线程)

    19%

    ▶︎ 性能提升分析

    DongSQL V1.2.0相比V1.1.x版本,在所有测试场景均有显著提升:

    写入密集型场景受益于组提交单播通知和半同步复制优化,性能提升最为显著

    读取密集型场景受益于单点查询优化和SIMD加速

    混合读写场景综合各项优化,整体性能提升约40%

    图片.png

    图10:版本性能提升汇总(V1.2.0相比V1.1.x版本各测试场景提升幅度)

    注:1.2.0 版本基准性能测试基于常规sysbench场景,热点行优化及带量压测功能需结合特定hint实现,因此基准测试数据不包含这两个场景性能优化带来的性能提升

    12、未来规划

    1.持续性能优化:深入优化核心执行引擎,持续提升OLTP场景性能

    2.智能运维增强:完善监控诊断能力,提供更丰富的性能分析工具

    3.云原生演进:推进存算分离架构,打造高性能低成本云原生数据库

    13、结语

       从V1.1.0到V1.2.0,DongSQL在热点行更新优化、主从复制性能、执行计划缓存、带量压测支持、海量表启动、SIMD加速等多个维度实现了重大突破。这些优化不仅提升了系统性能,更重要的是为京东零售场景提供了更坚实的技术底座。

       京东零售数据库团队始终以"业务价值驱动技术创新"为核心理念,持续深耕数据库内核技术。未来,我们将继续围绕电商场景的核心需求,打造更强大、更稳定、更高效的数据库产品。