数据库管理 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,往往都引入了多线程技术,即是一个物理核心有两个运算线程或者叫一个物理核心在操作系统中查看会有两个逻辑核心。

但是无论一个服务器主板上有多少颗CPU,每颗CPU有多少个物理核心,每个物理核心在同一个时间点只能做一件事情。那么多线程技术是拿来做什么的?从一般的CPU性能评测来说,开启多线程技术比不开启多线程可提升一定性能,但远远达不到两倍性能提升。多线程技术主要是在CPU物理核心在进行上下文切换(Context Switch),即在从缓存获取数据的空闲时进行其他已准备好缓存的运算。其实在这里也能知道CPU的内建缓存越大缓存数据越多,性能也越好(这里应该会有疑惑,内存拿来干嘛的?为啥还需要CPU缓存,这里下一节讲)。
接下来我也不介绍其他深层次且难懂的技术了,CPU的性能表现其实与CPU的占用率有关系。可能传统理解的CPU占用率是CPU使用了多少计算资源,但其实CPU占用率指的是一条运算即进程能够立即获取CPU资源的概率:

比如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对内存和缓存的性能测试:

这里是双通道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切换,后面再看补上不。。

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

  1. 数据库管理-第四十四期 数据库的物理隔离(20221118)

    数据库管理 2022-11-18 第四十四期 数据库的物理隔离 1 背景 2 Oracle 3 分布式 4 终极大招 总结 第四十四期 数据库的物理隔离 这周干了些啥?除了正常日常工作和协调部署各种新 ...

  2. 智能化软件开发微访谈·第二十四期 大模型时代的智能化软件生态(讨论汇编)...

    CodeWisdom "智能化软件开发沙龙是由CodeWisdom团队组织的围绕智能化软件开发.数据驱动的软件开发质量与效能分析.云原生与智能化运维等相关话题开展的线上沙龙,通过微信群访谈交 ...

  3. 机器人按照给定的指令c语言,【高训工控】专业课堂第二十四期——工业机器人调试基础:程序的构造与组成...

    原标题:[高训工控]专业课堂第二十四期--工业机器人调试基础:程序的构造与组成 大家好,欢迎来到[高训工控]专业课堂第二十四期,本期为大家带来--工业机器人调试基础:程序的构造与组成 在之前的文章中有 ...

  4. iOS摸鱼周报 第二十四期

    本期概要 话题:跟一位同学聊一下最近的面试感受. Tips:设计 OC 版本的 defer 功能,使用现有证书创建 Fastlane match 格式加密文件. 面试模块:离屏渲染相关知识点. 优秀博 ...

  5. 笑话集原创笑话精品展第二十四期

    1.有一个多次在大巴车上实施的罪犯在法庭上受审. 法官:这位被告,公诉机关指控你在客车上用暴力.控吓等不正当手段强行夺取他人钱财,你可知道你的行为已构成什么犯罪行为? 罪犯:知道. 法官:什么罪? 罪 ...

  6. 【eoe Android特刊】第二十四期Android WebView

    一.Android WebView是什么 1.1Aandroid WebView一些基本概念 在android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件. ...

  7. 【第二十四期】golang 一年经验开发 富途

    他们家是按题目来的,从一个小题目慢慢延伸着问,由浅入深,问到你换题为止. 第一题 给了一个网址,解释一下浏览器填入这个网址后发生了什么? TCP为什么要三次握手四次挥手? 502是什么? 如果出现50 ...

  8. 第二十四期:管理 | 成功领导远程IT团队的7个技巧

    管理虚拟工作环境需要各种真实世界的技能和工具.以下是激发创造力和生产力的策略.为了在日益缺乏人才和竞争激烈的IT世界中取得成功,越来越多的企业开始依赖于地理上分散的劳动力. 作者:John Edwar ...

  9. 第二十四期:面试问:Kafka为什么速度那么快?该怎么回答

    针对Kafka的基准测试可以参考,Apache Kafka基准测试:每秒写入2百万(在三台廉价机器上)下面从数据写入和读取两方面分析,为什么Kafka速度这么快 Kafka的消息是保存或缓存在磁盘上的 ...

最新文章

  1. Android App压力测试(Monkey和ADB)
  2. Spring3 集成 Hibernate3
  3. BUUCTF-Reverse:内涵的软件
  4. Linux系统信息查看命令大全
  5. [vue] 你了解axios的原理吗?有看过它的源码吗?
  6. php获取网页输出,PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)_PHP教程
  7. shell 自动输入密码
  8. LeetCode 题 - 88. 合并两个有序数组
  9. 智能计算机的功能是什么问题,人工智能在电脑系统的作用
  10. php全词查询,php 关键词查询的实现方法
  11. 高分辨率下应用程序显示模糊的解决办法
  12. java socket 客户端接收_java socket,怎么把客户端接收到的用户名和密码发送给后台?...
  13. 模拟MP-BGP建立全过程(BGP MPLS vpn)
  14. CF100015B - Ball Painting
  15. MTI Further
  16. Win10 1809 PowerShell美化教程
  17. UBuntu18.04 Qt之双HDMI接2个4K屏并分别设置分辨率、主屏、副屏
  18. python足球大数据分析_使用Python抓取欧洲足球联赛数据进行大数据分析
  19. python读json文件数组_如何在python中从json文件读取json对象数组
  20. ORACLE(emp)表习题与答案

热门文章

  1. idea中jar包关联源码
  2. DAS、NAS和SAN,IPSAN的基本了解
  3. 下拉框系统甄选火星推荐_微博下拉框技术首选15火星牛
  4. 【软件工程基础复习整理】第四章需求分析(2)数据流建模
  5. JAVA面试(关于技术深耕方向和职业规划)
  6. 组策略添加受信任站点
  7. 辟谣:关于南航计算机考研的谣言
  8. 接口技术--输入输出技术
  9. ioctl命令及参数传递
  10. 基于.NET 制作一个气象站 IoT 应用