收藏 分销(赏)

PolarDB-X开源分布式数据库实战进阶.pdf

上传人:Stan****Shan 文档编号:1240473 上传时间:2024-04-19 格式:PDF 页数:133 大小:70.28MB
下载 相关 举报
PolarDB-X开源分布式数据库实战进阶.pdf_第1页
第1页 / 共133页
PolarDB-X开源分布式数据库实战进阶.pdf_第2页
第2页 / 共133页
PolarDB-X开源分布式数据库实战进阶.pdf_第3页
第3页 / 共133页
PolarDB-X开源分布式数据库实战进阶.pdf_第4页
第4页 / 共133页
PolarDB-X开源分布式数据库实战进阶.pdf_第5页
第5页 / 共133页
点击查看更多>>
资源描述

1、封面页(此页面将由下图全覆盖,此为编辑稿中的示意,将在终稿 PDF 版中做更新)目录 PolarDB-X 的部署与运维.4 PolarDB-X 数据导入导出.25 对 PolarDB-X 进行 TP 负载测试.45 PolarDB-X 分区管理.71 PolarDB-X 的 TTL 表的使用和原理.92 PolarDB-X 冷热数据归档.107 PolarDB-X 读写分离和 HTAP 场景的实践.121 PolarDB-X 的部署与运维 4 PolarDB-X 的部署与运维 作者:吴迪,阿里云 PolarDB-X 技术专家 一、PolarDB-X 简介 PolarDB-X 是一款面向超高并发

2、、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点。PolarDB-X 最初为解决阿里巴巴天猫“双十一”核心交易系统数据库扩展性瓶颈而生,之后伴随阿里云一路成长,是一款经过多种核心业务场景验证的、成熟稳定的数据库系统。PolarDB-X 采用 Shared-nothing 与存储计算分离架构进行设计,系统由 4 个核心组件组成。计算节点(CN,Compute Node)计算节点是系统的入口,采用无状态设计,包括 SQL 解析器

3、、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务 2PC 协调、全局二级索引维护等,同时提供 SQL 限流、三权分立等企业级特性。PolarDB-X 的部署与运维 5 存储节点(DN,Data Node)存储节点负责数据的持久化,基于多数派Paxos协议提供数据高可靠、强一致保障,同时通过 MVCC 维护分布式事务可见性。元数据服务(GMS,Global Meta Service)元数据服务负责维护全局强一致的 Table/Schema,Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。日志节点(CDC,Cha

4、nge Data Capture)日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容MySQL Replication 协议的主从复制能力。二、课程介绍 经过几个月的迭代,PolarDB-X 在近期推出了 V2.2 里程碑式的版本。该版本支持了国产化的适配,满足分布式数据库金融级标准特性的企业级能力:国产化适配:能够全面支持 ARM 架构芯片。PolarDB-X 的部署与运维 6 性价比优化:提供了更小的起步规格,同时通过优化 RPC 协议、单分片读写场景下的事务处理以及存储引擎 GCN 缓存等,使性能相对于 2.1 有了 60%的提升。云原生 HTAP:支持只

5、读集群,能够方便地使业务通过读写分离的方式实现在线业务与离线业务的资源强隔离。同时,只读集群的节点默认可参加 MPP 的并行计算,提高复杂查询的处理能力。MySQL 生态兼容性:兼容 MySQL 的存储过程 UDF 函数,同时兼容 MySQL Auto Increment,能够提供全局唯一单调递增的有序序列。数据库安全:支持全量 SQL 审计,支持误删数据后可快速恢复的 Flashback Query 能力。分布式数据管理:对 PolarDB-X 的分区表管理能力做了进一步加强,支持了基于 locality 的亲和性调度。另外,针对冷热数据,能够按照不同的存储进行分离式调度,降低使用成本。开源

6、配套工具:开源了很多配套生态工具,比如专门支持 DN 备份的 Polardbx-backup,压测工具 benchmark-boot,导入导出工具 batch-tool。轻量化部署和运维:推出了众多企业级特性,比如强一致备份恢复、参数模板的管理、容灾部署以及备库重搭等保障数据高可靠的能力。上图为本次课程相关资源 PolarDB-X 的部署与运维 7 PolarDB-X 目前支持多种部署方式,本次课程主要基于 PolarDB-X Operator 的部署方式进行介绍。PolarDB-X Operator 是 PolarDB-X 在 K8s 上的自动化运维系统,也是我们推荐的生产级部署方式。基于

7、K8s 的底层基础设施,可以在 K8s 集群上快速运维和管理PolarDB-X 集群。比如基于 K8s 的 deployment 管理无状态的 CN、CDC 节点,基于 StatefulSets 等方式管理有状态的 GMS 和 DN 节点。除了基本的生命周期管理能力外,PolarDB-X Operator 还支持弹性伸缩、高可用、安全可信、监控审计等运维能力。比如在本次 V2.2 版本中,重点支持了国产化的适配、全量的备份恢复、SQL 审计、参数模板和参数设置、备库重搭以及只读集群。未来,我们也会对 PolarDB-X 做进一步的改造和完善。比如目前的很多运维操作依赖于黑屏化的方式进行。未来,

8、我们会提供 PolarDB-X dashboard,可以通过白屏化的方式管理 PolarDB-X 集群。同时,对于备份能力也会进一步完善,比如实现自定义的备份策略,帮助用户定期自动备份,同时支持增量备份以及任意时间点的恢复能力。目前,PolarDB-X Operator 的调度更多依赖于 K8s scheduler 进行。在异构集群或对 IO 能力更敏感的集群上的调整能力还不够细粒度,未来也会进一步优化。PolarDB-X 的部署与运维 8 三、国产 ARM 支持 目前,市场上对于国产化服务器的需求较为强烈,PolarDB-X V2.2 版本已经全面兼容 X86 和 ARM 架构两种平台。不仅

9、包括内核(计算节点 CN、存储节点 DN、日志节点 CDC),也包括了生态工具,例如 K8s 上的集群运维管理平台 PolarDB-X Operator、压测工具 benchmark-boot、导入导出工具 batch-tools 都已完成 ARM架构的适配。上图给出了 PolarDB-X 在 Docker hub 上的几个重要镜像。基于 docker manifest 的方式,将两种不同架构的镜像通过相同的 tag 进行打包,用户在不同平台上部署时可以使用相同的方式,大幅减少了运维复杂度。Demo 演示:如何在 ARM 平台部署 PolarDB-X 进入阿里云官网-开发者社区-云起实验室-实

10、践系列课-PolarDB-X 开源分布式数据库进阶,点击实验 1 的查看详情-再次实验,即可进入实验页面。PolarDB-X 的部署与运维 9 在实验页面点击“创建资源”,系统会自动创建 ECS。创建完成后,ECS 的终端页面的云产品资源会列出相关实验的信息,包括云服务器的基本信息、IP、用户账号等。切换到实验手册 tab 页,按照步骤进行实验。首先,安装 Docker、Kubectl、minikube 和 helm3,在此基础之上安装 PolarDB-X Operator。PolarDB-X 的部署与运维 10 通过 uname 命令查看 ECS 架构。通过上图两条命令安装 Docker。安

11、装完成后,通过 systemctl 命令启动 Docker 服务。下载 kubectl 安装包,通过 chmod 命令,为文件赋予可执行权限,并将其移动到系统目录下,即可直接使用命令。安装 minikube,它可以帮助我们快速在 ECS 上创建一个虚拟的 K8s 集群,然后安装 PolarDB-X Operator 和创建 PolarDB-X 集群。先下载 minikube 安装包并进行安装,然后安装 helm3,完成解压安装后将其移动到系统目录下,即可直接使用。最后,安装 MySQL client,能够让方便地连接到创建好的 PolarDB-X 集群上。第一步,创建 K8s 集群,并在部署好

12、的 PolarDB-X Operator 上创建 PolarDB-X。首先,通过 minikube 创建 Kubernetes 集群。执行上图命令,切换到 galaxykube 账号下,执行 su galaxykube,切换到主目录下。PolarDB-X 的部署与运维 11 通过创建 K8s 集群,系统会帮助我们创建一个包含两个 4C12G 节点的 K8s 集群,集群版本为 1.23.3。K8s 集群安装完成后,通过上图命令查看集群基本信息。接下来,开始部署 PolarDB-X Operator。如上图,通过kubectl命令创建PolarDB-XOperator system命名空间,添加P

13、olarDB-X Operator 的 Helm 仓库,然后一键安装 PolarDB-X Operator。PolarDB-X Operator 安装完成后输出信息如上图所示。PolarDB-X 的部署与运维 12 部署 PolarDB-X 集群。首先通过 vm polardb-x.yaml 打开 YAML 文件,将对应步骤中给出的 YAML 文本内容粘贴到 YAML 文件。执行上图 kubectl apply-f polardb-x.yaml 命令,即可一键创建 PolarDB-X 集群。PolarDB-X 的部署与运维 13 创建过程中会产生上述 pod。其中 dn-0-cand-0 和

14、dn-0-cand-1 是 DN 节点中的leader 和 follower 角色,dn-0-log-0 为 log 节点。基于 Paxos 的三副本结构,每一个 DN 都会有三个 pod 来保障数据的高可靠。下一步:连接 PolarDB-X 集群。通过上图命令获取 PolarDB-X 集群的登录密码,然后通过 port-forward 命令将PolarDB-X service 的 3306 端口转发到本台 ECS 上。点击实验页面右上角“+”,创建新的终端号,通过上图命令连接 PolarDB-X。接下来,通过 create database 的方式创建 sysbench 数据库,并在 Pol

15、arDB-X 上通过 sysbench OLTP 的场景模拟真实业务流量。PolarDB-X 的部署与运维 14 首先执行 create database sysbench_test,然后输入 exit,退出连接。切换到galaxykube 主账号。创建一个 sysbench-prepare.yaml 文件,复制对应实验步骤中的文本,粘贴到 YAML文件中。保存 yaml 文件,执行上述命令,一键准备数据。PolarDB-X 的部署与运维 15 数据准备完成后,启动 OLTP 场景压测流量。首先创建 sysbench-oltp.yaml 文件,复制对应步骤中的 YAML 信息到文件中,执行 k

16、ubectl apply-f sysbench-oltp.yaml开启 sysench 的 oltp 压测流量。通过 kubectl get pods 查看当前 pod,结果如上图所示。通过 kubectl logs-f 命令查看当前的压测效果。结果显示,sysbench oltp 已经正常稳定运行,目前 QPS 约 1500-2000,RT 约 500毫秒。四、企业级运维能力 PolarDB-X Operator 在 2.2 版本支持的企业级运维能力包括日志采集(SQL 审计能力)、强一致备份恢复、备库重搭以及参数模板和参数设置四项能力。PolarDB-X 的部署与运维 16 PolarDB

17、-X 2.2 版本支持三种日志的自动采集,分别是:sql.log,记录全量的 SQL 信息,基于日志便可以构建全量的 SQL 审计功能。slow.log,记录慢 SQL 列表,可以帮助有效地监控 PolarDB-X 上是否存在慢SQL 或问题 SQL。error.log,即错误日志,可以帮助判断是否存在业务上的异常或系统上的异常。日志文件的采集采用了 Filebeats+Logstash 的开源解决方案。首先,Filebeats 会以 daemonSet 的方式部署在 K8s 的每个节点上,定时拉取相关日志文件,并将其投递到 Logstash 集群中。Logstash 负责对日志文本进行解析,

18、提取索引字段,同时将其发送给下游存储系统,默认推荐采用 Elasticsearch 的方式进行存储,通过Kibana 的方式做可视化的查询展现。上图展示了 Kibana 查询 PolarDB-X SQL 日志的截图,可以简单地利用查询语言,帮助定位问题 SQL 或高危 SQL。另外,采用 Logstash 的解决方案可以充分利用其多种 output plugin 的能力,将SQL 日志或慢日志投递到不同的存储系统中,比如 MongoDB、Datadog 或Clickhouse,构建自己的分析业务。PolarDB-X 的部署与运维 17 PolarDB-X 的备份流程分为几个步骤:对每一个 DN

19、 节点进行并行的物理备份,所有 DN 都备份完成之后,在增量日志里寻找一致性位点。然后,对增量的 binlog 日志进行裁剪,备份增量日志,进行元数据备份。为什要寻找一致性的位点?以经典的转账场景为例来说明:如上图,有一张账户信息表,一共有 4 个账户 a、b、c、d,其中 a、b 分布在 DN1,c、d 在 DN2 上。账户总金额为 200 元。在某一时刻,发生了 a 向 d 转账以及 c 向 b 转账。而此时恰好正在进行备份,且备份完成。如果要基于之前的备份集对数据进行恢复,则恢复出的数据应该只存在两种情况:两笔转账在 DN1 和 DN2 上都没发生或都发生了,不应该存在诸如 DN1 上发

20、生而 DN2 上没发生的情况。即四个账户的总金额始终要保持 200,保证全局数据的一致性。而如果没有保证全局数据的一致性,如上图下方所示,a 账号已经完成了转账,账户金额从 100 变为 50,但是该 50 元还未到 d 账户中,c 和 b 的情况类似,则会导致四个账户的总金额变成为 110,这对于业务而言是不可接受的结果。因此,我们需要找出一致性的位点,保证恢复的时刻所有该提交的事务都已完成提交,所有该回滚的事务都已全部被回滚。备份完成之后,PolarDB-X 备份集的构成如下:PolarDB-X 的账号、密码、元拓扑信息等元数据;每一个 DN 节点的全量物理备份,同时我们会为每一个 DN

21、节点配 PolarDB-X 的部署与运维 18 备增量的备份日志,保证所有 DN 都恢复到全局一致的位点,保证恢复出的数据的一致性。PolarDB-X 的备份集目前支持多种存储方式,包括 OSS、SFTP、NAS 等,未来也会支持 S3 等更多方式。Demo 演示:如何对 PolarDB-X 进行备份恢复 首先,在 ECS 创建 K8s 集群,集群由两个节点组成。创建 PolarDB-X 的实例,由一个 CN 节点和两个 DN 节点组成。本次实验将会初始化 100 个账户,在 100 个账户中进行并发的随机转账,验证PolarDB-X 实例的数据一致性。准备 K8s job,里面有转账测试的工

22、具。创建 job,查看 job 和 pod 的情况,如上图。执行上图命令查看日志输出。PolarDB-X 的部署与运维 19 登录到 PolarDB-X 实例,查看数据情况。首先,获取实例密码,将 PolarDB-X 实例的 service 转发到本台机器,在下面端口中连接 PolarDB-X 实例。执行 show database 查看数据情况,如上图。PolarDB-X 的部署与运维 20 查看其中的 accounts 表,如上图,统计全部账户总金额,显示为 10 万。过程中重复多次查询总金额,结果均为 10 万,证明 PolarDB-X 在正常的转账测试场景下能够保证全局数据一致性。我们

23、将在业务流量的场景下,对 PolarDB-X 实例进行备份,并恢复,同时对恢复的实例验证数据一致性。开启备份前,首先需要配置 PolarDB-X 备份集的存储方式。PolarDB-X 开源版本备份集存储方式默认支持两种,分别是阿里云的 OSS 以及 SFTP。本次实验采用 SFTP的方式。准备 SFTP 的配置文件,如上图所示。通过上图的 kubectl patch 命令使备份集的存储配置生效,再执行第二条命令重启HPFS 组件。上图为提前准备好的 PolarDB-X backup 的 YAML 文件。下面对 PolarDB-X 集群进行备份。PolarDB-X 的部署与运维 21 通过 ap

24、ply 的方式创建 PolarDB-X backup 对象即可进行备份。然后通过 kubectl get pxb-w 观察备份进度,如下图所示。备份完成后,删除创建的 PolarDB-X 集群,模拟数据丢失的情况。PolarDB-X 的部署与运维 22 上图为提前写好的 YAML 文件,定义了 PolarDB-X 恢复实例的规格以及相关属性。此处需要指定 restore 字段,指明通过前文创建的 PolarDB-X backup 备份集进行恢复。通过上图中 kubectl apply 命令创建实例,对原数据进行恢复。恢复完成后,统计账户总金额,结果显示依然为 10 万,满足数据的一致性要求。P

25、olarDB-X 的部署与运维 23 PolarDB-X 的 DN 是通过 Paxos 实现的 3 副本,包括的角色有 leader、follower、logger 以及只读的 learner 节点。任意节点的宕机都不会影响 PolarDB-X 整体的可用性。如果 leader 故障,follower 会自动成为 leader 对外提供服务。如果 follower故障,leader 依然可以对外提供服务。但如果 follower 所在主机故障,且无法恢复,DN 只剩 leader 和 logger 工作,如果此时再有主机或者节点出现故障,服务便会受到影响。因此需要将原先的 follower 从

26、故障主机迁移到新的主机上,重新恢复 3副本的状态。另一种场景,假如一台宿主机需要下线或迁移,CN 和 CDC 此类无状态节点可以直接从负载均衡摘除,在新的主机上创建新节点即可。而有状态的 DN 节点怎么办?PolarDB-X 2.2 版本提供的备库重搭能力可以帮助将 follower、logger 以及 learner节点迁移到其它主机。而 leader 节点直接重建会影响服务,因此备库重搭不支持leader 节点。如果想要重建 leader 节点,需要通过主备切换的方式将 leader 降为 follower 再进行重搭。同时,如果机器能够恢复,又不想增加额外资源,PolarDB-X 也支持

27、在本地进行重搭来帮助恢复损坏的副本。PolarDB-X 的部署与运维 24 PolarDB-X 2.2 版本支持了参数模板和参数设置功能。同时结合 PolarDB-X 近几年在公共云上的生产级实践,预置了高性能的参数模板。创建 PolarDB-X 集群时,直接指定 parameterTemplate:product 即可应用该参数模板。同时,PolarDB-X2.2 也支持参数的设置。在之前的版本中,CN 和 DN 的参数设置方式不一样。而 2.2 版本提供了 PolarDB-X parameter CRD,能够通过统一的方式对 CN 和 DN 的参数进行修改。对于某些需要重启的参数,也会自动

28、完成重启操作。除此之外,通过查询 PolarDB-X parameter 对象可以查看所有参数的修改记录。PolarDB-X 数据导入导出 25 PolarDB-X 数据导入导出 作者:刘志文,阿里云 PolarDB-X 技术专家 PolarDB-X 兼容 MySQL 的导入导出语法,下图为常见的导入导出方式:其中 Select into outfile 语句默认关闭,因为公有云上 CN(PolarDB-X 计算节点)不可登陆机器访问,执行时会直接存储到 CN 节点,而非存储到 MySQL-client 所在机器。程序导入数据是指编写程序连接数据库执行插入语句,比如 Java 通过 JDBC连

29、上数据库,再拼凑成 insert 语句执行。一、纯数据格式导入导出 PolarDB-X 数据导入导出 26 纯数据格式指从PolarDB-X导出的只是单纯的数据组成的文件,不包含表的信息等。Batch Tool 也是纯数据格式的导入工具。创建资源之后,镜像环境已经安装好第三方包。因为root用户下无法启动minikube,因此需要切换到galaxykube账号。然后根据课程指引启动minikube,部署PolarDB-X。部署完成后,查看 pod 状态,我们会为每一个 pod 打标,比如 CDC、CN,以表明节点类型。可以通过 kubectl get pxc 查看是否处于运行状态,通过上图中的

30、 kubectl get secret 命令获取密码。PolarDB-X 数据导入导出 27 K8s 的网络略有不同,需要转发才能在本地执行。因此需要将 K8s 的端口映射到本地 3306 端口上。同时,必须保持终端窗口运行才能持续转发,因此需要点击页面右上角“+”创建新的终端连接数据库。因前面已将数据库切换至 galaxykube 用户,因此 K8s 的所有操作均需要在galaxykube 用户下才能操作,而其他的登录数据库以及执行命令在 root 或galaxykube 均可。因为本次实验会涉及到数据库的操作和命令的操作,推荐分屏方式进行操作。首先安装 Sysbench,准备初始数据。创建

31、数据库,然后通过 Sysbench 将其导入到库上。可通过 oltp_insert 负载准备初始数据。PolarDB-X 兼容 MySQL,因此连接串与 MySQL 一样。此处创建一个十万行的表,默认创建单表。PolarDB-X2.2 中提供了 auto 库,提供了与 MySQL 一致的体验,会自动生成分库分表的规则。PolarDB-X 数据导入导出 28 也可以手动将单表改为分库分表,然后通过 insert select 将数据导入需要的表上。初始数据准备就绪,查看表的数据以及建表信息。PolarDB-X 数据导入导出 29 通过上图命令进行数据导入。如上图,time 会记录执行该条命令所花

32、费的时间,-N可避免执行输出列名,-e 代表执行后面的 SQL 语句,将数据从 sbtest1 重定向到本地文件 data_10w.txt。PolarDB-X 数据导入导出 30 查看导出的文件,结果显示与表结构的数据一致。可通过“wc-l data_10w.txt”命令查看数据行数,显示为 10 万行。也可以简单地通过字符串处理,将制表符改为逗号,导出后查看结果,显示如上图。PolarDB-X 数据导入导出 31 切换至 galaxykube,登录上图所示 pod 并查看,结果显示当前目录下没有文件。通过上图 hint 将 select in outfile 功能打开,将文件 select

33、出来并存储至 result.txt文件下。下面演示通过 LoadData 语句导入数据。PolarDB-X 数据导入导出 32 登录时加上-local-infile 参数才能执行 LoadData 语句。首先创建目标库表至test_one 库,再创建与初始数据表一样结构的表。通过 LoadData 语句将数据导入到目标表中。LoadData 是单线程导入,因此导入速度较慢。导入完成后,查看表内数据,结果如上图,证明导入无误。PolarDB-X 数据导入导出 33 二、SQL 语句格式导入导出 从 PolarDB-X 中导出 SQL 语句一般通过 mysqldump 工具,导出的数据会被拼接为一

34、条 insert SQL 或建表语句等,数据库需要兼容 SQL 语句的格式。将 SQL 语句导入 PolarDB-X,可以通过 Source 语句和 MySQL 命令。执行上图 MySQL dump 工具命令,其中 net_buffer_length 指拼成 insert 语句的长度,这将影响 insert 语句的 batch size。目标库为 Sysbench_int,目标表为 sbtest1。PolarDB-X 数据导入导出 34 查看前面部分数据,显示如上图,为 insert into 的形式。将数据导入到 test_two 库上。因为导出的 insert 语句中指定了表名,因此必须创

35、建一张相同名称的表。执行 source 命令,此时为 root 账户下,需注意文件路径。PolarDB-X 数据导入导出 35 查看结果,如上图,显示 bench size 为 51,指拼成了 51 行语句。该方式的本质为执行 SQL 文件的每一行 SQL。将表清空,然后通过 MySQL 命令执行导入。查看导入结果,显示如上图,证明导入成功。PolarDB-X 数据导入导出 36 Demo3:Batch-Tool 工具导入导出 Batch-Tool 工具主要通过数据文件的格式进行导入导出。首先,安装 batch-tool 工具。从 github 上下载太慢,建议使用 OSS 下载。然后安装 J

36、ava 环境。执行上图命令。-D 指定数据库,-o 指定操作类型,比如导入、导出、批量删除或批量更新,-t 指定表名,-s 指定分隔符,-F 为文件个数。PolarDB-X 数据导入导出 37 导出后查看数据,显示使用逗号进行分隔;查看行数,显示为 10000 行。PolarDB-X 数据导入导出 38 将 数 据 导 入 到 sbtest1_0 表。先 清 空 表 内 数 据,再 执 行 导 入。上 图 中maxConnectionNum 表示连接串的最大并行度,batch-tool 支持多线程执行。查看结果中的最小值、最大值以及行数,结果无误。三、PolarDB-X 和 MySQL 数据迁

37、移 针对 PolarDB-X 和 MySQL 之间的数据迁移,更推荐通过数据文件进行导入导,不推荐 SQL 语句格式,因为 PolarDB-X 是分布式数据库,包含一些特有的分布式数据分片规则。PolarDB-X 数据导入导出 39 首先,通过 K8s 部署 MySQL,创建完成后,通过上图语句建立连接,映射到 3307端口。登录 pod,显示报错。因为 MySQL 8.0 之后的驱动修改了密码验证方式,需要登进pod,将密码的类型改为 mysql_native_password,然后从 pod 退出,重新在外面登录。为了保证持续转发,点击右上角“+”新增一个端口。PolarDB-X 数据导入

38、导出 40 在 MySQL 上建库,并创建单表。接下来将 PolarDB-X 导出的数据导入到 MySQL 中。注意,此处拉起了 MySQL,默认 local_infile 为关闭状态,无法使用 load data 语句,因此需要将其打开。PolarDB-X 数据导入导出 41 执行导入语句,并查看结果,如上图。data_10w.txt 文件已成功导入到 MySQL 中。再从 MySQL 中将数据导出为 mysql_10w.csv 文件,并查看结果,如上图。接下来将数据导入到 PolarDB-X 中。PolarDB-X 数据导入导出 42 首先,清除前面导入的数据,然后执行上图 batch-t

39、ool 工具导入命令,可将 mysql导出的数据导入到 PolarDB-X 中。PolarDB-X 数据导入导出 43 最后可查看从 MySQL 中导出的数据,也是通过逗号分隔的普通的 CSV 文件格式,与 PolarDB-X 导出的数据一致,证明可以互相导入导出。前文演示的导入导出过程均存在中间数据,PolarDB-X 还可以通过 CDC 节点与MySQL 同步,没有中间态的存在。CDC 节点能够将多个 DN 的 binlog 汇聚,变成全局统一的、一致的 binlog,完全兼容 MySQL 的 binlog 格式以及 MySQL 的Replication 协议。Batch-Tool 的特点

40、有三:PolarDB-X 数据导入导出 44 采用多线程操作。文件的读取通过多线程 ring buffer,形成生产者-消费者模型,能够实现加速,消费时也通过多线程执行 使用 PreparedStatement 批量插入。结合 sharding 规则、即分库分表规则,可提高执行效率。Batch-Tool 已经开源且发布了新的版本,可支持流式压缩导出和流式解压导入,支持加密解密的导入导出,目前可支持 CSV、TXT、EXCEL 文件格式。另外,也支持从yaml 文件中配置参数,简化命令行的参数编写。对 PolarDB-X 进行 TP 负载测试 45 对 PolarDB-X 进行 TP 负载测试

41、作者:方焱志,阿里云 PolarDB-X 开发工程师 数据库基准测试是对数据库进行定量的压力测试,以此评估数据库的性能,客观全面地反映数据库系统之间的性能差距。常见的基准测试工具有 Sysbench、TPC 组织的各类数据集,熟知的比如 TPC-C、TPCH、TPC-DS 等。而针对非关系型数据库或大数据的场景,也有一系列专用的测试集。Sysbench是一款开源的多线程性能测试工具,不仅可以测试系统自身的性能指标,还内置了各种数据库负载的场景,让测试人员能够快速了解数据库系统的性能情况。系统的性能指标包括 CPU、内存、文件 IO、互斥锁等。而数据库负载场景则包括点查、只读、只写、读写混合、索

42、引更新、非索引更新等,以上场景均为针对一张或多张名为 sbtest 的表发起的并发操作。建表方式也很简单,包括 Int 类型的主键 ID、带二级索引的 Int 类型字段 k 和两个char 类型的字段。Sysbench 不模拟真实的业务场景,而是专用于在每个场景单测专项的性能。对 PolarDB-X 进行 TP 负载测试 46 上图列举了其中 3 种场景:点查(point_select)、更新索引(update_index)、只读(read_only)。点查为根据主键 ID 查询一条记录。更新索引则是根据主键 ID 对带索引的字段 k 进行自增操作。如果用户业务中有很多 agg 类的查询则可以

43、使用只读场景。TPC-C 模拟了仓库订单管理的业务场景,尝试从真实应用中抽象出数据库模式和工作负载。上图左侧的数据库 ER 图展示了 TPC-C 包含的表,同时表与表之间的数据量存在一定的比例关系。比如左下角的 item 商品表是固定的 10 万条记录,而每个仓库则对应 10 个地区,每个地区有 3000 位客户,每个客户会下多笔订单。对 PolarDB-X 进行 TP 负载测试 47 因此,TPC-C 相比 Sysbench,一个很大的区别在于 TPC-C 模拟了真实的业务场景。上图列举了 TPC-C 的五种不同事务类型,包括 New-Order 下单、Payment 支付、Delivery

44、 发货、Order-Status 查询交易状况、Stock-Level 查询库存状况。而最终衡量 TPC-C 性能结果使用 tmpC,表示每分钟执行 New-Order 事务数,因为 New-Order 事务反映了下单场景中高频率且响应时间严格的读写混合事务的执行状况,是整个 TPC-C workload 的核心。Stock-Level 库存查询状况中只包含一条查询,使用了子查询和 join 语句查询仓库的库存状况。New-Order 执行的步骤包括以下几步:第一步,从 warehouse 表和 customer 表中查询出信息。第二步,更新对应的 district 地区信息。第三步,向 or

45、ders 表和 new_orders 表插入一条新记录。第四步,由于客户的一笔订单中会下单多件商品,需要针对购买的每一件商品更新stock 表的库存信息,并向 order_line 表插入一行新记录。第五步,提交事务。对 PolarDB-X 进行 TP 负载测试 48 从上述流程也可以体现出 TPC-C 和 Sysbench 的差别还在于 TPC-C 的事务遵循实际业务的规律与约束,而 Sysbench 则是纯随机的增删改查,不具备 TPC-C 测试的特性。因此,TPC-C 具备数据完整性和一致性的概念,其规范包含了对数据完整性的约束。该约束与 TPC-C 的运行时间无关,比如 orders

46、表里持久化保存了所有下单记录,运行时间越来越长,orders 表也会越来越大。从完整性约束中,可以推导出6 条 SQL(详情见后文),用于验证 TPC-C 的数据完整性。TPC-H 主要用于测评 OLAP 分析型查询的能力,而 Sysbench 和 TPC-C 则用于测评OLTP 在线事务处理的能力。TPC-H 包含了 8 张数据表、22 条复杂的 SQL 查询,大多查询中还包含了多表 join 子查询、group-by 等聚合操作。对于数据库的考验除了优化器的 Join Reorder、join 算法的选择,还有执行器、各种算子实现与多机并行执行等逻辑实现。用户在使用上述 3 类测试工具的过

47、程中会面临一系列问题,比如工具的编译、部署、执行结果如何收集统计、如何方便快捷地可视化呈现以及导入大规模数据应该如何选择合适的并发度等。对 PolarDB-X 进行 TP 负载测试 49 针对以上问题,我们推出了 Benchmark Boot 一站式压测平台,主打一站式、兼容性、易用性、可视化,一站式体现在内置了 Sysbench、TPC-C、TPC-H 三款精准测试工具,兼容性体现在可以在不同的系统平台安装部署,易用性则体现在整个压测流程均为白屏化操作,最终的测试结果也可以通过表格、折线图、柱状图等形式进行可视化展示。相关安装使用文档点击此处查看网址。对 PolarDB-X 进行 TP 负载

48、测试 50 Benchmark Boot 的部署安装步骤非常简单,我们提供了一键安装命令,也提供了Docker 镜像,省去了处理依赖安装问题的麻烦。使用 Benchmark Boot 要求压测机需要有不低于 4C8G 的配置,因为压测机规格太低容易成为性能瓶颈。同时,还需要一台有浏览器的前端机器。部署安装成功后,可通过浏览器访问 Benchmark Boot 平台。对 PolarDB-X 进行 TP 负载测试 51 后续的实验主要包括以下几个步骤:压测目标数据库的连接配置,在数据库连接面板中填入 PolarDB-X 的集群 IP 端口、用户名密码,之后输入 Sysbench 库名、TPC-C

49、库名,选择对应 PolarDB-X 建库模式。下一步为自动参数调优。如果想要测试 PolarDB-X 的极限性能,可以尝试使用一键调优功能。导入压测数据,设置表数量、表大小、导入的并发数。导入完毕后可进行数据校验。对 PolarDB-X 进行 TP 负载测试 52 运行压测的步骤则是先设置好导入的表数量、表大小,选择负载类型和对应的并发数、运行时间,开始压测。最后的压测结果汇总中,可以看到 QPS 曲线、平均 QPS/TPS、平均 RT 等历史任务信息。以上为 Sysbench 的流程,TPC-C 的流程也完全一致。对 PolarDB-X 进行 TP 负载测试 53 首先根据压测机规格和参数选

50、择合适的并发数,导入 TPC-C 数据库。填入压测并发数和运行时间开始压测。对 PolarDB-X 进行 TP 负载测试 54 最后的结果汇总中记录了历史任务信息,也可以对比查看实时的 tpmC 曲线。压测中的常用性能指标包含 QPS、TPS、RT。QPS 指每秒查询数,从数据库层面来看指 1 秒内执行的 SQL 语句数,包括增删改查。TPS 指每秒事务数,从数据库层面看,既包含了 commit 事务,也包含 rollback 事务。TPS 在不同语境下具有不同的含义:在数据库系统中,指每秒执行的事务数量;在 web 应用中,可以理解为对页面的一次访问;在区块链中,代表产生交易的速率。对 Po

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服