数据库管理-第113期 Oracle Exadata 04-硬件选择(20231020)

2023-10-29 20:12

本文主要是介绍数据库管理-第113期 Oracle Exadata 04-硬件选择(20231020),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据库管理-第113期 Oracle Exadata 04-硬件选择(2023010290)

本周没写文章,主要是因为到上海参加了Oracle CAB/PAB会议,这个放在后面再讲,本期讲一讲Exadata,尤其是存储节点的硬件选择及其对应的一些通用软件配套。

1 InfiniBand/RoCE

InfiniBand交换机是Exadata X8及之前一直使用的内部交换机,以X8为例,单路带宽为40Gb。相较于以太网交换机,InfiniBand的延迟具有交大的优势。
RoCE交换机则是X8M开始使用的内部交换机,目前X8M、X9M、X10M均为单路100Gb,为以太网交换机。相较于InfiniBand价格更加便宜,而且能提供更大的带宽。

2 RDMA

对应交换机硬件,Exadata在很早的版本就开始使用RDMA技术,即:

  • Remote(远程):数据在网络中的两个节点之间传输。
  • Direct(直接):不需要内核参与,传输的所有处理都卸载到NIC硬件中完成。
  • Memory(内存):数据直接在两个节点的应用程序的虚拟内存间传输;不需要额外的复制和缓存。
  • Access(访问):访问操作有send/receive、read/write等。
    在这里插入图片描述

毕竟Exadata使用的是存算分离架构,本身基础延迟会大于存算一体架构。使用RDMA还有以下一些好处,使得计算节点可以更加快速的从存储节点获取数据:

  • 内存零拷贝(Zero Copy):RDMA应用程序可以绕过内核网络栈直接进行数据传输,不需要再将数据从应用程序的用户态内存空间拷贝到内核网络栈内存空间。
  • 内核旁路(Kernel bypass):RDMA应用程序可以直接在用户态发起数据传输,不需要在内核态与用户态之间做上下文切换。
  • CPU减负(CPU offload):RDMA可以直接访问远程主机内存,不需要消耗远程主机中的任何CPU,这样远端主机的CPU可以专注自己的业务,避免其cache被干扰并充满大量被访问的内存内容。

3 PMEM/XRMEM

PMEM即非易失性内存(傲腾),XRMEM则是Exdata RDMA内存(DDR5)。其中PMEM使用于X8M和X9M,因Intel停止生产傲腾,因此X10M开始使用XRMEM。二者本质上是在Flash Card(即NVMe SSD)上再添加一层加速缓存,且二者均可直接接入RDMA,极大地降低了数据访问延迟。

4 Flash Card(NVMe SSD)

这里就不介绍啥是NVMe SSD了,毕竟现在新款的笔记本都是标配,最近的降价也是家用的常规产品了。Exadata也是很早就开始使用这一技术产品,使用PCIe接口极大的带宽在HDD(当然对于X10M之前的全闪存储是不存在的,X10M开始的全闪存储,有容量型Flash Card)之上加速缓存数据。在X9M之前标准存储节点使用的是4块PCIe 3.0 x4+x4的6.4TB(3.2TB+3.2TB) NVMe SSD,而X9M开始则是4块PCIe 4.0 x4+x4的6.4TB(3.2TB+3.2TB) NVMe SSD(Exadata单盘都是做了PCIe拆分的),正好我电脑上有PCIe 3.0和PCIe 4.0 x4的NVMe SSD,这里也做一个测试:
下面是一块PCIe 3.0普通SX8200的成绩:
在这里插入图片描述
下面是一块PCIe 4.0顶级旗舰980Pro的成绩:
在这里插入图片描述
首先从极限带宽来看,PCIe 4.0是PCIe 3.0的两倍,这里用家用级产品大概对比下X8M和X9M一个存储节点Flash Card 的极限带宽,X8M总计大概为3300MB/s×4×2=26400MB/s,X9M大概是2倍32800MB/s。试想一下如果使用传统FC-SAN的32Gb/s(≈4000MB/s),其实算上本身损耗,一块PCIe 3.0的Flash Card就会占满,即便是40Gb/s(≈5000MB/s)或100Gb/s(≈12500MB/s),光是X8M上的配置就已经可以远远超过一台存储节点的全部带宽,而Flash Card往上还有PMEM/XRMEM这两个的带宽可是接近内存的速度(可以参考数据库管理-第二十四期 数据库设计-硬件篇(20220610)中对内存的测试结果)。
这里再试想一下上百TB的全闪存储,以RAC集群为例,极端数据库读取的带宽肯定是远远大于传输层(FC/网络)带宽的,那么这种情况下瓶颈在传输,磁盘性能是无法充分利用的。

5 ESS起个头

为了解决存储节点磁盘能力远远大于网络能力的问题,Exadata使用Exadata Stroage Software(后面文章都将用ESS作为简称)来将存储节点转换为智能存储,即让存储参与数据库计算,仅将需要的数据通过网络传输至计算节点,配合RDMA,降低了延迟、网络IO、内存占用以及CPU损耗。可以说ESS才是Exadata最能打的部分,也是很多国产一体机纸面数据吊打Exadata但实际使用又干不过Exadata的主要原因。后面我将用若干期来讲ESS带来的一系列存储功能。

6 总结

老规矩,知道写了些啥。

这篇关于数据库管理-第113期 Oracle Exadata 04-硬件选择(20231020)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303103

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl