负载说明

本文主要介绍在采用本地DBGateway部署方式,采集全量SQL的方案说明和负载说明。

注意事项

  • 如果用户未开启全量SQL采集和慢SQL采集,仅使用监控和告警功能,那么本地DBGateway仅需要消耗2%的CPU。

  • 4 vCPU 8 GiB的ECS自建数据库(即总CPU是400%),在3.10内核下,如果数据库的TPS达到8000,开启全量SQL后,仅需要消耗10.7%的CPU。

全量SQL采集方案说明

  • DBGateway开启全量SQL采集后,会创建Linux系统AF_PACKET套接字,并开始抓取网络数据包,但不会影响正常网络通信。

  • DBGateway按照TCP/IP协议解析抓取的网络数据包,过滤其他端口的数据包,只对流入MySQL端口的数据包进行分析。

  • 流入MySQL端口的数据包按照MySQL通讯协议拼成完整的SQL。

  • DBGateway将多条SQL打包压缩后,加密上传到DAS的存储集群中。

负载说明

  • 若您未开启全量SQL采集和慢SQL采集,仅使用监控和告警功能,那么本地DBGateway仅需要消耗2%的CPU。

  • 若您已开启全量SQL,在不同的操作系统、硬件配置、MySQL负载下,DBGateway的负载情况,线上真实场景的压测数据如下:

    • 测试环境:

      • 硬件说明:测试服务器均为阿里云ECS ecs.c5.xlarge规格(4 vCPU 8 GiB I/O优化)的服务器。

      • 操作系统说明:

        • 2.6内核的服务器操作系统为CentOS 6.8 64位

        • 3.10内核的服务器操作系统为CentOS 7.4 64位

        • 4.4内核的服务器操作系统为Ubuntu 16.04 64位

    • 测试方法:

      • 在另一台服务器上部署MySQL流量程序,用于创建SQL并访问MySQL,同时开启40个线程(session)访问目标MySQL(select/insert/update/delete循环)。

      • SQL长度在50~281字节之间。

      • 使用top命令记录所在机器的CPU、内存使用情况。

    • 测试结果:

      在Linux Kernel 3.2及以上的版本,DBGateway支持以PACKET_MMAP方式(在内核空间中分配一块内核缓冲区,然后用户空间程序调用mmap映射到用户空间)更快地抓取数据包。

      所以DBGateway支持全量SQL功能,在Linux Kernel 3.2及以上的版本上,CPU开销显著降低。

      从表格可以清楚的看到,4 vCPU 8 GiB的ECS自建数据库(即总CPU是400%),在3.10内核下,如果数据库的TPS达到8000,开启全量SQL后,仅需要消耗10.7%的CPU。

      说明

      若仅开启基础监控(数据库性能指标监控、主机性能指标监控等),需要2%的CPU。

      内核版本

      1000 TPS

      2000 TPS

      4000 TPS

      8000 TPS

      16000 TPS

      2.6内核

      6.3%

      8.6%

      12.3%

      21%

      33.9%

      3.10内核

      3.7%

      4.7%

      7%

      10.7%

      18%

      4.4内核

      4%

      5.3%

      7%

      11%

      18.7%