数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)

数据库管理204期 2024-06-15

  • 数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)
    • 1 SSD物理结构
    • 2 SSD颗粒类型
    • 3 DRAM & SLC Cache
      • 3.1 DRAM
      • 3.2 SLC Cache
      • 3.3 其他方式
    • 4 缓外降速
    • 总结

数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问、OceanBase观察团成员,青学会(青年数据库学习互助会)外部顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

近期在一些朋友的非专业存储的全闪存储环境中,出现了一个有趣的现象:

  • 当数据量急速上升的过程中,整个数据库的IO的性能反应会有一个较大规模的下降,需要一段时间才能恢复IO性能
  • 当全闪存储整体存储空间使用量达到一定百分比后,数据库反应出来的整体IO会有一定下降且不稳定,一般需要提前做横向扩展并平衡数据

出现上面情况,数据库本身排查一般不会发现问题,那么换个思路,从SSD的角度来看看,为什么会出现这个问题。

1 SSD物理结构

不同于机械磁盘(HDD),通过磁头在磁盘刻录/读取信息,这需要去物理寻址。SSD的的运行方式就有点不同,SSD的核心主要有两部分:主控和闪存颗粒:
image.png

  • 主控芯片:通过M.2、U.2或PCIe接口使用PCIe总线与CPU直连或通过主板芯片组从CPU“继承”的PCIe总线与CPU相连;并将数据写入SSD的闪存颗粒中,从闪存颗粒中读取数据;融合数据存储、清理垃圾等工作
  • 闪存颗粒:实际存储数据的地方

(这里说明一下,一般来说服务器CPU可用的直连CPU的PCIe使可以支撑足够多的PCIe NVMe SSD的;通过主板芯片组扩展的PCIe通道一般为桌面级CPU,因存在共享通道,性能略低于直连CPU)

2 SSD颗粒类型

说起闪存颗粒类型之前,得先说一下闪存颗粒的最小存储单元,其实就是一个非常古老的硬件结构:浮栅晶体管,简单来说就是通过存储不同数量的电子(一般最多可存储7个电子)来判断存储的数据内容。然后通过海量的浮栅晶体管来存储数据,关于其他的组件就暂时放下不说了。
目前主流的存储颗粒有MLC、TLC、SLC:

  • SLC:一个浮栅晶体管可存储1bit数据,可存储两个内容:0-3个电子为1,4-7个电子为0
    image.png
  • MLC:一个浮栅晶体管可存储2bit数据,可存储4个内容:0-1个电子为11,2-3个电子为10,4-5个电子为01,6-7个电子为00
    image.png
  • TLC:一个浮栅晶体管可存储3bit数据,可存储8个内容:0个电子为111,1个电子为110,2个电子为101,3个电子为100,4个电子为011,5个电子为010,6个电子为001,7个电子为000
    image.png

从容量来看:SLC < MLC < TLC,越往右同样数量的浮栅晶体管可以存放更多数据,这也导致了越往左成本越高
从性能来看:SLC > MLC > TLC,越往左一个浮栅晶体管需要操作的次数更少,也不需要更加精确的电子控制;同时也需要更多的浮栅晶体管来存储相同大小的数据,多个浮栅晶体管可并行写入加速
从寿命来看:SLC > MLC > TLC,越往左单个浮栅晶体管擦写操作更少;越往右,浮栅晶体管出现需要融合数据的概率越大

3 DRAM & SLC Cache

首先,我们来算算,使用不同类型的闪存颗粒存放1TB数据大概需要多少个浮栅晶体管:

  • SLC:1024×1024×1024×1024
  • MLC:1024×1024×1024×1024/2
  • TLC:1024×1024×1024×1024/3

不需要计算结果,即便是TLC都是需要海量的浮栅晶体管来存放1TB数据。那么海量的浮栅晶体管存放数据,肯定不可能一个一个去检索,这里就需要FLT(FLash Translation Layer)表来记录逻辑数据和物理位置之间的关系。那么这个FLT放哪呢?怎么加速查询?这里一般来说主要有两种方案。

3.1 DRAM

这里可以在SSD中添加一个DRAM来存放FLT表:
image.png
众所周知,DRAM的IO性能是远高于闪存颗粒的,DRAM缓存FLT是可以极大提升检索数据物理位置映射的效率。另一方面,DRAM也可以作为写入缓存,以解决MLC、TLC的写放大问题(说白了就是排队累积对应量的数据再写入闪存颗粒,减少单个浮栅晶体管的空间浪费避免空间回收和融合出现)。

3.2 SLC Cache

尤其是使用TLC颗粒的SSD,可以通过将一部分TLC浮栅晶体管模拟成SLC模式,来缓存FLT表和写入缓存。
image.png
使用这种方式会增大主控的维护压力,而且会写入模拟SLC的数据最终会转换至TLC中,且数据量的整体提升会压缩模拟SLC的数量,这样一是会降低维护FLT和写入缓存的性能,另一方面会放大模拟SLC转换TLC操作量。最终当没有模拟SLC剩余时,SSD的性能会下降的十分明显。同时这种方式性能肯定比不过SSD内置DRAM。

3.3 其他方式

  • 在主控芯片中添加一块不大的区域缓存常用的FLT表信息
  • 闪存颗粒中划分固定区域模拟SLC模式来缓存部分常用的FLT表信息和写缓存
  • 向机器主内存借用一块区域来存放部分常用的FLT表信息

4 缓外降速

一般来说企业级SSD都会使用SLC闪存颗粒+较大的DRAM来兼顾寿命与性能,但是这样往往价格会高不少。经过观察发现,文章一开始出现问题的环境为了兼顾成本往往使用的是SSD是较小DRAM或者是模拟SLC缓存的民用级SSD。那么当数据暴增超过缓存容量时,会出现降速的现象,甚至会处罚浮栅晶体管的类型转换;当整体容量足够大时,SSD也会因为失去缓存而出现性能问题。

总结

本期稍微深入探讨了一下SSD的一些内部的东西,希望给大家多一个视角。
老规矩,知道写了些啥。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

System-Verilog 实现DE2-115流水灯

文章目录 一、 SystemVerilog1. SystemVerilog简介2. 基本语法和特性 二、实验过程hello.v文件引脚分配 三、实验效果参考 一、 SystemVerilog 1. SystemVerilog简介 SystemVerilog是一种高级的硬件描述语言&#xff08;HDL&#xff09;&#xff0c;它不仅继承了Verilog语言的…

Qt项目天气预报(2) - 重写事件函数

鼠标右键实现退出界面 知识点QMenu: QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 QMenu是Qt库中用于创建弹出式菜单的类&#xff0c;它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍&#xff1a; 1. 类的基本特…

JUnit 5学习笔记

JUnit 5 学习笔记 1.JUnit5的改变2.JUnit5常用注解及测试2.1 DisplayName/Disabled/BeforeEach/AfterEach/BeforeAll/AfterAll2.2 Timeout2.3 RepeatedTest 3.断言3.1 简单断言3.2 数组断言3.3 组合断言3.4 异常断言3.5 超时断言3.6 快速失败 4.前置条件5.嵌套测试6.参数化测试…

《Fundamentals of Power Electronics》——理想变压器基本公式推导

接下去推导理想变压器的基本公式。理想变压器满足以下三个条件&#xff1a; 1、无铜损。假设原副边线圈均无纯电阻&#xff0c;则不会因在铜导线中产生焦耳热引起能量损耗&#xff0c;另外也不考虑回路中的分布电容。 2、无铁损。忽略通过铁芯的磁通量变化引起的涡流损耗&…

DistilBertModel模型的简单解释

前言 DistilBertModel((embeddings): Embeddings((word\_embeddings): Embedding(30522, 768, padding\_idx0)(position\_embeddings): Embedding(512, 768)(LayerNorm): LayerNorm((768,), eps1e-12, elementwise\_affineTrue)(dropout): Dropout(p\0.1, inplaceFalse))(trans…

解决方案︱视频孪生智慧高速解决方案

系统概述 在交通强国战略的指导下&#xff0c;我国政府高度重视以数字化为核心的智慧高速公路建设与发展。2023年9月&#xff0c;交通运输部印发了《交通运输部关于推进公路数字化转型加快智慧公路建设发展的意见》&#xff0c;强调到2035年&#xff0c;全面实现公路数字化转型…

【多线程】Thread类及其基本用法

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. Java中多线程编程1.1 操作系统线程与Java线程1.2 简单使用多线程1.2.1 初步创建新线程代码1.2.2 理解每个…

IDEA创建lib目录,导入jar

IDEA创建lib目录&#xff0c;导入jar lib第一种创建方法&#xff1a; 当发现项目没有lib目录时&#xff0c;File>>>Project Structure 打开Artifacts目录 lib第二种创建方法&#xff1a; 按需选择需要的jar包或者全选即可 lib第三种创建方法&#xff1a;

MongoDB使用$addToSet向数组中添加元素

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第66篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

为什么白昼最长的地方不是在太阳的直射点

因为地球的自传轴相对于地球的公转平面成23.5度的夹角&#xff0c;地球自转一周是24小时&#xff0c;只有白天和黑夜两种状态。白天就可以定义为我们坐在地球上&#xff0c;跟着地球一直转&#xff0c;穿过有光照的地方所花的时间。 假设太阳光正对北回归线&#xff08;这一天…

2024.ZCPC.M题 计算三角形个数

题目描述&#xff1a; 小蔡有一张三角形的格子纸&#xff0c;上面有一个大三角形。这个边长为 的大三角形&#xff0c; 被分成 个边长为 1 的小三角形(如图一所示)。现在&#xff0c;小蔡选择了一条水平边 删除&#xff08;如图二所示&#xff09;&#xff0c;请你找出图上剩余…

把FydeOS塞进U盘,即插即用,小白都懂能看懂的Fyde To Go教程

前言 之前小白给各位小伙伴分享过关于Windows塞进U盘的教程&#xff1a; 把Windows系统装进U盘&#xff0c;从此到哪都有属于你自己的电脑系统 如果Windows都能装到U盘里&#xff0c;随身携带。那fydeOS能不能也像Windows一样塞到U盘里&#xff0c;实现FydeOS to Go呢&#…

树的基本概念

树(Tree) "树"这种数据很像现实生活中的“树”&#xff0c; 这里的每个元素我们叫做“节点” 用来连线相邻节点之间的关系&#xff0c;我们叫做“父子关系” A节点就是B节点的父节点&#xff0c;B节点是A节点的‘子节点’B&#xff0c;C&#xff0c;D这三个节点的…

Java基础语法Ⅰ【注释、关键字、字面量、变量】

Java基础语法① 注释关键字与标识符数据类型字面量和常量变量转义字符 注释 注释是在写代码时&#xff0c;对代码作出的一些解释说明&#xff0c;比如某一个函数的作用&#xff08;功能&#xff09;、函数接收的参数以及函数返回什么东西等等。 这些解释说明没有任何功能&…

C# Winform DPI自适应方案

Winform窗体随着屏幕的DPI缩放,会引起窗体变形及字体变形。 1.设置窗体和自定义用户控件的AutoScaleMode为None 实现目标:禁止窗体因为字体大小缩放变形 因为显示的高分屏,然后操作系统的设置了字体缩放引起的。窗体默认的AutoScaleMode = Font,控件会因为高分屏自动缩放…

遇到的状态308问题

前端用的vue.config.js做的代理,请求后端的地址https://n6118lr7-10010.usw3.devtunnels.ms 在请求的时候会308 是因为本地是http而请求地址是https 前端代理允许https接口代理即可

python pandas处理股票量化数据:笔记2

有一个同学用我的推荐链接注册了tushare社区帐号https://tushare.pro/register?reg671815&#xff0c;现在有了170分积分。目前使用数据的频率受限制。不过可以在调试期间通过python控制台获取数据&#xff0c;将数据保存在本地以后使用不用高频率访问tushare数据接口&#xf…

【Spring】Spring事务相关源码分析

目录&#xff1a; 1.讲述事务的一些基础概念。 2.讲述事务的生命周期源码 3.配置事务&#xff0c;以及事务注解的源码 1.前言 具体事务中Spring是怎么管理事务&#xff0c;怎么去管理、创建、销毁等操作的呢&#xff1f;这一次来分解一下。 2.事务概述&#xff08;复习&a…

Vscode中使用make命令

前言 需要注意&#xff0c;如下操作需要进行网络代理&#xff0c;否则会出现安装失败的情况 安装 第一步 — 安装MingGW &#xff08;1&#xff09;进入官网下载 &#xff08;2&#xff09;下载完成之后&#xff0c;双击exe文件 &#xff08;3&#xff09;点击Install &#x…

Python设计模式 - 简单工厂模式

定义 简单工厂模式是一种创建型设计模式&#xff0c;它通过一个工厂类来创建对象&#xff0c;而不是通过客户端直接实例化对象。 结构 工厂类&#xff08;Factory&#xff09;&#xff1a;负责创建对象的实例。工厂类通常包含一个方法&#xff0c;根据输入参数的不同创建并返…