腾讯云数据库MySQL 8.0——新特性(二)

2020/8/26 22:03:00

2. 腾讯云 MySQL 8.0(二)



腾讯云 MySQL 8.0 推出八大特性:数据加密、SQL审计、线程池、数据强一致性、新硬件支持、轻量级 AP 、热点更新、SQL限流,下文我们详细来做解读。    
  



(1)SQL审计



MySQL 开源社区版是不支持企业级审计功能的,只有商业版里才提供。而腾讯云 MySQL 8.0实现了内核级别的审计功能,并且结合了云产品进一步提升了 SQL 审计功能,让用户拥有更好的体验。


上图展示了腾讯云 MySQL 8.0 的审计架构图,用户连接 session 产生的审计记录,由专门的写盘线程(Flush thread)将内存中的审计记录写入审计文件中(Audit File),直接落盘。

而审计代理(Audit Agent)则会读取审计文件,将审计记录发送到审计日志中心。审计日志中心是由 CTSDB 数据库存储的,这是一个时序数据库,贴合时序审计的数据存储。

选择这样的数据库存储能带来很多好处,首先是数据压缩率高、二是数据吞吐量大、三是分析能力强,完全可以满足海量审计数据下的分析处理能力。

同时我们也会采用 JSON 格式对审计日志进行存储。记录的审计内容有时间戳、影响行数、执行时间、主机、来源IP、实例名、用户名、数据库名,包括具体的 SQL 语句和类型等。

考虑到审计日志量巨大,我们也在产品层面上提供了审计规则的过滤。另外,为了减少审计的打开对 MySQL 数据库的性能影响,目前只会对命令执行完后的结果进行审计。

根据测试,如果打开审计并进行全量审计(Audit All),会达到 6% 左右的性能损失。而采用过滤型审计性能损失大概是在 2%~3%,相对于官方商业版本损失也是比较小的。

我们的审计功能还在不断往前迭代发展,现在只是对事后操作进行审计,目前正在开发一项新的功能:事前拦截功能。

以前 MySQL 中有许多大数据是最让 DBA 头疼的,就是主实例大事务容易造成主从延迟等问题。事前拦截功能,会针对不同语句进行并发控制,从而保护核心任务。事前拦截也会配合 5.7 版本出现的新参数 —— 最长时序时间(max_execution_time)。时序时间超过设定值,就会启动拦截。


(2)线程池



对于线程池,之前 MySQL 默认的连接处理方式是:一个线程一个连接,每个数据库连接都会创建独立的线程,请求结束后就把线程销毁,这个模式相较于最早期的进程服务在效率上有了很大提升。

但是在互联网高并发业务场景下此模式就有很大的问题,因为高并发模式会创建大量的线程,线程会不停征用 CPU 资源、导致 CPU 频繁进行上下文切换,很多短连接也会出现线程频繁的创建和销毁,这些操作都会额外消耗 CPU,导致资源的浪费甚至引起数据库的高负载。

腾讯云数据库 MySQL 8.0 针对这些问题进行了线程模式的改进。当客户端发起连接后,由空闲的线程先对请求进行处理,减少上下文切换的消耗和创建销毁的消耗。同时引入了多队列的机制。

多队列的好处是,可以按照业务的访问走不同的队列。比如写业务、读业务可以分别在不同的队列,大家相互不干扰,各自排队处理请求就可以了。

如下图所示,在开启了线程池以后,512 高并发线程下性能还有提升,但是在没有开启线程池模型的情况下,线程到 512 以后性能开始陡降。



(3)数据加密




MySQL 5.7 以后就开始支持 TDE 透明加密的数据体系。腾讯云 MySQL 8.0 在此基础上引入了腾讯云的另外一款产品 — KMS。KMS 是腾讯云提供的密钥服务,是一项单独的产品,除了与数据库,还可以跟其他云产品相结合使用。

通过 KMS和 TDE 的深度集成,实现了二者的结合,为腾讯云 MySQL 用户提供了一整套安全解决方案。

KMS 采用的是两层密钥体系。KMS 涉及两类密钥,即用户主密钥(CMK)与数据密钥(Datakey)。用户主密钥用于加密数据密钥或密码、证书、配置文件等小包数据(最多 4KB)。数据密钥用于加密业务数据。

海量的业务数据在存储或通信过程中使用数据密钥以对称加密的方式加密,而数据密钥又通过用户主密钥采用非对称加密方式加密保护。通过两层密钥体系,确保数据在在内存和文件中都进行加密。

同时,我们也基于云上的访问控制权限体系——CAM,和MySQL加密体系打通。引入以后,根帐号的管理员可以设置多个子帐号,可以为子帐号分配部分权限,把最高级的权限集中在根帐号用户手中。


(4)新硬件支持




同样,腾讯云 MySQL 8.0 在新硬件的探索和适配上也有着重要的进展。

目前主流云厂商的关系数据库都在使用 SSD,但现在市场上已经存在一种新的硬件—— AEP(英特尔推出的固态存储介质),它提供了超过普遍 SSD 甚至更高级别 SSD 的数据存储能力。

根据英特尔提供的性能指标,AEP 最高的读写速度能达到 8.3 GB/s、写入速度3GB/s,远超现在 SSD 固态盘或者 PCIE 固态盘的性能。

腾讯云 MySQL 8.0 对 AEP 文件读写接口进行了适配,提供在 AEP 硬件适配下的性能改进,把 relog 放到 AEP 硬件上做测试,发现在同等规格操作系统条件下,AEP 性能大大高于传统 SSD 。


经过测试,腾讯云 MySQL 8.0 和官方 8.0 版本在性同硬件、同规格实例、同操作系统条件下,性能全面超越了 Oracle 8.0 。