GaussDB关键技术原理:高性能(一)

引言

对数据库性能进行优化是令人激动的,无论是对其进行性能需求分析、性能需求设计、性能问题定个位都是富于变化又充满挑战的工作,本章围绕“数据库性能”进行全面系统化的介绍,首先从数据库在现代软件栈中所处的位置出发,介绍数据库系统性能、涉及的人员、所做的事情、分析的视角以及面临的挑战;其次,以GaussDB样板对数据库查询处理的主要流程进行详细介绍,帮助大家理解数据库内部的处理流程,各个模块对整体性能的主要问题,以及相应模块在性能优化方面使用到的主要的技术和手段;最后,详细介绍数据库性能相关的关键技术与模块,本章内容大体分为:

1)性能优化系统概述

2)性能视角理解GaussDB查询处理流程

3)数据库高性能关键技术

4)高斯数据库性能优化总结

1 数据库性能优化系统概述

内容概要:本章不独立于数据库本身,把数据库看成是整个系统软件栈的基础软件层部分,对性能、资源、时延等本质内容进行原理上的说明,把数据库性能优化抽象成为对一般基础软件的研究。

目的:从计算机体系结构的角度对性能分析做理论上的铺垫,能够让读者后续对数据库性能优化的理解深入本质如系统资源、CPU、内存、IO等,能够让读者更加客观、具体的理解数据库性能问题。

1.1 数据库的软件栈视角

在深入数据库性能这个领域之前,我们需要明白数据库作为系统软件,如何把数据库的处理性能、吞吐量发挥到极致,其本质上是对整个计算机体系结构的研究,包含了所有的硬件组件和整个软件栈,同时随着近年新硬件、新技术的出现数据库的优化不断的下沉到OS、网络协议栈、硬件层,可以说包括几乎所有的硬件组件和整个软件栈。凡是处于处理路径的环节都可以对数据库的性能产生影响。

从上图中可以看到,数据库这一原本软件层的概念,从性能优化的视角他是全栈的,上层涉及到应用程序、客户端,下层涉及到硬件、网络协议等,确保各个组件模块之间在时序节奏上匹配是性能优化的是一个核心问题,也是性能优化的难点之一,因此理解数据库性能优化需要具备多个维度的基础知识以及系统性的思考问题方式。

备注:本章不独立于数据库本身,把数据库看成是整个系统软件栈的基础软件层部分,对性能、资源、时延等本质内容进行原理上的说明,把数据库性能优化抽象成为对一般基础软件的研究,从计算机体系结构的角度对性能分析做理论上的铺垫,能够让读者后续对数据库性能优化的理解深入本质如系统资源、CPU、内存、IO等,能够让读者更加客观、具体的理解数据库性能问题。

1.2 系统性工程视角理解性能优化

数据库的性能优化是个系统性工程,它包含从对象建模、部署模型设计、业务流程设计、局部处理优化等多个环节,从软件工程的角度来看,对数据库优化有以下3个关键要素需要明确

关键点1:性能设计需要合理分工,优化系统性能是一项需要多类人员参与合作完成的事务,其中包括:

(1)系统设计师:负责系统的整体设计,包括系统级架构设计分析,为容量规划(capacity planning)、性能规划(performance planning)定义明确的指标,以及对各个子模块的指标分解

(2)应用开发人员:负责具体某一个模块的开发,确保在软件模块在局部的性能指标达成

(3)数据库性能专家:参与系统的整体设计,从数据库容量、性能诉求的角度出发给出数据面的优选部署方案、以及对象模型在库内的实现(索引、数据类型等),同时对模块与数据库的交互进行细节优化达成优化目标

关键点2:性能设计需要流程规范化,性能开发过程包含了以下的事情,建议按照顺序执行:

(1)设置性能目标、建立性能模型

(2)基于已有的硬件条件和数据库本身的能力,给出部署模型建议

(3)对开发代码进行性能分析,整理出数据库处理部分的占比、以及优化任务分解

(4)对数据库的建表语句、数据类型、索引方面结合具体业务查询进行详细设计

(5)系统联调确定当前应用程序与数据库交互效率是否达成性能指标

(6)特定问题的性能分析

(7)重复5/6确定所有的性能问题都已经解决。

因此针对性能设计的建议:

性能设计和开发是贯穿整个系统开发过程的,数据库性能专家在硬件选型、软件设计开发之前,就应当开始工作并持续到系统转维阶段。

性能设计需要有设定明确的性能目标、以及可验证、可度量的性能模型,如果缺失了这一步性能工程工作会被推迟直到问题出现,假设在架构决策确定以后,随着系统开发一步步推进,修复性能问题的难度和成本会越来越大。

1.3 性能复杂并充满挑战

系统的性能工程是一个充满挑战的领域,具体的原因很多,主要的原因在于通常系统性的性能问题有主观的成分也有其复杂的一面,而且常常是多维度问题并存

首先,性能能问题的主观性,通常性能问题按照不同的视角去理解可能会得到不同的结果,例如下面这幅图,不同的人由于其专注点、思考问题的角度不同会得到完全不同的结论

因此关于性能的主观性,可以归纳为以下两点:

软件工程等计算机相关的科学理论知识往往是建立在客观具体范畴上的,大多数业界人士审视问题非黑即白。在进行软件故障查找的时候,只需要判断问题bug是否存在或者是否已修复就可以了。因为问题bug总是伴随着错误信息,而错误信息通常容易解读

性能问题往往是主观的,开始着手性能问题时,对问题是否存在的判断都有可能是模糊的,在性能问题被修复的时候,被一个用户认为是“不好”的性能,另一个可能认为是“好”的。例如:某个查询耗时1s返回,这里是“好性能” 还是“不好的性能呢”?虽然查询响应时间可以用具体的时间单位来准确度量,但如果脱离目标还是很难说明达成的情况或者效果,因此对于性能需要定义清晰的目标

核心重点

性能目标定义要清晰,诸如平均响应时间latency、吞吐量throughput,考虑到波动因素时需要定义的最大响应时间、落进一定响应时间范围内的请求统计其百分比,一定要尽可能的把主观的问题客观化

性能问题描述要具体,需要包含硬件配置、组网、部署模型、测试模型、测试结果的量化描述

举例:

其次,性能问题往往由多个模块交互相互作用而成,造成很难在开始找到实际的根因,更糟糕的时有时甚至会被一些表面的现象带错了方向,导致花费很长时间无法找到实际原因

关于性能问题分析的复杂性主要有以下特征:

特征1:性能问题通常缺少一个明确的分析起点

问题暴露的表象往往只是结果而不是根因,有时候我们只能从猜测开始,比如,

猜测网络时延大

猜测磁盘IO成为了瓶颈

猜测操作系统在调度上不符合我们的预期

猜测某个位置不受控的进程影响了我们

keep in mind:分析性能问题的开始往往需要对这个是不是一个正确的方向做出判断,一个有经验的性能专家往往能够在开始找准方向

特征2:性能问题可能出现在子系统之间复杂的互联上

即便这些子系统隔离时都表现的很好,也可能是由于连锁故障出现的性能问题(模块间交互逻辑不匹配)

Keep in mind:不仅清晰理解模块间数据流、组件之间的关系,还需要理解他们之间是如何协作的,往往需要全局系统的方法

特征3:性能问题可能是多个问题并存

在复杂的系统中可能会有多个问题,他们之间可能相关也可能不相关,因此真正的任务可能不是寻找问题,而是辨别问题或者说辨别哪些问题是重要的

Keep in mind:需要造成当前性能问题的主要矛盾

1.4 性能相关的术语

这里介绍一些在数据库性能调优时经常用到的术语:

(1)关键术语:IOPS(PPS)

每秒钟发生的输入输出操作次数,是数据传输的一个度量方法。对于磁盘的读写,IOPS指的是每秒钟读写次数。数据库场景中,常用IOPS来描述数据库系统数据盘每秒钟对磁盘施加的IO频率,常用PPS来描述网络传输包的频率

(2)关键术语:吞吐量(Throughput)

评价工作执行的速率,在数据传输方面描述的是数据传输的速度(byte/s,bit/s)。在数据库场景中往往指的是每秒钟处理的事务数TPS、查询数QPS

(3)关键术语:响应时间(延时)Response time (Latency)

一次操作完成的时间,包括用于等待和服务的时间,也包括用来返回结果的时间。在数据库场景中用于描述一条查询的从发起到返回结果时的时间开销

(4)关键术语:饱和度Resource Saturation

指的是某一资源无法满足服务的排队工作量。数据库场景中用于描述大并发场景下处于等待工作队列的任务书,通常反映了当前系统作业被积压的情况

(5)关键数据:瓶颈Bottleneck

在系统性能力,瓶颈指的是限制系统性能的那个资源,辨别和优化掉瓶颈是系统性能优化的重要工作

(6)关键术语:工作负载Workload

系统的输入或者是对系统所施加的负载叫做工作负载。对数据库来说,工作负载是用户通过客户端给数据库发送的查询、运维操作等方面的请求

(7)关键术语:缓存Cache

用于复制或者缓冲一定数据的高速存储区域,目的是为了避免关键路径被较慢的处理过程拖慢,从而提高性能。对数据库来说,主要指计划缓存(避免查询重复编译)、结果集缓存物化(避免同类查询重复执行)

以上内容为数据库性能优化系统概述的相关内容,下篇将分享查询处理综述的精彩内容,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ip地址怎么写才是的对的?合法ip地址正确的格式

IP地址怎么写才是的对的?在互联网的世界里,IP地址就像是我们生活中的门牌号码,它是每个设备在网络中的唯一标识。正确的书写IP地址对于确保网络通信的顺畅至关重要。本文将带您了解合法IP地址的正确格式与书写规范,并深入探讨其在…

数据采集之二主一从,485总线共享器

产品概述 485总线共享器示意图 功能示意图 DAQ-GP-485HUB是上海数采物联网推出的一款 RS485总线多路复用共享数据处理器,是一款高性能的通讯设备,专门针对两台主机和 一台从机通讯时导致的数据冲突而设计。在实际工业控制和监控场景中,多个主…

IT运维服务方案

在现代企业中,信息系统已经成为业务运营的核心。为了确保这些系统的高效、稳定运行,制定一套完善的IT运维服务方案至关重要。本文将探讨如何设计和实施一个高效的IT运维服务方案,确保信息系统的持续健康运行。 IT运维服务的目标 IT运维服务…

YOLOv8改进 | FPN | 新型上采样算子CARAFE【全网独家】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、…

小程序大作为|小程序开发详细流程,新手也能轻松掌握

随着移动互联网的快速发展,小程序作为一种轻量级应用,因其无需下载安装、即点即用、用完即走的特点,受到了广大用户的青睐。那么开发小程序都有哪些开发流程呢?可以用哪种方式开发?选择合适的开发方式,一起…

华为设备telnet 远程访问配置实验简述

一、实验需求: 1、AR1模拟电脑telnet 访问AR2路由器。 二、实验步骤: 1、AR1和AR2接口配置IP,实现链路通信。 2、AR2配置AAA模式 配置用户及密码 配置用户访问级别 配置用户telnet 访问服务 AR2配置远程服务数量 配置用户远程访问模式为AAA 配置允许登录…

批量推送邮件如何高效实现?邮件推送技巧?

批量推送邮件有哪些注意事项?如何优化邮件推送效果? 无论是市场营销、客户服务还是内部沟通,批量推送邮件都发挥着关键作用。然而,如何高效实现批量推送邮件却是一个需要深思的问题。AokSend将探讨一些提高批量推送邮件效率的方法…

2005年上半年软件设计师【上午题】试题及答案

文章目录 2005年上半年软件设计师上午题--试题2005年上半年软件设计师上午题--答案2005年上半年软件设计师上午题–试题

【Sa-Token|4】Sa-Token微服务项目应用

若微服务数量多,如果每个服务都改动,工作量大,则可以只在网关和用户中心进行改动,也是可以实现单点登录的。 这种方式可以通过在网关服务中生成和验证 Sa-Token,并将其与现有的 Token关联存储在 Redis 中。用户中心提供…

自学鸿蒙HarmonyOS的ArkTS语言<三>路由跳转及传参

【官方文档传送门】 一、导入模块 import router from ohos.router二、新增页面配置 三、常用api 1、跳转到应用内的指定页面 build() {Row() {Button(下一页).onClick(() > {router.pushUrl({url: pages/Index2,params: {name: test}})})}.height(100%)}2、用应用内的某…

【Java】已解决java.net.UnknownHostException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.net.UnknownHostException异常 在Java的网络编程中,java.net.UnknownHostException是一个常见的异常,它通常表明在尝试解析主机名时出现了问题。…

php基础语法_面向对象

PHP php代码标记 多种标记来区分php脚本 ASP标记&#xff1a;<% php代码 %> 短标记&#xff1a; 脚本标记: 标准标记&#xff08;常用&#xff09;&#xff1a; 简写风格&#xff1a; ASP风格&#xff1a;<% php代码 %> 注意&#xff1a;简写风格和ASP风格…

sourceTree 解决remote: HTTP Basic: Access denied报错mac

解决sourceTree中remote: HTTP Basic: Access denied报错 mac sourcetree报错报错原因解决方案 mac sourcetree报错 warning: invalid credential line: xxx.com remote: HTTP Basic: Access denied fatal参考链接&#xff1a;https://developer.aliyun.com/article/1304149 …

ruoyi登录功能源码分析

Ruoyi登录功能源码分析 上一篇文章我们分析了一下若依登录验证码生成的代码&#xff0c;今天我们来分析一下登录功能的代码 1、发送登录请求 前端通过http://localhost/dev-api/login向后端发送登录请求并携带用户的登录表单 在后端中的com.ruoyi.web.controller.system包下…

14-Kafka-Day03

第 5 章 Kafka 消费者 5.1 Kafka 消费方式 5.2 Kafka 消费者工作流程 5.2.1 消费者总体工作流程 一个消费者组中的多个消费者&#xff0c;可以看作一个整体&#xff0c;一个组内的多个消费者是不可能去消费同一个分区的数据的&#xff0c;要不然就消费重复了。 5.2.2 消费者…

WIC 图像处理初体验——读取像素的值

先放上运行结果&#xff1a; 可以发现红绿蓝是从后往前的。 必须以C方式编译代码&#xff01; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <wincodec.h>int main(void) {CoInitialize(nullptr);IWICImagingFactory* fac;CoCreateInstance(CLS…

勒索病毒猖狂,请提前做好安全防护,德迅卫士保护你的安全

随着互联网的飞速发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;勒索病毒作为一种极具危害性的网络安全威胁&#xff0c;已经引起了广泛关注。为了帮助大家更好地预防和应对勒索病毒攻击&#xff0c;我们特地为您精心准备了这份超实用的勒索病毒自救预防指南。让我们…

数据中心技术:大数据时代的机遇与挑战

在大数据时代&#xff0c;数据中心网络对于存储和处理大量信息至关重要。随着云计算的出现&#xff0c;数据中心已成为现代技术的支柱&#xff0c;支持社交媒体、金融服务等众多行业。然而&#xff0c;生成和处理的大量数据带来了一些挑战&#xff0c;需要创新的解决方案。在这…

Android系统 抓trace方法(手机及车机)

1、先说说什么是trace trace是一种以perfetto.trace结尾的文件。一般用来分析卡顿、启动时间慢等问题&#xff0c;还可以用来分析方法耗时&#xff0c;android系统的性能、功耗等等问题。所需要使用到的网站是&#xff1a; Perfetto UI 他的前身是Systrace&#xff0c;不过Pe…

分布式事务的八种方案解析

分布式事务的八种方案解析 针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知等方案&#xff0c;以下总结8 种常见的解决方案&#xff0c;帮助大家在实际的分布式系统中更好地运用事务。 1.2PC 二阶段提交协议&#xff08;Two-phase commit…