本文主要介绍在采用本地DBGateway部署方式,采集全量SQL的方案说明和负载说明。
注意事项
- 如果用户未开启全量SQL采集和慢SQL采集,仅使用监控和告警功能,那么本地DBGateway仅需要消耗2%的CPU。
- 4核8G的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 规格(4vCPU 8GB 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核8G的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%
- 测试环境:
发行版本和Linux内核版本对应关系
发行版 | 版本号 | 内核版本 |
---|---|---|
Redhat / CentOS RHEL | 7.5 | 3.10.0-862 |
Redhat / CentOS RHEL | 7.4 | 3.10.0-693 |
Redhat / CentOS RHEL | 7.3 | 3.10.0-514 |
Redhat / CentOS RHEL | 7.2 | 3.10.0-327 |
Redhat / CentOS RHEL | 7.1 | 3.10.0-229 |
Redhat / CentOS RHEL | 7.0 GA | 3.10.0-123 |
Redhat / CentOS RHEL | 7.0 Beta | 3.10.0-54.0.1 |
Redhat / CentOS RHEL | 6.10 | 2.6.32-754 |
Redhat / CentOS RHEL | 6.9 | 2.6.32-696 |
Redhat / CentOS RHEL | 6.8 | 2.6.32-642 |
Redhat / CentOS RHEL | 6.7 | 2.6.32-573 |
Redhat / CentOS RHEL | 6.6 | 2.6.32-504 |
Redhat / CentOS RHEL | 6.5 | 2.6.32-431 |
Redhat / CentOS RHEL | 6.4 | 2.6.32-358 |
Redhat / CentOS RHEL | 6.3 | 2.6.32-279 |
Redhat / CentOS RHEL | 6.2 | 2.6.32-220 |
Redhat / CentOS RHEL | 6.1 | 2.6.32-131.0.15 |
Redhat / CentOS RHEL | 6.0 | 2.6.32-71 |
Ubuntu | 14.04 LTS | 3.13 |
Ubuntu | 16.04 LTS | 4.4 |
Ubuntu | 18.04 LTS | 4.15 |
Aliyun Linux | 17.0-123 | 4.4 |
Debian | 8 | 3.16 |
Debian | 9 | 4.9 |
SUSE Linux Enterprise | 11 | 2.6.27 |
SUSE Linux Enterprise | 11.1 | 2.6.32 |
SUSE Linux Enterprise | 11.2 | 3.0.13 |
SUSE Linux Enterprise | 11.3 | 3.0.76 |
SUSE Linux Enterprise | 11.4 | 3.0.101 |
SUSE Linux Enterprise | 12 | 3.12 |
SUSE Linux Enterprise | 12.1 | 3.12 |
SUSE Linux Enterprise | 12.2 | 4.4 |
SUSE Linux Enterprise | 12.3 | 4.4 |
SUSE Linux Enterprise | 15 | 4.12 |
OpenSUSE | 42.1 | 4.1.12 |
OpenSUSE | 42.2 | 4.4 |
OpenSUSE | 42.3 | 4.4 |
CoreOS | 1745.7.0 | 4.14.48 |
CoreOS | 1465.8.0 | 4.12.14 |