tencent cloud

文档反馈

编译优化高性能版本

最后更新时间:2024-04-25 09:43:22
    TDSQL-C MySQL 版的 TXSQL 内核支持编译优化高性能版本,可以在保持原有兼容性、不更改内核内部实现逻辑的前提下,借助动态编译器优化手段考虑用户可能的输入行为,使得数据库内核在业务通用场景下表现出更强的性能、同时降低其使用功耗。本文为您介绍 TDSQL-C MySQL 版的编译优化高性能版本。

    支持版本

    内核版本 TDSQL-C MySQL 版5.7 2.1.11及以上。
    内核版本 TDSQL-C MySQL 版8.0 3.1.12及以上。
    说明:
    编译优化高性能版本当前为灰度发布中,如需提前体验,请在满足以上数据库内核版本的前提下 提交工单 申请使用。

    背景

    随着现代 CPU 内部实现的日益复杂,云数据库默认的编译、配置和运行方法很难充分发挥 CPU 的性能潜力,导致大量 CPU 周期空转。这种现象在规模效应叠加的情况下,不仅造成硬件资源的浪费,而且还会浪费大量的功耗。因此,需要对云数据库进行优化,以最大限度地发挥 CPU 的性能潜力,减少 CPU 周期的空转,提高硬件资源的利用率,并降低功耗的浪费。
    TDSQL-C MySQL 版在不更改数据库内核业务逻辑代码前提下,借助动态编译器优化手段,以最小的代价完成了内核性能提升和功耗减少。通过收集云数据库在典型/真实业务场景下的行为和性能消耗数据,解决默认编译方式对业务行为无感知的问题;分析数据库运行时的行为特征,结合 CPU 微架构的特点,利用编译优化技术使得优化之后的版本对 CPU 微架构更友好,可充分发挥 CPU 的性能潜力;通过大量的场景测试以保证优化效果在各种条件下不劣化。
    通过以上技术手段,此版本实现了如下优化:
    1. 基于数据库运行行为数据实现反馈优化,提升函数内联/函数重排/基本库重排的优化能力,从而大幅降低数据库 CPU ICache/ITLB 失效,提升性能。
    2. 通过“链接时优化技术”增加编译优化视野,从单文件单函数扩展到跨文件/全二进制文件范围,可极大提升内联的优化空间,降低指令数。
    3. 在实践中摸索出一套高效验证和分析的方法,确保效果接近理论极限和保证在各种场景下不劣化。
    

    什么是编译优化

    编译优化是指在编译代码时,通过对代码进行优化和调整编译参数,以提高程序的执行效率和性能的过程。

    优化原理

    TDSQL-C MySQL 版的编译优化高性能版本使用 PGO(profile guided optimization) 技术进行优化,PGO 技术能够解决传统编译器在执行优化时,只基于静态代码信息,而不去考虑用户可能的输入,从而无法对代码进行有效优化的问题。
    PGO 技术主要分为以下三个阶段:
    1. instrument:在 instrument 阶段,先对应用做一次编译,在此编译中,编译器会向代码中插入指令,以便下一阶段可以收集数据。这些指令分为三种类型,分别用于统计每个函数被执行了多少次、每个分支被执行了多少次(例如 if-else 的场景)以及某些变量的值(主要用于 switch-case 的场景)。
    2. train:在 train 阶段,用户需要使用最常用的输入来运行上一阶段编译生成后的应用。由于上一阶段已经做好了收集数据的准备,所以在经过 train 阶段之后,该应用最常见的使用场景对应的数据就会被收集下来。
    3. optimization:在 optimization 阶段中,编译器会利用上一阶段收集到的数据,对应用进行重新编译。由于上一阶段的数据来自于用户输入的最常见的用户场景,所以最后优化得到的结果就能在该场景下有更好的优化。
    通过以上三个阶段的优化,TDSQL-C MySQL 版的编译优化高性能版本就能更好地适应用户的需求,提高应用的性能和效率。

    性能测试

    测试场景
    混合读写(point select)测试场景,主要测试数据库在同时进行读写操作时的性能表现,可以帮助评估数据库在实际应用场景下的性能表现,包括并发读写操作的处理能力、响应时间、吞吐量等指标。
    测试结果
    
    规格
    并发
    单表数据量(table_size)
    表总数(tables)
    QPS
    使用编译优化版本
    提升百分比
    2核16GB
    64
    800000
    150
    29207
    27%
    4核16GB
    256
    800000
    300
    65562
    27%
    4核32GB
    256
    800000
    300
    78973
    27%
    8核32GB
    256
    800000
    300
    139845
    28%
    8核64GB
    256
    800000
    450
    154894
    28%
    16核64GB
    256
    800000
    450
    249954
    29%
    16核96GB
    256
    800000
    600
    238061
    29%
    16核128GB
    512
    5000000
    300
    253848
    29%
    32核128GB
    512
    5000000
    300
    399647
    30%
    32核256GB
    512
    5000000
    400
    402105
    30%
    64核256GB
    512
    6000000
    450
    596706
    31%
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持