本文主要介绍在采用本地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%