数据库管理-第二十四期 数据库设计-硬件篇(20220610)

数据库管理 2022-06-10

  • 第二十四期 数据库设计-硬件篇
    • 1 CPU
    • 2 内存
    • 3 存储
    • 4 网络
    • 5 总结
    • 下期预告:

第二十四期 数据库设计-硬件篇

上次与这次的更新间隔比之前短多了,主要是这段时间和很多朋友讨论技术,回想并结合以前RWP的培训,有感而发回归数据库设计的本源:硬件。从最底层的硬件来谈谈我理解的数据库设计。

1 CPU

CPU是啥?Central Processing Unit,中央处理器,一台服务器最核心的组件之一,是服务器的运算单元,对于数据库来说,所有运行所需的运算资源都由CPU提供。现在的CPU不比从前,还集成内存控制器、I/O控制器、PCIe控制器等以前在主板上的各类组件,这样也方便了在一块主板上可安装更多的CPU。
CPU的性能主要取决于CPU架构、核心数、制程、频率和指令集等。对于服务器CPU来说,需要控制发热、功耗以及提高稳定性,所以相较于桌面级CPU动辄5Ghz以上的频率,我们很难看到3Ghz以上频率的服务器CPU。但服务器CPU的核心数往往很多,是主流桌面级CPU的很多倍。当然服务器CPU也针对其应对场景在架构和指令集层面做了对应的优化及设计。另一方面,服务器CPU也能支持更大容量的内存,更多通道数的PCIe总线(也就可以支撑更强大的其他设备,比如网卡、闪存卡、计算卡等)。
这里引入一个概念,现在的CPU,往往都引入了多线程技术,即是一个物理核心有两个运算线程或者叫一个物理核心在操作系统中查看会有两个逻辑核心。
数据库管理-第二十四期 数据库设计-硬件篇(20220610)_第1张图片
但是无论一个服务器主板上有多少颗CPU,每颗CPU有多少个物理核心,每个物理核心在同一个时间点只能做一件事情。那么多线程技术是拿来做什么的?从一般的CPU性能评测来说,开启多线程技术比不开启多线程可提升一定性能,但远远达不到两倍性能提升。多线程技术主要是在CPU物理核心在进行上下文切换(Context Switch),即在从缓存获取数据的空闲时进行其他已准备好缓存的运算。其实在这里也能知道CPU的内建缓存越大缓存数据越多,性能也越好(这里应该会有疑惑,内存拿来干嘛的?为啥还需要CPU缓存,这里下一节讲)。
接下来我也不介绍其他深层次且难懂的技术了,CPU的性能表现其实与CPU的占用率有关系。可能传统理解的CPU占用率是CPU使用了多少计算资源,但其实CPU占用率指的是一条运算即进程能够立即获取CPU资源的概率:
数据库管理-第二十四期 数据库设计-硬件篇(20220610)_第2张图片
比如50%CPU占用率代表每两个进程有一个能立即获取CPU资源,而针对OLTP数据库来说,CPU占用率超过66%就会造成大量甚至不断累加的CPU等待,因此当CPU占用率超过66%时,就需要想方设法降低CPU占用率或者提升硬件。当然OLAP数据库则不同,由于场景不同,CPU占用率100%也是正常的,所以本文后面的其他内容都是基于OLTP数据库。
这里再引入几个结论:1.进程应当尽快的获取CPU资源;2.进程应当尽可能长时间的使用CPU;3.进程不应当经常性主动进入睡眠状态;4.进程尽可能不非主动进入睡眠状态。满足这4点,通俗点讲就是CPU物理核心一直都在运行,没有进程积压等待,也没有摸鱼的现象,才能更好的发挥CPU性能。当然基础的进程分配会由CPU本身、操作系统、数据库一起进行自动协调,一般情况下不需要人为干预(OLAP系统则可能需要绑定CPU)。

2 内存

首先有请AIDA64对内存和缓存的性能测试:
数据库管理-第二十四期 数据库设计-硬件篇(20220610)_第3张图片
这里是双通道DDR4内存和桌面级CPU的性能表现,服务器CPU往往拥有更多内存通道数提供更高的内存带宽(可以理解为高速公路拥有更多车行道),但服务器内存频率往往比桌面级CPU低(高速公路限速更低),带有ECC自动纠错功能(几乎不会出现车祸)。这里回到第一节的内容,有了内存为啥还要CPU的内建缓存,从上面的性能测试来看,离CPU越近的缓存其带宽越大延迟越低但容量更小,而到了内存其带宽的降低幅度和延迟的提升幅度就远远大于各级缓存之间的差距了(其实各级缓存之间的差距也很大)。
这里做个假设,没有缓存,内存与CPU物理核心直连,CPU的运算速率依然远远快于内存,CPU就会出现等待数据的现象,因此需要在CPU中引入延迟更低性能更好的缓存,所以缓存是为了尽可能补齐内存与CPU之间速率的差值。但即便是快入缓存其实也跟不上CPU对于数据的渴求,那么又回到第一节的多线程技术,当L1缓存中数据不是下一个运算需要的数据,即是L1即缓存中没有需要的数据,需要从L2、L3、内存甚至是磁盘中获取数据触发上下文切换的时候,CPU不会等待这个进程而是转而将CPU资源给已经完成上下文切换的进程。从而满足CPU不摸鱼。

3 存储

这里不说磁盘是因为这里要引入机械硬盘、SSD、闪存卡和非易失性内存,这些作为实际存储数据的介质其实拥有千差万别的性能差异。
一般的SAS接口的企业级机械硬盘,也就拥有不到300MB/s的带宽,IOPS(4K顺序读取,后同)也就几十K/s;而SAS接口的SSD也不会超过600MB/s,IOPS也就100K/s左右。而现在主流的基于PCIe3.0 X4总线使用NVMe协议的SSD(接在M.2、U.2或者PCIe插槽上,通常也成为闪存卡)带宽可以达到3000MB/s以上,IOPS能达到600K/s以上。OPTANE作为Intel独有的新技术,介于闪存卡和内存之间,使用内存插槽并使用内存总线,在断电后不丢失数据,当然目前仅在Oracle Exadata X8M/X9M系列存储节点中有所应用,这里也不展开讲了。
从上述的性能对比不难看出,一块闪存卡带来的数据存储带宽是非常大的,相较于一般基于8/16Gbps(上线约为1-2GB/s)的HBA卡的存储链路连说,一块闪存卡即可占满所有带宽。
因此在使用闪存卡的情况下,往往几张闪存卡就能达到以前一套存储的性能。当然闪存卡目前还是比较贵的,但相较于以前也便宜了不少。那么使用闪存卡一般有几种场景:
1.单节点高性能服务器,可用于分布式数据库系统:
由于闪存卡带宽仍然高于主流的10GE网络环境,在分布式数据库系统中仍然主要服务与单一节点而不是全局,本地处理结果上升至集群汇总。
2.存储缓存加速:
存储缓存加速早在SAS SSD出现后就已经得到了应用。
3.存储计算:
利用闪存卡带来的高性能,在存储阶段就对数据进行预处理,从而达到减少数据传输量的目的。(虽然感觉和第一种场景有点类似,但我认为目的和实现方式还是有区别)

其实闪存卡的出现也是对传统离线分析平台的一大冲击,以前要利用多台服务器的性能与带宽,现在用很少的硬件就能实现。

4 网络

网络也是数据库非常重要的一环,无论是分布式数据库还是Oracle RAC,集群内节点间的数据交互也是非常重要的,现在的机房网络主流为10GE万兆网络,随着数据量的上升,25GE、40GE甚至100GE网络也逐渐得到应用。为了应对网络延迟,除了传统以太网以外,infiband、ROCE等技术也不断加入。
其实在我看来,无论是哪种数据库集群,只要规模达到一定程度了,网络将成为影响其性能的重要因素。

5 总结

其实回到本源,数据库设计中的硬件选型也是非常重要的一部分,要结合实际业务需求、数据量、成本预算选择最优方案。在一个数据库集群中也并非服务器越多越好,数据库软件承载力是一方面,硬件的承载能力也是非常重要的考量因素。而基于硬件环境的数据库选型及数据库逻辑结构、业务逻辑设计也相当重要,这些将在后面几期中表达我的理解。

下期预告:

数据库设计-集群篇

我现在发现个问题,一不小心把上一篇文章给覆盖了
二十三期是5月中旬写的跨版本PDB切换,后面再看补上不。。

你可能感兴趣的:(Oracle,运维,数据库,database,oracle)